diff --git a/src/suit_cose.c b/src/suit_cose.c index b44c385..7981036 100644 --- a/src/suit_cose.c +++ b/src/suit_cose.c @@ -49,33 +49,29 @@ cose_tag_key_t suit_judge_cose_tag_from_buf(const UsefulBufC *signed_cose) { #if defined(LIBCSUIT_PSA_CRYPTO_C) /* - Public function. See suit_cose.h + \brief Internal function calls MbedTLS functions to create public key. + + \param[in] nid EC network id. + \param[in] public_key Pointer of char array type of public key. + \param[in] public_key_len Length of the public key. + \param[out] cose_public_key Pointer and length of the resulting key. + + \return This returns SUIT_SUCCESS or SUIT_ERR_FAILED_TO_VERIFY. */ -suit_err_t suit_create_es256_public_key(const char *public_key, struct t_cose_key *cose_public_key) { +suit_err_t suit_create_es_public_key(const int nid, const char *public_key, const size_t public_key_len, struct t_cose_key *cose_public_key) { psa_key_attributes_t key_attributes = PSA_KEY_ATTRIBUTES_INIT; psa_key_handle_t key_handle = 0; psa_status_t result; - size_t public_key_len = 65; result = psa_crypto_init(); if(result != PSA_SUCCESS) - return( EXIT_FAILURE ); + return( SUIT_ERR_FAILED_TO_VERIFY ); psa_set_key_usage_flags( &key_attributes, PSA_KEY_USAGE_VERIFY_HASH | PSA_KEY_USAGE_EXPORT ); psa_set_key_algorithm( &key_attributes, PSA_ALG_ECDSA(PSA_ALG_SHA_256) ); - psa_set_key_type( &key_attributes, PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1) ); - - /* - psa_key_type_t key_type; - psa_algorithm_t key_alg; - key_type = PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_CURVE_SECP256R1); - key_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); - psa_set_key_usage_flags( &key_attributes, PSA_KEY_USAGE_VERIFY_HASH ); - psa_set_key_algorithm( &key_attributes, key_alg ); - psa_set_key_type( &key_attributes, key_type ); - */ + psa_set_key_type( &key_attributes, PSA_KEY_TYPE_ECC_PUBLIC_KEY(nid) ); result = psa_import_key(&key_attributes, (const unsigned char*) public_key, @@ -83,13 +79,20 @@ suit_err_t suit_create_es256_public_key(const char *public_key, struct t_cose_ke &key_handle); if (result != PSA_SUCCESS) - return( EXIT_FAILURE ); + return( SUIT_ERR_FAILED_TO_VERIFY ); cose_public_key->k.key_handle = key_handle; cose_public_key->crypto_lib = T_COSE_CRYPTO_LIB_PSA; return( SUIT_SUCCESS ); } + +/* + Public function. See suit_cose.h + */ +suit_err_t suit_create_es256_public_key(const char *public_key, struct t_cose_key *cose_public_key) { + return suit_create_es_public_key(PSA_ECC_FAMILY_SECP_R1, public_key, 65, cose_public_key); +} #else /* LIBCSUIT_PSA_CRYPTO_C */ /*