diff --git a/tests/suites/test_suite_x509parse.data b/tests/suites/test_suite_x509parse.data index 459738a5c7..ebfc23f5a0 100644 --- a/tests/suites/test_suite_x509parse.data +++ b/tests/suites/test_suite_x509parse.data @@ -3439,3 +3439,52 @@ x509_crt_parse_authoritykeyid:"../framework/data_files/authorityKeyId_subjectKey X509 CRT parse Authority Key Id - Wrong Issuer sequence depends_on:PSA_WANT_ALG_MD5:MBEDTLS_RSA_C x509_crt_parse_authoritykeyid:"../framework/data_files/clusterfuzz-testcase-minimized-fuzz_x509crt-6666050834661376.crt.der":"":"":"":MBEDTLS_ERR_X509_INVALID_EXTENSIONS+MBEDTLS_ERR_ASN1_OUT_OF_DATA + +OID get numeric string - hardware module name +oid_get_numeric_string:"2B06010505070804":0:"1.3.6.1.5.5.7.8.4" + +OID get numeric string - multi-byte subidentifier +oid_get_numeric_string:"29903C":0:"1.1.2108" + +OID get numeric string - second component greater than 39 +oid_get_numeric_string:"81010000863A00":0:"2.49.0.0.826.0" + +OID get numeric string - multi-byte first subidentifier +oid_get_numeric_string:"8837":0:"2.999" + +OID get numeric string - second subidentifier not terminated +oid_get_numeric_string:"0081":MBEDTLS_ERR_ASN1_OUT_OF_DATA:"" + +OID get numeric string - empty oid buffer +oid_get_numeric_string:"":MBEDTLS_ERR_ASN1_OUT_OF_DATA:"" + +OID get numeric string - no final / all bytes have top bit set +oid_get_numeric_string:"818181":MBEDTLS_ERR_ASN1_OUT_OF_DATA:"" + +OID get numeric string - 0.39 +oid_get_numeric_string:"27":0:"0.39" + +OID get numeric string - 1.0 +oid_get_numeric_string:"28":0:"1.0" + +OID get numeric string - 1.39 +oid_get_numeric_string:"4f":0:"1.39" + +OID get numeric string - 2.0 +oid_get_numeric_string:"50":0:"2.0" + +OID get numeric string - 1 byte first subidentifier beyond 2.39 +oid_get_numeric_string:"7f":0:"2.47" + +# Encodes the number 0x0400000000 as a subidentifier which overflows 32-bits +OID get numeric string - 32-bit overflow +oid_get_numeric_string:"C080808000":MBEDTLS_ERR_ASN1_INVALID_DATA:"" + +OID get numeric string - 32-bit overflow, second subidentifier +oid_get_numeric_string:"2BC080808000":MBEDTLS_ERR_ASN1_INVALID_DATA:"" + +OID get numeric string - overlong encoding +oid_get_numeric_string:"8001":MBEDTLS_ERR_ASN1_INVALID_DATA:"" + +OID get numeric string - overlong encoding, second subidentifier +oid_get_numeric_string:"2B8001":MBEDTLS_ERR_ASN1_INVALID_DATA:"" diff --git a/tests/suites/test_suite_x509parse.function b/tests/suites/test_suite_x509parse.function index 9fc0e55dff..66a7c8df9b 100644 --- a/tests/suites/test_suite_x509parse.function +++ b/tests/suites/test_suite_x509parse.function @@ -10,6 +10,8 @@ #include "mbedtls/base64.h" #include "mbedtls/error.h" #include "mbedtls/pk.h" +#include "mbedtls/asn1.h" +#include "mbedtls/asn1write.h" #include "string.h" #if MBEDTLS_X509_MAX_INTERMEDIATE_CA > 19 @@ -1747,3 +1749,27 @@ exit: mbedtls_x509_crt_free(&crt); } /* END_CASE */ + +/* BEGIN_CASE depends_on:MBEDTLS_x509_USE_C */ +void oid_get_numeric_string(data_t *oid, int error_ret, char *result_str) +{ + char buf[256]; + mbedtls_asn1_buf input_oid = { 0, 0, NULL }; + int ret; + + input_oid.tag = MBEDTLS_ASN1_OID; + /* Test that an empty OID is not dereferenced */ + input_oid.p = oid->len ? oid->x : (void *) 1; + input_oid.len = oid->len; + + ret = mbedtls_oid_get_numeric_string(buf, sizeof(buf), &input_oid); + + if (error_ret == 0) { + TEST_EQUAL(ret, strlen(result_str)); + TEST_ASSERT(ret >= 3); + TEST_EQUAL(strcmp(buf, result_str), 0); + } else { + TEST_EQUAL(ret, error_ret); + } +} +/* END_CASE */ diff --git a/tf-psa-crypto/tests/suites/test_suite_oid.data b/tf-psa-crypto/tests/suites/test_suite_oid.data index 8919d42096..3521c97e84 100644 --- a/tf-psa-crypto/tests/suites/test_suite_oid.data +++ b/tf-psa-crypto/tests/suites/test_suite_oid.data @@ -105,55 +105,6 @@ oid_get_md_alg_id:"2b24030201":MBEDTLS_MD_RIPEMD160 OID hash id - invalid oid oid_get_md_alg_id:"2B864886f70d0204":-1 -OID get numeric string - hardware module name -oid_get_numeric_string:"2B06010505070804":0:"1.3.6.1.5.5.7.8.4" - -OID get numeric string - multi-byte subidentifier -oid_get_numeric_string:"29903C":0:"1.1.2108" - -OID get numeric string - second component greater than 39 -oid_get_numeric_string:"81010000863A00":0:"2.49.0.0.826.0" - -OID get numeric string - multi-byte first subidentifier -oid_get_numeric_string:"8837":0:"2.999" - -OID get numeric string - second subidentifier not terminated -oid_get_numeric_string:"0081":MBEDTLS_ERR_ASN1_OUT_OF_DATA:"" - -OID get numeric string - empty oid buffer -oid_get_numeric_string:"":MBEDTLS_ERR_ASN1_OUT_OF_DATA:"" - -OID get numeric string - no final / all bytes have top bit set -oid_get_numeric_string:"818181":MBEDTLS_ERR_ASN1_OUT_OF_DATA:"" - -OID get numeric string - 0.39 -oid_get_numeric_string:"27":0:"0.39" - -OID get numeric string - 1.0 -oid_get_numeric_string:"28":0:"1.0" - -OID get numeric string - 1.39 -oid_get_numeric_string:"4f":0:"1.39" - -OID get numeric string - 2.0 -oid_get_numeric_string:"50":0:"2.0" - -OID get numeric string - 1 byte first subidentifier beyond 2.39 -oid_get_numeric_string:"7f":0:"2.47" - -# Encodes the number 0x0400000000 as a subidentifier which overflows 32-bits -OID get numeric string - 32-bit overflow -oid_get_numeric_string:"C080808000":MBEDTLS_ERR_ASN1_INVALID_DATA:"" - -OID get numeric string - 32-bit overflow, second subidentifier -oid_get_numeric_string:"2BC080808000":MBEDTLS_ERR_ASN1_INVALID_DATA:"" - -OID get numeric string - overlong encoding -oid_get_numeric_string:"8001":MBEDTLS_ERR_ASN1_INVALID_DATA:"" - -OID get numeric string - overlong encoding, second subidentifier -oid_get_numeric_string:"2B8001":MBEDTLS_ERR_ASN1_INVALID_DATA:"" - OID from numeric string - hardware module name oid_from_numeric_string:"1.3.6.1.5.5.7.8.4":0:"2B06010505070804" diff --git a/tf-psa-crypto/tests/suites/test_suite_oid.function b/tf-psa-crypto/tests/suites/test_suite_oid.function index 337f843109..5cfa35b641 100644 --- a/tf-psa-crypto/tests/suites/test_suite_oid.function +++ b/tf-psa-crypto/tests/suites/test_suite_oid.function @@ -119,30 +119,6 @@ void mbedtls_oid_get_md_hmac(data_t *oid, int exp_md_id) } /* END_CASE */ -/* BEGIN_CASE */ -void oid_get_numeric_string(data_t *oid, int error_ret, char *result_str) -{ - char buf[256]; - mbedtls_asn1_buf input_oid = { 0, 0, NULL }; - int ret; - - input_oid.tag = MBEDTLS_ASN1_OID; - /* Test that an empty OID is not dereferenced */ - input_oid.p = oid->len ? oid->x : (void *) 1; - input_oid.len = oid->len; - - ret = mbedtls_oid_get_numeric_string(buf, sizeof(buf), &input_oid); - - if (error_ret == 0) { - TEST_EQUAL(ret, strlen(result_str)); - TEST_ASSERT(ret >= 3); - TEST_EQUAL(strcmp(buf, result_str), 0); - } else { - TEST_EQUAL(ret, error_ret); - } -} -/* END_CASE */ - /* BEGIN_CASE */ void oid_from_numeric_string(char *oid_str, int error_ret, data_t *exp_oid_buf)