Skip to content

Commit 00114d7

Browse files
author
Hanno Becker
committed
Adapt test in test_suite_pk to work with new PSA public key format
1 parent 9acfd73 commit 00114d7

File tree

1 file changed

+39
-18
lines changed

1 file changed

+39
-18
lines changed

tests/suites/test_suite_pk.function

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -778,44 +778,65 @@ exit:
778778
void pk_psa_sign( )
779779
{
780780
mbedtls_pk_context pk;
781-
psa_key_handle_t key;
782-
unsigned char hash[50], sig[100], pkey[100];
783-
size_t sig_len, klen = 0;
781+
unsigned char hash[50], sig[100], pkey_legacy[100], pkey_psa[100];
782+
unsigned char *pkey_legacy_start, *pkey_psa_start;
783+
size_t sig_len, klen_legacy, klen_psa;
784+
int ret;
785+
psa_key_handle_t handle;
784786

785787
/*
786788
* This tests making signatures with a wrapped PSA key:
787-
* - generate a fresh PSA key
789+
* - generate a fresh ECP legacy PK context
788790
* - wrap it in a PK context and make a signature this way
789791
* - extract the public key
790792
* - parse it to a PK context and verify the signature this way
791793
*/
792794

795+
/* Create legacy EC public/private key in PK context. */
793796
mbedtls_pk_init( &pk );
797+
TEST_ASSERT( mbedtls_pk_setup( &pk,
798+
mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == 0 );
799+
TEST_ASSERT( mbedtls_ecp_gen_key( MBEDTLS_ECP_DP_SECP256R1,
800+
(mbedtls_ecp_keypair*) pk.pk_ctx,
801+
rnd_std_rand, NULL ) == 0 );
802+
803+
/* Export underlying public key for re-importing in a legacy context. */
804+
ret = mbedtls_pk_write_pubkey_der( &pk, pkey_legacy,
805+
sizeof( pkey_legacy ) );
806+
TEST_ASSERT( ret >= 0 );
807+
klen_legacy = (size_t) ret;
808+
/* mbedtls_pk_write_pubkey_der() writes backwards in the data buffer. */
809+
pkey_legacy_start = pkey_legacy + sizeof( pkey_legacy ) - klen_legacy;
810+
811+
/* Turn PK context into an opaque one. */
812+
TEST_ASSERT( psa_allocate_key( &handle ) == PSA_SUCCESS );
813+
TEST_ASSERT( mbedtls_pk_wrap_as_opaque( &pk, &handle,
814+
PSA_ALG_SHA_256 ) == 0 );
794815

795816
memset( hash, 0x2a, sizeof hash );
796817
memset( sig, 0, sizeof sig );
797-
memset( pkey, 0, sizeof pkey );
798-
799-
key = pk_psa_genkey();
800-
TEST_ASSERT( key != 0 );
801-
802-
TEST_ASSERT( mbedtls_pk_setup_opaque( &pk, key ) == 0 );
803818

804819
TEST_ASSERT( mbedtls_pk_sign( &pk, MBEDTLS_MD_SHA256,
805820
hash, sizeof hash, sig, &sig_len,
806821
NULL, NULL ) == 0 );
807822

808-
mbedtls_pk_free( &pk );
809-
810-
TEST_ASSERT( PSA_SUCCESS == psa_export_public_key(
811-
key, pkey, sizeof( pkey ), &klen ) );
812-
TEST_ASSERT( PSA_SUCCESS == psa_destroy_key( key ) );
823+
/* Export underlying public key for re-importing in a psa context. */
824+
ret = mbedtls_pk_write_pubkey_der( &pk, pkey_psa,
825+
sizeof( pkey_psa ) );
826+
TEST_ASSERT( ret >= 0 );
827+
klen_psa = (size_t) ret;
828+
/* mbedtls_pk_write_pubkey_der() writes backwards in the data buffer. */
829+
pkey_psa_start = pkey_psa + sizeof( pkey_psa ) - klen_psa;
813830

814-
mbedtls_pk_init( &pk );
815-
816-
TEST_ASSERT( mbedtls_pk_parse_public_key( &pk, pkey, klen ) == 0 );
831+
TEST_ASSERT( klen_psa == klen_legacy );
832+
TEST_ASSERT( memcmp( pkey_psa_start, pkey_legacy_start, klen_psa ) == 0 );
817833

834+
mbedtls_pk_free( &pk );
835+
TEST_ASSERT( PSA_SUCCESS == psa_destroy_key( handle ) );
818836

837+
mbedtls_pk_init( &pk );
838+
TEST_ASSERT( mbedtls_pk_parse_public_key( &pk, pkey_legacy_start,
839+
klen_legacy ) == 0 );
819840
TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_SHA256,
820841
hash, sizeof hash, sig, sig_len ) == 0 );
821842

0 commit comments

Comments
 (0)