blob: 329bd8b486dc7ee245611d002368eaebd0fad4ee [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"
Manuel Pégourié-Gonnard07018f92022-09-15 11:29:35 +02006#include "mbedtls/legacy_or_psa.h"
Ron Eldor11ee0712019-03-25 18:22:52 +02007/* END_HEADER */
8
9/* BEGIN_DEPENDENCIES
Hanno Becker612a2f12020-10-09 09:19:39 +010010 * depends_on:MBEDTLS_OID_C:!MBEDTLS_X509_REMOVE_INFO
Ron Eldor11ee0712019-03-25 18:22:52 +020011 * END_DEPENDENCIES
12 */
13
Ron Eldor685a3982019-04-03 09:46:27 +030014/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010015void oid_get_certificate_policies(data_t *oid, char *result_str)
Ron Eldor11ee0712019-03-25 18:22:52 +020016{
17 mbedtls_asn1_buf asn1_buf = { 0, 0, NULL };
18 int ret;
19 const char *desc;
20
21 asn1_buf.tag = MBEDTLS_ASN1_OID;
22 asn1_buf.p = oid->x;
23 asn1_buf.len = oid->len;
24
Gilles Peskine449bd832023-01-11 14:50:10 +010025 ret = mbedtls_oid_get_certificate_policies(&asn1_buf, &desc);
26 if (strlen(result_str) == 0) {
27 TEST_ASSERT(ret == MBEDTLS_ERR_OID_NOT_FOUND);
28 } else {
29 TEST_ASSERT(ret == 0);
30 TEST_ASSERT(strcmp((char *) desc, result_str) == 0);
Ron Eldor11ee0712019-03-25 18:22:52 +020031 }
32}
33/* END_CASE */
Ron Eldorb6dc1052019-04-01 18:12:23 +030034
35/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010036void oid_get_extended_key_usage(data_t *oid, char *result_str)
Ron Eldorb6dc1052019-04-01 18:12:23 +030037{
38 mbedtls_asn1_buf asn1_buf = { 0, 0, NULL };
39 int ret;
40 const char *desc;
41
42 asn1_buf.tag = MBEDTLS_ASN1_OID;
43 asn1_buf.p = oid->x;
44 asn1_buf.len = oid->len;
45
Gilles Peskine449bd832023-01-11 14:50:10 +010046 ret = mbedtls_oid_get_extended_key_usage(&asn1_buf, &desc);
47 if (strlen(result_str) == 0) {
48 TEST_ASSERT(ret == MBEDTLS_ERR_OID_NOT_FOUND);
49 } else {
50 TEST_ASSERT(ret == 0);
51 TEST_ASSERT(strcmp((char *) desc, result_str) == 0);
Ron Eldorb6dc1052019-04-01 18:12:23 +030052 }
53}
54/* END_CASE */
Ron Eldore8234162019-04-03 09:45:07 +030055
56/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010057void oid_get_x509_extension(data_t *oid, int exp_type)
Ron Eldore8234162019-04-03 09:45:07 +030058{
59 mbedtls_asn1_buf ext_oid = { 0, 0, NULL };
60 int ret;
61 int ext_type;
62
63 ext_oid.tag = MBEDTLS_ASN1_OID;
64 ext_oid.p = oid->x;
65 ext_oid.len = oid->len;
66
Gilles Peskine449bd832023-01-11 14:50:10 +010067 ret = mbedtls_oid_get_x509_ext_type(&ext_oid, &ext_type);
68 if (exp_type == 0) {
69 TEST_ASSERT(ret == MBEDTLS_ERR_OID_NOT_FOUND);
70 } else {
71 TEST_ASSERT(ret == 0);
72 TEST_ASSERT(ext_type == exp_type);
Ron Eldore8234162019-04-03 09:45:07 +030073 }
74}
75/* END_CASE */
Jack Lloyd5ed7fff2019-05-06 12:15:44 -040076
Przemek Stekiel2c70a0d2022-08-05 11:47:48 +020077/* BEGIN_CASE */
Gilles Peskine449bd832023-01-11 14:50:10 +010078void oid_get_md_alg_id(data_t *oid, int exp_md_id)
Jack Lloyd5ed7fff2019-05-06 12:15:44 -040079{
80 mbedtls_asn1_buf md_oid = { 0, 0, NULL };
81 int ret;
82 mbedtls_md_type_t md_id = 0;
83
84 md_oid.tag = MBEDTLS_ASN1_OID;
85 md_oid.p = oid->x;
86 md_oid.len = oid->len;
87
Gilles Peskine449bd832023-01-11 14:50:10 +010088 ret = mbedtls_oid_get_md_alg(&md_oid, &md_id);
Jack Lloyd5ed7fff2019-05-06 12:15:44 -040089
Gilles Peskine449bd832023-01-11 14:50:10 +010090 if (exp_md_id < 0) {
91 TEST_ASSERT(ret == MBEDTLS_ERR_OID_NOT_FOUND);
92 TEST_ASSERT(md_id == 0);
93 } else {
94 TEST_ASSERT(ret == 0);
95 TEST_ASSERT((mbedtls_md_type_t) exp_md_id == md_id);
Jack Lloyd5ed7fff2019-05-06 12:15:44 -040096 }
97}
98/* END_CASE */
David Horstmannf01de142023-02-14 17:29:16 +000099
100/* BEGIN_CASE */
101void oid_get_numeric_string(data_t *oid, int error_ret, char *result_str)
102{
103 char buf[256];
104 mbedtls_asn1_buf input_oid = { 0, 0, NULL };
105 int ret;
106
107 input_oid.tag = MBEDTLS_ASN1_OID;
108 input_oid.p = oid->x;
109 input_oid.len = oid->len;
110
111 ret = mbedtls_oid_get_numeric_string(buf, sizeof(buf), &input_oid);
112
113 if (error_ret == 0) {
114 TEST_ASSERT(strcmp(buf, result_str) == 0);
115 } else {
116 TEST_EQUAL(ret, error_ret);
117 }
118}
119/* END_CASE */
David Horstmann0f852c92023-02-15 11:09:10 +0000120
121/* BEGIN_CASE */
122void oid_from_numeric_string(char *oid_str, int error_ret,
123 data_t *exp_oid_buf)
124{
125 mbedtls_asn1_buf oid = { 0, 0, NULL };
126 mbedtls_asn1_buf exp_oid = { 0, 0, NULL };
127 int ret;
128
129 exp_oid.tag = MBEDTLS_ASN1_OID;
130 exp_oid.p = exp_oid_buf->x;
131 exp_oid.len = exp_oid_buf->len;
132
133 ret = mbedtls_oid_from_numeric_string(&oid, oid_str, strlen(oid_str));
134
135 if (error_ret == 0) {
136 TEST_EQUAL(oid.len, exp_oid.len);
137 TEST_ASSERT(memcmp(oid.p, exp_oid.p, oid.len) == 0);
138 mbedtls_free(oid.p);
139 oid.p = NULL;
140 oid.len = 0;
141 } else {
142 TEST_EQUAL(ret, error_ret);
143 }
144}
145/* END_CASE */