Add import_key entry point to p256-m driver
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
This commit is contained in:
parent
bac6d9a703
commit
5424cf2e40
2 changed files with 78 additions and 0 deletions
45
3rdparty/p256-m/p256-m_driver_entrypoints.c
vendored
45
3rdparty/p256-m/p256-m_driver_entrypoints.c
vendored
|
@ -24,6 +24,7 @@
|
||||||
#include "psa/crypto.h"
|
#include "psa/crypto.h"
|
||||||
#include "psa_crypto_driver_wrappers.h"
|
#include "psa_crypto_driver_wrappers.h"
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#if defined(MBEDTLS_P256M_EXAMPLE_DRIVER_ENABLED)
|
#if defined(MBEDTLS_P256M_EXAMPLE_DRIVER_ENABLED)
|
||||||
|
|
||||||
|
@ -59,6 +60,50 @@ static psa_status_t p256_to_psa_error(int ret)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
psa_status_t p256_transparent_import_key(const psa_key_attributes_t *attributes,
|
||||||
|
const uint8_t *data,
|
||||||
|
size_t data_length,
|
||||||
|
uint8_t *key_buffer,
|
||||||
|
size_t key_buffer_size,
|
||||||
|
size_t *key_buffer_length,
|
||||||
|
size_t *bits)
|
||||||
|
{
|
||||||
|
/* Check the key size */
|
||||||
|
if (*bits != 0 && *bits != 256) {
|
||||||
|
return PSA_ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate the key (and its type and size) */
|
||||||
|
psa_key_type_t type = psa_get_key_type(attributes);
|
||||||
|
if (type == PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1)) {
|
||||||
|
if (data_length != 65) {
|
||||||
|
return *bits == 0 ? PSA_ERROR_NOT_SUPPORTED : PSA_ERROR_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
if (p256_validate_pubkey(data + 1) != P256_SUCCESS) {
|
||||||
|
return PSA_ERROR_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
} else if (type == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)) {
|
||||||
|
if (data_length != 32) {
|
||||||
|
return *bits == 0 ? PSA_ERROR_NOT_SUPPORTED : PSA_ERROR_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
if (p256_validate_privkey(data) != P256_SUCCESS) {
|
||||||
|
return PSA_ERROR_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return PSA_ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
*bits = 256;
|
||||||
|
|
||||||
|
/* We only support the export format for input, so just copy. */
|
||||||
|
if (key_buffer_size < data_length) {
|
||||||
|
return PSA_ERROR_BUFFER_TOO_SMALL;
|
||||||
|
}
|
||||||
|
memcpy(key_buffer, data, data_length);
|
||||||
|
*key_buffer_length = data_length;
|
||||||
|
|
||||||
|
return PSA_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
psa_status_t p256_transparent_generate_key(
|
psa_status_t p256_transparent_generate_key(
|
||||||
const psa_key_attributes_t *attributes,
|
const psa_key_attributes_t *attributes,
|
||||||
uint8_t *key_buffer,
|
uint8_t *key_buffer,
|
||||||
|
|
33
3rdparty/p256-m/p256-m_driver_entrypoints.h
vendored
33
3rdparty/p256-m/p256-m_driver_entrypoints.h
vendored
|
@ -29,6 +29,39 @@
|
||||||
|
|
||||||
#include "psa/crypto_types.h"
|
#include "psa/crypto_types.h"
|
||||||
|
|
||||||
|
/** Import SECP256R1 key.
|
||||||
|
*
|
||||||
|
* \param[in] attributes The attributes of the key to use for the
|
||||||
|
* operation.
|
||||||
|
* \param[in] data The raw key material. For private keys
|
||||||
|
* this must be a big-endian integer of 32
|
||||||
|
* bytes; for public key this must be an
|
||||||
|
* uncompressed ECPoint (65 bytes).
|
||||||
|
* \param[in] data_length The size of the raw key material.
|
||||||
|
* \param[out] key_buffer The buffer to contain the key data in
|
||||||
|
* output format upon successful return.
|
||||||
|
* \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes.
|
||||||
|
* \param[out] key_buffer_length The length of the data written in \p
|
||||||
|
* key_buffer in bytes.
|
||||||
|
* \param[out] bits The bitsize of the key.
|
||||||
|
*
|
||||||
|
* \retval #PSA_SUCCESS
|
||||||
|
* Success. Keypair generated and stored in buffer.
|
||||||
|
* \retval #PSA_ERROR_NOT_SUPPORTED
|
||||||
|
* The input is not supported by this driver (not SECP256R1).
|
||||||
|
* \retval #PSA_ERROR_INVALID_ARGUMENT
|
||||||
|
* The input is invalid.
|
||||||
|
* \retval #PSA_ERROR_BUFFER_TOO_SMALL
|
||||||
|
* \p key_buffer_size is too small.
|
||||||
|
*/
|
||||||
|
psa_status_t p256_transparent_import_key(const psa_key_attributes_t *attributes,
|
||||||
|
const uint8_t *data,
|
||||||
|
size_t data_length,
|
||||||
|
uint8_t *key_buffer,
|
||||||
|
size_t key_buffer_size,
|
||||||
|
size_t *key_buffer_length,
|
||||||
|
size_t *bits);
|
||||||
|
|
||||||
/** Generate SECP256R1 ECC Key Pair.
|
/** Generate SECP256R1 ECC Key Pair.
|
||||||
* Interface function which calls the p256-m key generation function and
|
* Interface function which calls the p256-m key generation function and
|
||||||
* places it in the key buffer provided by the caller (mbed TLS) in the
|
* places it in the key buffer provided by the caller (mbed TLS) in the
|
||||||
|
|
Loading…
Reference in a new issue