@@ -30,6 +30,8 @@ cbootimage_soc_config * g_soc_config;
static void format_u32_hex8(char const * message, void * data);
static void format_u32(char const * message, void * data);
static void format_chipuid(char const * message, void * data);
+static void format_hex_16_bytes(char const * message, void * data);
+static void format_rsa_param(char const * message, void * data);
typedef void (*format_function)(char const * message, void * data);
@@ -39,9 +41,11 @@ typedef struct {
format_function format;
} value_data;
+#define ARSE_RSA_PARAM_MAX_BYTES 256
typedef union {
u_int32_t val;
u_int8_t uid[16];
+ u_int8_t rsa_param[ARSE_RSA_PARAM_MAX_BYTES];
} param_types;
#define MAX_PARAM_SIZE sizeof(param_types)
@@ -54,6 +58,9 @@ static value_data const values[] = {
{ token_odm_data, "OdmData = ", format_u32_hex8 },
{ token_secure_jtag_control, "JtagCtrl = ", format_u32_hex8 },
{ token_secure_debug_control, "DebugCtrl = ", format_u32_hex8 },
+ { token_crypto_hash, "BCT AES Hash = ", format_hex_16_bytes },
+ { token_rsa_key_modulus, "RsaKeyModulus = ", format_rsa_param },
+ { token_rsa_pss_sig_bct, "RsaPssSigBct = ", format_rsa_param },
{ token_unique_chip_id, "ChipUid = ", format_chipuid },
{ token_bootloader_used, "# Bootloader used = ", format_u32 },
{ token_bootloaders_max, "# Bootloaders max = ", format_u32 },
@@ -72,6 +79,8 @@ static value_data const bl_values[] = {
{ token_bl_load_addr, "Load address = ", format_u32_hex8 },
{ token_bl_entry_point, "Entry point = ", format_u32_hex8 },
{ token_bl_attribute, "Attributes = ", format_u32_hex8 },
+ { token_bl_crypto_hash, "Bl AES Hash = ", format_hex_16_bytes },
+ { token_rsa_pss_sig_bl, "RsaPssSigBl = ", format_rsa_param },
};
static value_data const mts_values[] = {
@@ -108,6 +117,36 @@ static void format_chipuid(char const * message, void * data)
printf("%s%s;\n", message, uid_str);
}
+static void format_hex_16_bytes(char const * message, void * data)
+{
+ u_int8_t *p_byte = (u_int8_t *)data;
+ int byte_index;
+
+ printf("%s", message);
+ for (byte_index = 0; byte_index < 16; ++byte_index)
+ printf("%02x", *p_byte++);
+
+ printf(";\n");
+}
+
+static void format_rsa_param(char const * message, void * data)
+{
+ u_int8_t *rsa = (u_int8_t *)data;
+ int byte_index;
+
+ printf("%s", message);
+ for (byte_index = 0; byte_index < ARSE_RSA_PARAM_MAX_BYTES;
+ ++byte_index) {
+ printf("%02x", *rsa++);
+
+ if ((byte_index + 1) % 64 == 0)
+ printf(";\n");
+ }
+
+ if (byte_index % 64 != 0)
+ printf(";\n");
+}
+
/*****************************************************************************/
static void usage(void)
{
@@ -109,6 +109,8 @@ parse_token t210_root_token_list[] = {
token_bootloaders_max,
token_bct_size,
token_hash_size,
+ token_crypto_hash,
+ token_bl_crypto_hash,
token_crypto_offset,
token_crypto_length,
token_max_bct_search_blks,
@@ -2034,6 +2036,12 @@ t210_getbl_param(u_int32_t set,
sizeof(nvboot_hash));
break;
+ case token_rsa_pss_sig_bl:
+ swap_endianness(data,
+ &bct_ptr->bootloader[set].signature.rsa_pss_sig,
+ sizeof(nvboot_rsa_pss_sig));
+ break;
+
default:
return -ENODATA;
}
@@ -2130,6 +2138,15 @@ t210_bct_get_value(parse_token id, void *data, u_int8_t *bct)
memcpy(data, &(bct_ptr->unique_chip_id), sizeof(nvboot_ecid));
break;
+ case token_rsa_key_modulus:
+ swap_endianness(data, &bct_ptr->key, sizeof(nvboot_rsa_key_modulus));
+ break;
+
+ case token_rsa_pss_sig_bct:
+ swap_endianness(data, &bct_ptr->signature.rsa_pss_sig,
+ sizeof(nvboot_rsa_pss_sig));
+ break;
+
case token_reserved_offset:
*((u_int32_t *)data) = (u_int8_t *)&(samplebct.reserved)
- (u_int8_t *)&samplebct;
Add support to dump rsa pubkey, bct's rsa-pss signature and bootloader's rsa-pss signature. Signed-off-by: Jimmy Zhang <jimmzhang@nvidia.com> --- src/bct_dump.c | 39 +++++++++++++++++++++++++++++++++++++++ src/t210/nvbctlib_t210.c | 17 +++++++++++++++++ 2 files changed, 56 insertions(+)