blob: 3adc6af0b5d81c86004b84c4e331ee17a29bff3a [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 */
100void oid_get_numeric_string(data_t *oid, int error_ret, char *result_str)
101{
102 char buf[256];
103 mbedtls_asn1_buf input_oid = { 0, 0, NULL };
104 int ret;
105
106 input_oid.tag = MBEDTLS_ASN1_OID;
Demi Marie Obenour889534a2023-03-11 17:45:28 -0500107 /* Test that an empty OID is not dereferenced */
108 input_oid.p = oid->len ? oid->x : (void *) 1;
David Horstmannf01de142023-02-14 17:29:16 +0000109 input_oid.len = oid->len;
110
111 ret = mbedtls_oid_get_numeric_string(buf, sizeof(buf), &input_oid);
112
113 if (error_ret == 0) {
Demi Marie Obenour889534a2023-03-11 17:45:28 -0500114 TEST_EQUAL(ret, strlen(result_str));
115 TEST_ASSERT(ret >= 3);
116 TEST_EQUAL(strcmp(buf, result_str), 0);
David Horstmannf01de142023-02-14 17:29:16 +0000117 } else {
118 TEST_EQUAL(ret, error_ret);
119 }
120}
121/* END_CASE */
David Horstmann0f852c92023-02-15 11:09:10 +0000122
123/* BEGIN_CASE */
124void oid_from_numeric_string(char *oid_str, int error_ret,
125 data_t *exp_oid_buf)
126{
127 mbedtls_asn1_buf oid = { 0, 0, NULL };
128 mbedtls_asn1_buf exp_oid = { 0, 0, NULL };
129 int ret;
130
131 exp_oid.tag = MBEDTLS_ASN1_OID;
132 exp_oid.p = exp_oid_buf->x;
133 exp_oid.len = exp_oid_buf->len;
134
135 ret = mbedtls_oid_from_numeric_string(&oid, oid_str, strlen(oid_str));
136
137 if (error_ret == 0) {
138 TEST_EQUAL(oid.len, exp_oid.len);
139 TEST_ASSERT(memcmp(oid.p, exp_oid.p, oid.len) == 0);
140 mbedtls_free(oid.p);
141 oid.p = NULL;
142 oid.len = 0;
143 } else {
144 TEST_EQUAL(ret, error_ret);
145 }
146}
147/* END_CASE */