5 #ifndef OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_CERT_ASN1_H_
6 #define OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_CERT_ASN1_H_
10 #include "sw/device/silicon_creator/lib/error.h"
51 rom_error_t asn1_start(
asn1_state_t *new_state, uint8_t *buffer,
size_t size);
64 rom_error_t asn1_finish(
asn1_state_t *state,
size_t *out_size);
89 void asn1_push_bytes(
asn1_state_t *state,
const uint8_t *bytes,
size_t size);
116 size_t unused_bits_offset;
120 uint8_t current_byte;
124 typedef enum asn1_tag_class {
125 kAsn1TagClassUniversal = 0 << 6,
126 kAsn1TagClassApplication = 1 << 6,
127 kAsn1TagClassContext = 2 << 6,
128 kAsn1TagClassPrivate = 3 << 6,
132 typedef enum asn1_tag_form {
133 kAsn1TagFormPrimitive = 0 << 5,
134 kAsn1TagFormConstructed = 1 << 5,
138 typedef enum asn1_tag_number {
139 kAsn1TagNumberBoolean = 0x01,
140 kAsn1TagNumberInteger = 0x02,
141 kAsn1TagNumberBitString = 0x03,
142 kAsn1TagNumberOctetString = 0x04,
143 kAsn1TagNumberOid = 0x06,
144 kAsn1TagNumberUtf8String = 0x0c,
145 kAsn1TagNumberPrintableString = 0x13,
146 kAsn1TagNumberGeneralizedTime = 0x18,
147 kAsn1TagNumberSequence = 0x30,
148 kAsn1TagNumberSet = 0x31,
197 void asn1_push_bool(
asn1_state_t *state, uint8_t tag,
bool value);
214 void asn1_push_int32(
asn1_state_t *state, uint8_t tag, int32_t value);
219 void asn1_push_uint32(
asn1_state_t *state, uint8_t tag, uint32_t value);
240 void asn1_push_integer(
asn1_state_t *state, uint8_t tag,
bool is_signed,
241 const uint8_t *bytes_be,
size_t size);
263 void asn1_push_integer_pad(
asn1_state_t *state,
bool is_signed,
264 const uint8_t *bytes_be,
size_t size,
281 void asn1_push_oid_raw(
asn1_state_t *state,
const uint8_t *bytes,
size_t size);
303 void asn1_push_string(
asn1_state_t *state, uint8_t tag,
const char *str,
322 void asn1_push_hexstring(
asn1_state_t *state, uint8_t tag,
const uint8_t *bytes,