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");