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