mirror of
https://github.com/Mbed-TLS/mbedtls-framework.git
synced 2026-07-30 15:57:46 +00:00
tests: src: move PK helpers out of tf-psa-crypto to this repo
Signed-off-by: Valerio Setti <[email protected]>
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Helper functions for PK
|
||||
*/
|
||||
/*
|
||||
* Copyright The Mbed TLS Contributors
|
||||
* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#ifndef PK_HELPERS_H
|
||||
#define PK_HELPERS_H
|
||||
|
||||
#if defined(MBEDTLS_PK_C)
|
||||
|
||||
#include <psa/crypto.h>
|
||||
#include <mbedtls/pk.h>
|
||||
|
||||
typedef enum {
|
||||
TEST_PK_WRAP_PSA,
|
||||
TEST_PK_COPY_FROM_PSA,
|
||||
TEST_PK_COPY_PUBLIC_FROM_PSA,
|
||||
} pk_context_populate_method_t;
|
||||
|
||||
int pk_helpers_get_predefined_key_data(int is_ec, int group_id_or_keybits,
|
||||
const unsigned char **key, size_t *key_len,
|
||||
const unsigned char **pub_key, size_t *pub_key_len);
|
||||
|
||||
mbedtls_svc_key_id_t pk_helpers_make_psa_key_from_predefined(psa_key_type_t key_type,
|
||||
psa_key_bits_t key_bits,
|
||||
psa_algorithm_t alg,
|
||||
psa_algorithm_t alg2,
|
||||
psa_key_usage_t usage_flags);
|
||||
|
||||
void pk_helpers_populate_context(mbedtls_pk_context *pk, mbedtls_svc_key_id_t key_id,
|
||||
pk_context_populate_method_t method);
|
||||
|
||||
#endif /* MBEDTLS_PK_C */
|
||||
|
||||
#endif /* PK_HELPERS_H */
|
||||
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* Helper functions for PK
|
||||
*/
|
||||
/*
|
||||
* Copyright The Mbed TLS Contributors
|
||||
* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <mbedtls/pk.h>
|
||||
#include <test/macros.h>
|
||||
#include <test/helpers.h>
|
||||
#include <test/pk_helpers.h>
|
||||
#include <test/psa_helpers.h>
|
||||
#include <test/test_keys.h>
|
||||
#include "psa_util_internal.h"
|
||||
|
||||
/* Functions like mbedtls_pk_wrap_psa() are only available in tf-psa-crypto and
|
||||
* not in 3.6 LTS branch, so we need a guard for this. */
|
||||
#if !defined(MBEDTLS_VERSION_MAJOR) || MBEDTLS_VERSION_MAJOR >= 4
|
||||
|
||||
#if defined(MBEDTLS_PK_C)
|
||||
|
||||
int pk_helpers_get_predefined_key_data(int is_ec, int group_id_or_keybits,
|
||||
const unsigned char **key, size_t *key_len,
|
||||
const unsigned char **pub_key, size_t *pub_key_len)
|
||||
{
|
||||
size_t i;
|
||||
struct predefined_key_element *predefined_key = NULL;
|
||||
|
||||
for (i = 0; i < ARRAY_LENGTH(predefined_keys); i++) {
|
||||
if (is_ec) {
|
||||
if (group_id_or_keybits == predefined_keys[i].group_id) {
|
||||
predefined_key = &predefined_keys[i];
|
||||
}
|
||||
} else if (group_id_or_keybits == predefined_keys[i].keybits) {
|
||||
predefined_key = &predefined_keys[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (predefined_key != NULL) {
|
||||
*key = predefined_key->priv_key;
|
||||
*key_len = predefined_key->priv_key_len;
|
||||
if (pub_key != NULL) {
|
||||
*pub_key = predefined_key->pub_key;
|
||||
*pub_key_len = predefined_key->pub_key_len;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
TEST_FAIL("Unsupported key");
|
||||
/* "exit" label is to make the compiler happy. */
|
||||
exit:
|
||||
return MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE;
|
||||
}
|
||||
|
||||
mbedtls_svc_key_id_t pk_helpers_make_psa_key_from_predefined(psa_key_type_t key_type,
|
||||
psa_key_bits_t key_bits,
|
||||
psa_algorithm_t alg,
|
||||
psa_algorithm_t alg2,
|
||||
psa_key_usage_t usage_flags)
|
||||
{
|
||||
mbedtls_svc_key_id_t key_id = MBEDTLS_SVC_KEY_ID_INIT;
|
||||
psa_key_attributes_t attr = PSA_KEY_ATTRIBUTES_INIT;
|
||||
const uint8_t *priv_key = NULL;
|
||||
size_t priv_key_len = 0;
|
||||
const uint8_t *pub_key = NULL;
|
||||
size_t pub_key_len = 0;
|
||||
int ret;
|
||||
|
||||
#if defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY)
|
||||
if (PSA_KEY_TYPE_IS_RSA(key_type)) {
|
||||
ret = pk_helpers_get_predefined_key_data(0, key_bits, &priv_key, &priv_key_len,
|
||||
&pub_key, &pub_key_len);
|
||||
TEST_EQUAL(ret, 0);
|
||||
} else
|
||||
#endif /* PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY */
|
||||
#if defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY)
|
||||
if (PSA_KEY_TYPE_IS_ECC(key_type)) {
|
||||
psa_ecc_family_t ec_family = PSA_KEY_TYPE_ECC_GET_FAMILY(key_type);
|
||||
mbedtls_ecp_group_id ecp_group = mbedtls_ecc_group_from_psa(ec_family, key_bits);
|
||||
ret = pk_helpers_get_predefined_key_data(1, ecp_group, &priv_key, &priv_key_len,
|
||||
&pub_key, &pub_key_len);
|
||||
TEST_EQUAL(ret, 0);
|
||||
} else
|
||||
#endif /* PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY */
|
||||
{
|
||||
TEST_FAIL("Unsupported key");
|
||||
}
|
||||
|
||||
psa_set_key_type(&attr, key_type);
|
||||
psa_set_key_usage_flags(&attr, usage_flags);
|
||||
psa_set_key_algorithm(&attr, alg);
|
||||
psa_set_key_enrollment_algorithm(&attr, alg2);
|
||||
PSA_ASSERT(psa_import_key(&attr, priv_key, priv_key_len, &key_id));
|
||||
|
||||
exit:
|
||||
return key_id;
|
||||
}
|
||||
|
||||
void pk_helpers_populate_context(mbedtls_pk_context *pk, mbedtls_svc_key_id_t key_id,
|
||||
pk_context_populate_method_t method)
|
||||
{
|
||||
switch (method) {
|
||||
case TEST_PK_WRAP_PSA:
|
||||
TEST_EQUAL(mbedtls_pk_wrap_psa(pk, key_id), 0);
|
||||
break;
|
||||
case TEST_PK_COPY_FROM_PSA:
|
||||
TEST_EQUAL(mbedtls_pk_copy_from_psa(key_id, pk), 0);
|
||||
break;
|
||||
case TEST_PK_COPY_PUBLIC_FROM_PSA:
|
||||
TEST_EQUAL(mbedtls_pk_copy_public_from_psa(key_id, pk), 0);
|
||||
break;
|
||||
default:
|
||||
TEST_FAIL("Unknown method");
|
||||
}
|
||||
|
||||
exit:; /* Needed to make compiler happy */
|
||||
}
|
||||
|
||||
#endif /* MBEDTLS_PK_C */
|
||||
|
||||
#endif /* !MBEDTLS_VERSION_MAJOR || MBEDTLS_VERSION_MAJOR >= 4 */
|
||||
Reference in New Issue
Block a user