5 #include "sw/device/lib/base/status.h"
9 #include "sw/device/silicon_creator/lib/drivers/flash_ctrl.h"
10 #include "sw/device/silicon_creator/manuf/base/perso_tlv_data.h"
12 OTTF_DEFINE_TEST_CONFIG();
14 const char kBase64[] =
15 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
17 static void base64_encode(
char *dest,
const uint8_t *data, int32_t len) {
18 for (int32_t i = 0; len > 0; i += 3, len -= 3) {
20 uint32_t val = (uint32_t)(data[i] << 16 |
21 (len > 1 ? data[i + 1] << 8 : 0) |
22 (len > 2 ? data[i + 2] : 0));
24 *dest++ = kBase64[(val >> 18) & 0x3f];
25 *dest++ = kBase64[(val >> 12) & 0x3f];
26 *dest++ = len > 1 ? kBase64[(val >> 6) & 0x3f] :
'=';
27 *dest++ = len > 2 ? kBase64[(val >> 0) & 0x3f] :
'=';
32 static status_t print_cert(
char *dest,
35 TRY(flash_ctrl_info_read_zeros_on_read_error(
36 info_page, 0,
sizeof(data) /
sizeof(uint32_t), data));
39 size_t len =
sizeof(data);
42 rom_error_t err = perso_tlv_get_cert_obj(data + offset, len, &obj);
43 if (err != kErrorOk) {
55 static status_t print_owner_block(
char *dest,
58 TRY(flash_ctrl_info_read(info_page, 0,
sizeof(data) /
sizeof(uint32_t),
60 base64_encode(dest, data,
sizeof(data));
67 TRY(print_cert(buf, &kFlashCtrlInfoPageFactoryCerts));
68 TRY(print_cert(buf, &kFlashCtrlInfoPageDiceCerts));
71 TRY(print_owner_block(buf, &kFlashCtrlInfoPageOwnerSlot0));
74 TRY(print_owner_block(buf, &kFlashCtrlInfoPageOwnerSlot1));
82 if (status_err(sts)) {
85 return status_ok(sts);