mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2026-09-30 14:07:23 +00:00
tests: add EC public key parser coverage
Signed-off-by: Yi Wu <[email protected]>
This commit is contained in:
@@ -2002,6 +2002,115 @@ pk_parse_public_keyfile_rsa:"../framework/data_files/rsa_pkcs1_2048_public.pem":
|
||||
Parse Public RSA Key #4 (PKCS#1 wrapped, DER)
|
||||
pk_parse_public_keyfile_rsa:"../framework/data_files/rsa_pkcs1_2048_public.der":0
|
||||
|
||||
Parse Public EC Key: secp256r1, nominal, DER (RFC 5480)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"3059301306072a8648ce3d020106082a8648ce3d030107034200047772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b572590cdaf8f769361bcf34acfc11e5e074e8426bdde04be6e653945449617de45":0:0
|
||||
|
||||
Parse Public EC Key: secp256r1, compressed (supported)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PK_PARSE_EC_COMPRESSED
|
||||
pk_parse_public_key_ec:"3039301306072a8648ce3d020106082a8648ce3d030107032200037772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b57":0:0
|
||||
|
||||
Parse Public EC Key: secp256r1, compressed (not supported)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:!MBEDTLS_PK_PARSE_EC_COMPRESSED
|
||||
pk_parse_public_key_ec:"3039301306072a8648ce3d020106082a8648ce3d030107032200037772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b57":MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE:MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE
|
||||
|
||||
# Odd length of (x,y) coordinate pair
|
||||
Parse Public EC Key: secp256r1, truncated BIT STRING (-1, uncompressed)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"3058301306072a8648ce3d020106082a8648ce3d030107034100047772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b572590cdaf8f769361bcf34acfc11e5e074e8426bdde04be6e653945449617de":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
# Even length of (x,y) coordinate pair
|
||||
Parse Public EC Key: secp256r1, truncated BIT STRING (-2, uncompressed)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_RSA_C
|
||||
pk_parse_public_key_ec:"3057301306072a8648ce3d020106082a8648ce3d030107034000047772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b572590cdaf8f769361bcf34acfc11e5e074e8426bdde04be6e653945449617de":MBEDTLS_ERR_RSA_BAD_INPUT_DATA:MBEDTLS_ERR_RSA_BAD_INPUT_DATA
|
||||
|
||||
# Single coordinate too short
|
||||
Parse Public EC Key: secp256r1, truncated BIT STRING (-1, compressed)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PK_PARSE_EC_COMPRESSED
|
||||
pk_parse_public_key_ec:"3038301306072a8648ce3d020106082a8648ce3d030107032100037772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b":MBEDTLS_ERR_ECP_BAD_INPUT_DATA:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: secp256r1, 1-byte BIT STRING (00, compressed supported)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PK_PARSE_EC_COMPRESSED
|
||||
pk_parse_public_key_ec:"3019301306072a8648ce3d020106082a8648ce3d03010703020000":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_INVALID_KEY
|
||||
|
||||
Parse Public EC Key: secp256r1, 1-byte BIT STRING (01, compressed supported)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PK_PARSE_EC_COMPRESSED
|
||||
pk_parse_public_key_ec:"3019301306072a8648ce3d020106082a8648ce3d03010703020001":MBEDTLS_ERR_ECP_BAD_INPUT_DATA:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: secp256r1, 1-byte BIT STRING (02, compressed supported)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PK_PARSE_EC_COMPRESSED
|
||||
pk_parse_public_key_ec:"3019301306072a8648ce3d020106082a8648ce3d03010703020002":MBEDTLS_ERR_ECP_BAD_INPUT_DATA:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: secp256r1, 1-byte BIT STRING (03, compressed supported)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PK_PARSE_EC_COMPRESSED
|
||||
pk_parse_public_key_ec:"3019301306072a8648ce3d020106082a8648ce3d03010703020003":MBEDTLS_ERR_ECP_BAD_INPUT_DATA:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: secp256r1, 1-byte BIT STRING (04)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"3019301306072a8648ce3d020106082a8648ce3d03010703020004":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: secp256r1, 1-byte BIT STRING (00, unsupported)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:!MBEDTLS_PK_PARSE_EC_COMPRESSED
|
||||
pk_parse_public_key_ec:"3019301306072a8648ce3d020106082a8648ce3d03010703020000":MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE:MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE
|
||||
|
||||
Parse Public EC Key: secp256r1, empty BIT STRING
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"3018301306072a8648ce3d020106082a8648ce3d030107030100":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
# Odd length of (x,y) coordinate pair
|
||||
Parse Public EC Key: secp256r1, overly long BIT STRING (+1, uncompressed)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"305a301306072a8648ce3d020106082a8648ce3d030107034300047772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b572590cdaf8f769361bcf34acfc11e5e074e8426bdde04be6e653945449617de4543":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
# Even length of (x,y) coordinate pair
|
||||
Parse Public EC Key: secp256r1, overly long BIT STRING (+2, uncompressed)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"305b301306072a8648ce3d020106082a8648ce3d030107034400047772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b572590cdaf8f769361bcf34acfc11e5e074e8426bdde04be6e653945449617de454343":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: secp256r1, extremely long BIT STRING (uncompressed)
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"3081da301306072a8648ce3d020106082a8648ce3d0301070381c20004787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: secp256r1, uncompressed, X out of range
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2590cdaf8f769361bcf34acfc11e5e074e8426bdde04be6e653945449617de45":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_INVALID_KEY
|
||||
|
||||
Parse Public EC Key: secp256r1, uncompressed, Y out of range
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"3059301306072a8648ce3d020106082a8648ce3d030107034200047772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_INVALID_KEY
|
||||
|
||||
Parse Public EC Key: secp256r1, uncompressed, not on curve
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256
|
||||
pk_parse_public_key_ec:"3059301306072a8648ce3d020106082a8648ce3d030107034200047772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b572590cdaf8f769361bcf34acfc11e5e074e8426bdde04be6e653945449617de46":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_INVALID_KEY
|
||||
|
||||
Parse Public EC Key: secp256r1, compressed, X out of range
|
||||
depends_on:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PK_PARSE_EC_COMPRESSED
|
||||
pk_parse_public_key_ec:"3039301306072a8648ce3d020106082a8648ce3d03010703220003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_INVALID_KEY
|
||||
|
||||
Parse Public EC Key: X25519, nominal, DER (RFC 8410)
|
||||
depends_on:PSA_WANT_ECC_MONTGOMERY_255
|
||||
pk_parse_public_key_ec:"302a300506032b656e0321009bc3b0e93d8233fe6a8ba6138948cc12a91362d5c2ed81584db05ab5419c9d11":0:0
|
||||
|
||||
Parse Public EC Key: X25519, truncated BIT STRING (-1)
|
||||
depends_on:PSA_WANT_ECC_MONTGOMERY_255
|
||||
pk_parse_public_key_ec:"3029300506032b656e0320009bc3b0e93d8233fe6a8ba6138948cc12a91362d5c2ed81584db05ab5419c9d":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: X25519, 1-byte BIT STRING
|
||||
depends_on:PSA_WANT_ECC_MONTGOMERY_255
|
||||
pk_parse_public_key_ec:"300b300506032b656e0302009b":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: X25519, empty BIT STRING
|
||||
depends_on:PSA_WANT_ECC_MONTGOMERY_255
|
||||
pk_parse_public_key_ec:"300a300506032b656e030100":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: X25519, overly long BIT STRING (+1)
|
||||
depends_on:PSA_WANT_ECC_MONTGOMERY_255
|
||||
pk_parse_public_key_ec:"302b300506032b656e0322009bc3b0e93d8233fe6a8ba6138948cc12a91362d5c2ed81584db05ab5419c9d1143":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key: X25519, extremely long BIT STRING
|
||||
depends_on:PSA_WANT_ECC_MONTGOMERY_255
|
||||
pk_parse_public_key_ec:"3081cc300506032b656e0381c20065656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565":MBEDTLS_ERR_PK_INVALID_PUBKEY:MBEDTLS_ERR_ECP_BAD_INPUT_DATA
|
||||
|
||||
Parse Public EC Key #1 (RFC 5480, DER)
|
||||
depends_on:MBEDTLS_ECP_HAVE_SECP192R1
|
||||
pk_parse_public_keyfile_ec:"../framework/data_files/ec_pub.der":0
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "mbedtls/oid.h"
|
||||
#include "mbedtls/ecp.h"
|
||||
#include "mbedtls/psa_util.h"
|
||||
#include "mbedtls/rsa.h"
|
||||
#include "pk_internal.h"
|
||||
|
||||
#if defined(MBEDTLS_PSA_CRYPTO_C)
|
||||
@@ -14,7 +15,7 @@
|
||||
#define HAVE_mbedtls_pk_parse_key_pkcs8_encrypted_der
|
||||
#endif
|
||||
|
||||
#if defined(MBEDTLS_PSA_CRYPTO_C) && defined(MBEDTLS_FS_IO)
|
||||
#if defined(MBEDTLS_PSA_CRYPTO_C)
|
||||
static int test_psa_bridge(const mbedtls_pk_context *ctx,
|
||||
psa_key_usage_t usage_flag)
|
||||
{
|
||||
@@ -101,7 +102,7 @@ static int pk_can_ecdsa(const mbedtls_pk_context *ctx)
|
||||
#endif
|
||||
}
|
||||
#endif /* MBEDTLS_PK_HAVE_ECC_KEYS */
|
||||
#endif /* MBEDTLS_PSA_CRYPTO_C && && MBEDTLS_FS_IO */
|
||||
#endif /* MBEDTLS_PSA_CRYPTO_C */
|
||||
|
||||
/* END_HEADER */
|
||||
|
||||
@@ -194,6 +195,50 @@ exit:
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE depends_on:PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY */
|
||||
void pk_parse_public_key_ec(data_t *key_data,
|
||||
int result_psa,
|
||||
int result_legacy)
|
||||
{
|
||||
mbedtls_pk_context ctx;
|
||||
mbedtls_pk_init(&ctx);
|
||||
int res;
|
||||
#if defined(MBEDTLS_PK_USE_PSA_EC_DATA)
|
||||
int result = result_psa;
|
||||
(void) result_legacy;
|
||||
#else
|
||||
int result = result_legacy;
|
||||
(void) result_psa;
|
||||
#endif
|
||||
unsigned char *key_copy = NULL;
|
||||
|
||||
MD_OR_USE_PSA_INIT();
|
||||
TEST_CALLOC(key_copy, key_data->len);
|
||||
memcpy(key_copy, key_data->x, key_data->len);
|
||||
|
||||
res = mbedtls_pk_parse_public_key(&ctx, key_copy, key_data->len);
|
||||
|
||||
TEST_EQUAL(res, result);
|
||||
|
||||
if (res == 0) {
|
||||
TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_ECKEY));
|
||||
|
||||
#if defined(MBEDTLS_PSA_CRYPTO_C)
|
||||
PSA_INIT();
|
||||
if (pk_can_ecdsa(&ctx)) {
|
||||
TEST_ASSERT(test_psa_bridge(&ctx, PSA_KEY_USAGE_VERIFY_HASH));
|
||||
TEST_ASSERT(test_psa_bridge(&ctx, PSA_KEY_USAGE_VERIFY_MESSAGE));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
exit:
|
||||
mbedtls_pk_free(&ctx);
|
||||
PSA_DONE();
|
||||
mbedtls_free(key_copy);
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_PK_HAVE_ECC_KEYS */
|
||||
void pk_parse_public_keyfile_ec(char *key_file, int result)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user