Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 19 additions & 16 deletions src/suit_cose.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,47 +49,50 @@ 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,
public_key_len,
&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 */

/*
Expand Down