blob: 337f84310956fda30429d11a65380dbb3bacfa3e [file] [log] [blame]
Ron Eldor11ee0712019-03-25 18:22:52 +02001/* 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
Hanno Becker612a2f12020-10-09 09:19:39 +01009 * depends_on:MBEDTLS_OID_C:!MBEDTLS_X509_REMOVE_INFO
Ron Eldor11ee0712019-03-25 18:22:52 +020010 * END_DEPENDENCIES
11 */
12
Ron Eldor685a3982019-04-03 09:46:27 +030013/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010014void oid_get_certificate_policies(data_t *oid, char *result_str)
Ron Eldor11ee0712019-03-25 18:22:52 +020015{
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
Gilles Peskine449bd832023-01-11 14:50:10 +010024 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);
Ron Eldor11ee0712019-03-25 18:22:52 +020030 }
31}
32/* END_CASE */
Ron Eldorb6dc1052019-04-01 18:12:23 +030033
34/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010035void oid_get_extended_key_usage(data_t *oid, char *result_str)
Ron Eldorb6dc1052019-04-01 18:12:23 +030036{
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
Gilles Peskine449bd832023-01-11 14:50:10 +010045 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);
Ron Eldorb6dc1052019-04-01 18:12:23 +030051 }
52}
53/* END_CASE */
Ron Eldore8234162019-04-03 09:45:07 +030054
55/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010056void oid_get_x509_extension(data_t *oid, int exp_type)
Ron Eldore8234162019-04-03 09:45:07 +030057{
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
Gilles Peskine449bd832023-01-11 14:50:10 +010066 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);
Ron Eldore8234162019-04-03 09:45:07 +030072 }
73}
74/* END_CASE */
Jack Lloyd5ed7fff2019-05-06 12:15:44 -040075
Przemek Stekiel2c70a0d2022-08-05 11:47:48 +020076/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010077void oid_get_md_alg_id(data_t *oid, int exp_md_id)
Jack Lloyd5ed7fff2019-05-06 12:15:44 -040078{
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
Gilles Peskine449bd832023-01-11 14:50:10 +010087 ret = mbedtls_oid_get_md_alg(&md_oid, &md_id);
Jack Lloyd5ed7fff2019-05-06 12:15:44 -040088
Gilles Peskine449bd832023-01-11 14:50:10 +010089 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);
Jack Lloyd5ed7fff2019-05-06 12:15:44 -040095 }
96}
97/* END_CASE */
David Horstmannf01de142023-02-14 17:29:16 +000098
99/* BEGIN_CASE */
Dave Rodgmana0f81e82023-07-27 15:46:33 +0100100void 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 */
David Horstmannf01de142023-02-14 17:29:16 +0000123void 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;
Demi Marie Obenour889534a2023-03-11 17:45:28 -0500130 /* Test that an empty OID is not dereferenced */
131 input_oid.p = oid->len ? oid->x : (void *) 1;
David Horstmannf01de142023-02-14 17:29:16 +0000132 input_oid.len = oid->len;
133
134 ret = mbedtls_oid_get_numeric_string(buf, sizeof(buf), &input_oid);
135
136 if (error_ret == 0) {
Demi Marie Obenour889534a2023-03-11 17:45:28 -0500137 TEST_EQUAL(ret, strlen(result_str));
138 TEST_ASSERT(ret >= 3);
139 TEST_EQUAL(strcmp(buf, result_str), 0);
David Horstmannf01de142023-02-14 17:29:16 +0000140 } else {
141 TEST_EQUAL(ret, error_ret);
142 }
143}
144/* END_CASE */
David Horstmann0f852c92023-02-15 11:09:10 +0000145
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 */