xref: /aosp_15_r20/external/mbedtls/tests/suites/test_suite_oid.function (revision 62c56f9862f102b96d72393aff6076c951fb8148)
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