1a8e1175bSopenharmony_ci/* BEGIN_HEADER */ 2a8e1175bSopenharmony_ci#include "mbedtls/oid.h" 3a8e1175bSopenharmony_ci#include "mbedtls/asn1.h" 4a8e1175bSopenharmony_ci#include "mbedtls/asn1write.h" 5a8e1175bSopenharmony_ci#include "string.h" 6a8e1175bSopenharmony_ci/* END_HEADER */ 7a8e1175bSopenharmony_ci 8a8e1175bSopenharmony_ci/* BEGIN_DEPENDENCIES 9a8e1175bSopenharmony_ci * depends_on:MBEDTLS_OID_C:!MBEDTLS_X509_REMOVE_INFO 10a8e1175bSopenharmony_ci * END_DEPENDENCIES 11a8e1175bSopenharmony_ci */ 12a8e1175bSopenharmony_ci 13a8e1175bSopenharmony_ci/* BEGIN_CASE */ 14a8e1175bSopenharmony_civoid oid_get_certificate_policies(data_t *oid, char *result_str) 15a8e1175bSopenharmony_ci{ 16a8e1175bSopenharmony_ci mbedtls_asn1_buf asn1_buf = { 0, 0, NULL }; 17a8e1175bSopenharmony_ci int ret; 18a8e1175bSopenharmony_ci const char *desc; 19a8e1175bSopenharmony_ci 20a8e1175bSopenharmony_ci asn1_buf.tag = MBEDTLS_ASN1_OID; 21a8e1175bSopenharmony_ci asn1_buf.p = oid->x; 22a8e1175bSopenharmony_ci asn1_buf.len = oid->len; 23a8e1175bSopenharmony_ci 24a8e1175bSopenharmony_ci ret = mbedtls_oid_get_certificate_policies(&asn1_buf, &desc); 25a8e1175bSopenharmony_ci if (strlen(result_str) == 0) { 26a8e1175bSopenharmony_ci TEST_ASSERT(ret == MBEDTLS_ERR_OID_NOT_FOUND); 27a8e1175bSopenharmony_ci } else { 28a8e1175bSopenharmony_ci TEST_ASSERT(ret == 0); 29a8e1175bSopenharmony_ci TEST_ASSERT(strcmp((char *) desc, result_str) == 0); 30a8e1175bSopenharmony_ci } 31a8e1175bSopenharmony_ci} 32a8e1175bSopenharmony_ci/* END_CASE */ 33a8e1175bSopenharmony_ci 34a8e1175bSopenharmony_ci/* BEGIN_CASE */ 35a8e1175bSopenharmony_civoid oid_get_extended_key_usage(data_t *oid, char *result_str) 36a8e1175bSopenharmony_ci{ 37a8e1175bSopenharmony_ci mbedtls_asn1_buf asn1_buf = { 0, 0, NULL }; 38a8e1175bSopenharmony_ci int ret; 39a8e1175bSopenharmony_ci const char *desc; 40a8e1175bSopenharmony_ci 41a8e1175bSopenharmony_ci asn1_buf.tag = MBEDTLS_ASN1_OID; 42a8e1175bSopenharmony_ci asn1_buf.p = oid->x; 43a8e1175bSopenharmony_ci asn1_buf.len = oid->len; 44a8e1175bSopenharmony_ci 45a8e1175bSopenharmony_ci ret = mbedtls_oid_get_extended_key_usage(&asn1_buf, &desc); 46a8e1175bSopenharmony_ci if (strlen(result_str) == 0) { 47a8e1175bSopenharmony_ci TEST_ASSERT(ret == MBEDTLS_ERR_OID_NOT_FOUND); 48a8e1175bSopenharmony_ci } else { 49a8e1175bSopenharmony_ci TEST_ASSERT(ret == 0); 50a8e1175bSopenharmony_ci TEST_ASSERT(strcmp((char *) desc, result_str) == 0); 51a8e1175bSopenharmony_ci } 52a8e1175bSopenharmony_ci} 53a8e1175bSopenharmony_ci/* END_CASE */ 54a8e1175bSopenharmony_ci 55a8e1175bSopenharmony_ci/* BEGIN_CASE */ 56a8e1175bSopenharmony_civoid oid_get_x509_extension(data_t *oid, int exp_type) 57a8e1175bSopenharmony_ci{ 58a8e1175bSopenharmony_ci mbedtls_asn1_buf ext_oid = { 0, 0, NULL }; 59a8e1175bSopenharmony_ci int ret; 60a8e1175bSopenharmony_ci int ext_type; 61a8e1175bSopenharmony_ci 62a8e1175bSopenharmony_ci ext_oid.tag = MBEDTLS_ASN1_OID; 63a8e1175bSopenharmony_ci ext_oid.p = oid->x; 64a8e1175bSopenharmony_ci ext_oid.len = oid->len; 65a8e1175bSopenharmony_ci 66a8e1175bSopenharmony_ci ret = mbedtls_oid_get_x509_ext_type(&ext_oid, &ext_type); 67a8e1175bSopenharmony_ci if (exp_type == 0) { 68a8e1175bSopenharmony_ci TEST_ASSERT(ret == MBEDTLS_ERR_OID_NOT_FOUND); 69a8e1175bSopenharmony_ci } else { 70a8e1175bSopenharmony_ci TEST_ASSERT(ret == 0); 71a8e1175bSopenharmony_ci TEST_ASSERT(ext_type == exp_type); 72a8e1175bSopenharmony_ci } 73a8e1175bSopenharmony_ci} 74a8e1175bSopenharmony_ci/* END_CASE */ 75a8e1175bSopenharmony_ci 76a8e1175bSopenharmony_ci/* BEGIN_CASE */ 77a8e1175bSopenharmony_civoid oid_get_md_alg_id(data_t *oid, int exp_md_id) 78a8e1175bSopenharmony_ci{ 79a8e1175bSopenharmony_ci mbedtls_asn1_buf md_oid = { 0, 0, NULL }; 80a8e1175bSopenharmony_ci int ret; 81a8e1175bSopenharmony_ci mbedtls_md_type_t md_id = 0; 82a8e1175bSopenharmony_ci 83a8e1175bSopenharmony_ci md_oid.tag = MBEDTLS_ASN1_OID; 84a8e1175bSopenharmony_ci md_oid.p = oid->x; 85a8e1175bSopenharmony_ci md_oid.len = oid->len; 86a8e1175bSopenharmony_ci 87a8e1175bSopenharmony_ci ret = mbedtls_oid_get_md_alg(&md_oid, &md_id); 88a8e1175bSopenharmony_ci 89a8e1175bSopenharmony_ci if (exp_md_id < 0) { 90a8e1175bSopenharmony_ci TEST_ASSERT(ret == MBEDTLS_ERR_OID_NOT_FOUND); 91a8e1175bSopenharmony_ci TEST_ASSERT(md_id == 0); 92a8e1175bSopenharmony_ci } else { 93a8e1175bSopenharmony_ci TEST_ASSERT(ret == 0); 94a8e1175bSopenharmony_ci TEST_ASSERT((mbedtls_md_type_t) exp_md_id == md_id); 95a8e1175bSopenharmony_ci } 96a8e1175bSopenharmony_ci} 97a8e1175bSopenharmony_ci/* END_CASE */ 98a8e1175bSopenharmony_ci 99a8e1175bSopenharmony_ci/* BEGIN_CASE */ 100a8e1175bSopenharmony_civoid mbedtls_oid_get_md_hmac(data_t *oid, int exp_md_id) 101a8e1175bSopenharmony_ci{ 102a8e1175bSopenharmony_ci mbedtls_asn1_buf md_oid = { 0, 0, NULL }; 103a8e1175bSopenharmony_ci int ret; 104a8e1175bSopenharmony_ci mbedtls_md_type_t md_id = 0; 105a8e1175bSopenharmony_ci 106a8e1175bSopenharmony_ci md_oid.tag = MBEDTLS_ASN1_OID; 107a8e1175bSopenharmony_ci md_oid.p = oid->x; 108a8e1175bSopenharmony_ci md_oid.len = oid->len; 109a8e1175bSopenharmony_ci 110a8e1175bSopenharmony_ci ret = mbedtls_oid_get_md_hmac(&md_oid, &md_id); 111a8e1175bSopenharmony_ci 112a8e1175bSopenharmony_ci if (exp_md_id < 0) { 113a8e1175bSopenharmony_ci TEST_ASSERT(ret == MBEDTLS_ERR_OID_NOT_FOUND); 114a8e1175bSopenharmony_ci TEST_ASSERT(md_id == 0); 115a8e1175bSopenharmony_ci } else { 116a8e1175bSopenharmony_ci TEST_ASSERT(ret == 0); 117a8e1175bSopenharmony_ci TEST_ASSERT((mbedtls_md_type_t) exp_md_id == md_id); 118a8e1175bSopenharmony_ci } 119a8e1175bSopenharmony_ci} 120a8e1175bSopenharmony_ci/* END_CASE */ 121a8e1175bSopenharmony_ci 122a8e1175bSopenharmony_ci/* BEGIN_CASE */ 123a8e1175bSopenharmony_civoid oid_get_numeric_string(data_t *oid, int error_ret, char *result_str) 124a8e1175bSopenharmony_ci{ 125a8e1175bSopenharmony_ci char buf[256]; 126a8e1175bSopenharmony_ci mbedtls_asn1_buf input_oid = { 0, 0, NULL }; 127a8e1175bSopenharmony_ci int ret; 128a8e1175bSopenharmony_ci 129a8e1175bSopenharmony_ci input_oid.tag = MBEDTLS_ASN1_OID; 130a8e1175bSopenharmony_ci /* Test that an empty OID is not dereferenced */ 131a8e1175bSopenharmony_ci input_oid.p = oid->len ? oid->x : (void *) 1; 132a8e1175bSopenharmony_ci input_oid.len = oid->len; 133a8e1175bSopenharmony_ci 134a8e1175bSopenharmony_ci ret = mbedtls_oid_get_numeric_string(buf, sizeof(buf), &input_oid); 135a8e1175bSopenharmony_ci 136a8e1175bSopenharmony_ci if (error_ret == 0) { 137a8e1175bSopenharmony_ci TEST_EQUAL(ret, strlen(result_str)); 138a8e1175bSopenharmony_ci TEST_ASSERT(ret >= 3); 139a8e1175bSopenharmony_ci TEST_EQUAL(strcmp(buf, result_str), 0); 140a8e1175bSopenharmony_ci } else { 141a8e1175bSopenharmony_ci TEST_EQUAL(ret, error_ret); 142a8e1175bSopenharmony_ci } 143a8e1175bSopenharmony_ci} 144a8e1175bSopenharmony_ci/* END_CASE */ 145a8e1175bSopenharmony_ci 146a8e1175bSopenharmony_ci/* BEGIN_CASE */ 147a8e1175bSopenharmony_civoid oid_from_numeric_string(char *oid_str, int error_ret, 148a8e1175bSopenharmony_ci data_t *exp_oid_buf) 149a8e1175bSopenharmony_ci{ 150a8e1175bSopenharmony_ci mbedtls_asn1_buf oid = { 0, 0, NULL }; 151a8e1175bSopenharmony_ci mbedtls_asn1_buf exp_oid = { 0, 0, NULL }; 152a8e1175bSopenharmony_ci int ret; 153a8e1175bSopenharmony_ci 154a8e1175bSopenharmony_ci exp_oid.tag = MBEDTLS_ASN1_OID; 155a8e1175bSopenharmony_ci exp_oid.p = exp_oid_buf->x; 156a8e1175bSopenharmony_ci exp_oid.len = exp_oid_buf->len; 157a8e1175bSopenharmony_ci 158a8e1175bSopenharmony_ci ret = mbedtls_oid_from_numeric_string(&oid, oid_str, strlen(oid_str)); 159a8e1175bSopenharmony_ci 160a8e1175bSopenharmony_ci if (error_ret == 0) { 161a8e1175bSopenharmony_ci TEST_EQUAL(oid.len, exp_oid.len); 162a8e1175bSopenharmony_ci TEST_ASSERT(memcmp(oid.p, exp_oid.p, oid.len) == 0); 163a8e1175bSopenharmony_ci mbedtls_free(oid.p); 164a8e1175bSopenharmony_ci oid.p = NULL; 165a8e1175bSopenharmony_ci oid.len = 0; 166a8e1175bSopenharmony_ci } else { 167a8e1175bSopenharmony_ci TEST_EQUAL(ret, error_ret); 168a8e1175bSopenharmony_ci } 169a8e1175bSopenharmony_ci} 170a8e1175bSopenharmony_ci/* END_CASE */ 171