@@ -778,44 +778,65 @@ exit:
778
778
void pk_psa_sign( )
779
779
{
780
780
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;
784
786
785
787
/*
786
788
* This tests making signatures with a wrapped PSA key:
787
- * - generate a fresh PSA key
789
+ * - generate a fresh ECP legacy PK context
788
790
* - wrap it in a PK context and make a signature this way
789
791
* - extract the public key
790
792
* - parse it to a PK context and verify the signature this way
791
793
*/
792
794
795
+ /* Create legacy EC public/private key in PK context. */
793
796
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 );
794
815
795
816
memset( hash, 0x2a, sizeof hash );
796
817
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 );
803
818
804
819
TEST_ASSERT( mbedtls_pk_sign( &pk, MBEDTLS_MD_SHA256,
805
820
hash, sizeof hash, sig, &sig_len,
806
821
NULL, NULL ) == 0 );
807
822
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;
813
830
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 );
817
833
834
+ mbedtls_pk_free( &pk );
835
+ TEST_ASSERT( PSA_SUCCESS == psa_destroy_key( handle ) );
818
836
837
+ mbedtls_pk_init( &pk );
838
+ TEST_ASSERT( mbedtls_pk_parse_public_key( &pk, pkey_legacy_start,
839
+ klen_legacy ) == 0 );
819
840
TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_SHA256,
820
841
hash, sizeof hash, sig, sig_len ) == 0 );
821
842
0 commit comments