ADAC: Add support for ECDSA P-384
Change-Id: I1d62b36ff5cff4e07fce94a54b45f8ff5babd727
Signed-off-by: Mathias Brossard <mathias.brossard@arm.com>
diff --git a/psa_crypto/adac_crypto_psa_pk.c b/psa_crypto/adac_crypto_psa_pk.c
index b5dab4b..05b1c2a 100644
--- a/psa_crypto/adac_crypto_psa_pk.c
+++ b/psa_crypto/adac_crypto_psa_pk.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2024, Arm Limited. All rights reserved.
+ * Copyright (c) 2020-2025, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -201,6 +201,36 @@
#endif /* PSA_ADAC_EC_P256 */
+#ifdef PSA_ADAC_EC_P384
+
+static psa_status_t load_ecdsa_p384_public_key(uint8_t *key,
+ size_t key_size,
+ psa_key_handle_t *handle)
+{
+ psa_status_t ret;
+ ADAC_STATIC uint8_t pub_key[ECDSA_P384_PUBLIC_KEY_SIZE + 1] = {0x04};
+
+ if (ECDSA_P384_PUBLIC_KEY_SIZE == key_size) {
+
+ (void) memcpy(&(pub_key[1]), key, ECDSA_P384_PUBLIC_KEY_SIZE);
+ psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
+ psa_set_key_usage_flags(&attributes, PSA_KEY_USAGE_VERIFY_HASH);
+ psa_set_key_type(&attributes, PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1));
+ psa_set_key_algorithm(&attributes, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_384));
+ psa_set_key_lifetime(&attributes, PSA_KEY_LIFETIME_VOLATILE);
+ psa_set_key_bits(&attributes, 384);
+
+ ret = psa_import_key(&attributes, pub_key, sizeof(pub_key), handle);
+ } else {
+
+ ret = PSA_ERROR_INVALID_ARGUMENT;
+ }
+
+ return ret;
+}
+
+#endif /* PSA_ADAC_EC_P384 */
+
#ifdef PSA_ADAC_EC_P521
static psa_status_t load_ecdsa_p521_public_key(uint8_t *key,
@@ -242,6 +272,11 @@
PSA_ADAC_LOG_TRACE("psa-crypto", "Load EcdsaP256 Public-key\n");
ret = load_ecdsa_p256_public_key(key, key_size, handle);
#endif /* PSA_ADAC_EC_P256 */
+ } else if (key_type == ECDSA_P384_SHA384) {
+#ifdef PSA_ADAC_EC_P384
+ PSA_ADAC_LOG_TRACE("psa-crypto", "Load EcdsaP384 Public-key\n");
+ ret = load_ecdsa_p384_public_key(key, key_size, handle);
+#endif /* PSA_ADAC_EC_P384 */
} else if (key_type == ECDSA_P521_SHA512) {
#ifdef PSA_ADAC_EC_P521
PSA_ADAC_LOG_TRACE("psa-crypto", "Load EcdsaP521 Public-key\n");