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