summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek BehĂșn <[email protected]>2024-04-04 09:50:55 +0200
committerStefan Roese <[email protected]>2024-04-04 10:45:27 +0200
commit59840f7b93e91d855b48a3378f7620bc869a6ed7 (patch)
tree0f346dfb4988c9e40cefd976362f6ac38d92eaad
parent2f1b88affad2094aeab4cd617e22e79ee9dc22a3 (diff)
arm: mvebu: turris_omnia: Print board ECDSA public key if available
If MCU supports the FEAT_CRYPTO feature, read board ECDSA public key from MCU and print it. Signed-off-by: Marek BehĂșn <[email protected]> Reviewed-by: Stefan Roese <[email protected]>
-rw-r--r--board/CZ.NIC/turris_omnia/turris_omnia.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c
index f63640ad646..b2f0088e5e8 100644
--- a/board/CZ.NIC/turris_omnia/turris_omnia.c
+++ b/board/CZ.NIC/turris_omnia/turris_omnia.c
@@ -253,6 +253,24 @@ static int omnia_mcu_board_info(char *serial, u8 *mac, char *version)
return 0;
}
+static int omnia_mcu_get_board_public_key(char pub_key[static 67])
+{
+ u8 reply[34];
+ int ret;
+
+ ret = omnia_mcu_read(CMD_CRYPTO_GET_PUBLIC_KEY, reply, sizeof(reply));
+ if (ret)
+ return ret;
+
+ if (reply[0] != 33)
+ return -EBADMSG;
+
+ bin2hex(pub_key, &reply[1], 33);
+ pub_key[66] = '\0';
+
+ return 0;
+}
+
static void enable_a385_watchdog(unsigned int timeout_minutes)
{
struct sar_freq_modes sar_freq;
@@ -1032,7 +1050,7 @@ int board_late_init(void)
int checkboard(void)
{
- char serial[17], version[4];
+ char serial[17], version[4], pub_key[67];
bool has_version;
int err;
@@ -1051,6 +1069,11 @@ int checkboard(void)
printf(" Board version: %s\n", has_version ? version : "unknown");
printf(" Serial Number: %s\n", !err ? serial : "unknown");
+ if (omnia_mcu_has_feature(FEAT_CRYPTO)) {
+ err = omnia_mcu_get_board_public_key(pub_key);
+ printf(" ECDSA Public Key: %s\n", !err ? pub_key : "unknown");
+ }
+
return 0;
}