diff mbox series

[u-boot-mvebu,v3,06/18] arm: mvebu: turris_omnia: Print board ECDSA public key if available

Message ID 20240327162355.24584-7-kabel@kernel.org
State Superseded
Delegated to: Stefan Roese
Headers show
Series Turris Omnia - New board revision support | expand

Commit Message

Marek Behún March 27, 2024, 4:23 p.m. UTC
If MCU supports the FEAT_CRYPTO feature, read board ECDSA public key
from MCU and print it.

Signed-off-by: Marek Behún <kabel@kernel.org>
---
 board/CZ.NIC/turris_omnia/turris_omnia.c | 25 +++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

Comments

Stefan Roese March 28, 2024, 9:56 a.m. UTC | #1
On 3/27/24 17:23, Marek Behún wrote:
> If MCU supports the FEAT_CRYPTO feature, read board ECDSA public key
> from MCU and print it.
> 
> Signed-off-by: Marek Behún <kabel@kernel.org>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   board/CZ.NIC/turris_omnia/turris_omnia.c | 25 +++++++++++++++++++++++-
>   1 file changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c
> index f63640ad64..b2f0088e5e 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;
>   }
>   

Viele Grüße,
Stefan Roese
diff mbox series

Patch

diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c
index f63640ad64..b2f0088e5e 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;
 }