5 #ifndef OPENTITAN_SW_DEVICE_SILICON_CREATOR_MANUF_BASE_PERSO_TLV_DATA_H_
6 #define OPENTITAN_SW_DEVICE_SILICON_CREATOR_MANUF_BASE_PERSO_TLV_DATA_H_
12 #include "sw/device/lib/testing/json/provisioning_data.h"
13 #include "sw/device/silicon_creator/lib/cert/cert.h"
14 #include "sw/device/silicon_creator/lib/error.h"
28 typedef enum perso_tlv_object_type {
29 kPersoObjectTypeX509Tbs = 0,
30 kPersoObjectTypeX509Cert = 1,
31 kPersoObjectTypeDevSeed = 2,
32 kPersoObjectTypeCwtCert = 3,
33 } perso_tlv_object_type_t;
35 typedef uint16_t perso_tlv_object_header_t;
36 typedef uint16_t perso_tlv_cert_header_t;
37 typedef uint16_t perso_tlv_dev_seed_header_t;
39 typedef enum perso_tlv_obj_header_fields {
41 kObjhSizeFieldShift = 0,
42 kObjhSizeFieldWidth = 12,
43 kObjhSizeFieldMask = (1 << kObjhSizeFieldWidth) - 1,
46 kObjhTypeFieldShift = kObjhSizeFieldWidth,
48 sizeof(perso_tlv_object_header_t) * 8 - kObjhSizeFieldWidth,
49 kObjhTypeFieldMask = (1 << kObjhTypeFieldWidth) - 1,
50 } perso_tlv_obj_header_fields_t;
78 typedef enum perso_tlv_cert_header_fields {
80 kCrthSizeFieldShift = 0,
81 kCrthSizeFieldWidth = 12,
82 kCrthSizeFieldMask = (1 << kCrthSizeFieldWidth) - 1,
85 kCrthNameSizeFieldShift = kCrthSizeFieldWidth,
86 kCrthNameSizeFieldWidth =
87 sizeof(perso_tlv_cert_header_t) * 8 - kCrthSizeFieldWidth,
88 kCrthNameSizeFieldMask = (1 << kCrthNameSizeFieldWidth) - 1,
89 } perso_tlv_cert_header_fields_t;
94 #define PERSO_TLV_SET_FIELD(type_name, field_name, full_value, field_value) \
96 uint16_t mask = k##type_name##field_name##FieldMask; \
97 uint16_t shift = k##type_name##field_name##FieldShift; \
98 uint16_t fieldv = (uint16_t)(field_value)&mask; \
99 uint16_t fullv = __builtin_bswap16((uint16_t)(full_value)); \
100 mask = (uint16_t)(mask << shift); \
101 (full_value) = __builtin_bswap16( \
102 (uint16_t)((fullv & ~mask) | (((uint16_t)fieldv) << shift))); \
105 #define PERSO_TLV_GET_FIELD(type_name, field_name, full_value, field_value) \
107 uint16_t mask = k##type_name##field_name##FieldMask; \
108 uint16_t shift = k##type_name##field_name##FieldShift; \
109 *(field_value) = (__builtin_bswap16(full_value) >> shift) & mask; \
143 char name[kCrthNameSizeFieldMask + 1];
159 rom_error_t perso_tlv_get_cert_obj(uint8_t *buf,
size_t ltv_buf_size,
196 rom_error_t perso_tlv_cert_obj_build(
const char *name,
197 const perso_tlv_object_type_t obj_type,
198 const uint8_t *cert,
size_t cert_size,
199 uint8_t *buf,
size_t *buf_size);
216 rom_error_t perso_tlv_push_cert_to_perso_blob(
217 const char *name,
bool needs_endorsement,
218 const dice_cert_format_t cert_format,
const uint8_t *cert,
size_t cert_size,
230 rom_error_t perso_tlv_push_to_perso_blob(
const void *data,
size_t size,
231 perso_blob_t *perso_blob);