blob: 337f84310956fda30429d11a65380dbb3bacfa3e [file] [log] [blame]
Tom Rini0344c602024-10-08 13:56:50 -06001/* 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 */