blob: b988aa0f67aea020530f72cc1c6efc34af5b4e18 [file] [log] [blame]
Gilles Peskine47c85792025-05-07 14:35:04 +02001/* BEGIN_HEADER */
Gilles Peskine86a47f82025-05-07 20:20:12 +02002#include "x509_oid.h"
Gilles Peskine47c85792025-05-07 14:35:04 +02003#include "mbedtls/asn1.h"
4#include "mbedtls/asn1write.h"
5#include "string.h"
6/* END_HEADER */
7
Gilles Peskine02ec5852025-05-12 20:52:07 +02008/* BEGIN_CASE depends_on:MBEDTLS_X509_CRT_PARSE_C:!MBEDTLS_X509_REMOVE_INFO */
Gilles Peskine47c85792025-05-07 14:35:04 +02009void oid_get_certificate_policies(data_t *oid, char *result_str)
10{
11 mbedtls_asn1_buf asn1_buf = { 0, 0, NULL };
12 int ret;
13 const char *desc;
14
15 asn1_buf.tag = MBEDTLS_ASN1_OID;
16 asn1_buf.p = oid->x;
17 asn1_buf.len = oid->len;
18
Gilles Peskine532e3ee2025-05-07 20:37:15 +020019 ret = mbedtls_x509_oid_get_certificate_policies(&asn1_buf, &desc);
Gilles Peskine47c85792025-05-07 14:35:04 +020020 if (strlen(result_str) == 0) {
Gilles Peskine4c832212025-05-07 23:05:12 +020021 TEST_ASSERT(ret == MBEDTLS_ERR_X509_UNKNOWN_OID);
Gilles Peskine47c85792025-05-07 14:35:04 +020022 } else {
23 TEST_ASSERT(ret == 0);
24 TEST_ASSERT(strcmp((char *) desc, result_str) == 0);
25 }
26}
27/* END_CASE */
28
Gilles Peskine02ec5852025-05-12 20:52:07 +020029/* BEGIN_CASE depends_on:MBEDTLS_X509_CRT_PARSE_C:!MBEDTLS_X509_REMOVE_INFO */
Gilles Peskine47c85792025-05-07 14:35:04 +020030void oid_get_extended_key_usage(data_t *oid, char *result_str)
31{
32 mbedtls_asn1_buf asn1_buf = { 0, 0, NULL };
33 int ret;
34 const char *desc;
35
36 asn1_buf.tag = MBEDTLS_ASN1_OID;
37 asn1_buf.p = oid->x;
38 asn1_buf.len = oid->len;
39
Gilles Peskine532e3ee2025-05-07 20:37:15 +020040 ret = mbedtls_x509_oid_get_extended_key_usage(&asn1_buf, &desc);
Gilles Peskine47c85792025-05-07 14:35:04 +020041 if (strlen(result_str) == 0) {
Gilles Peskine4c832212025-05-07 23:05:12 +020042 TEST_ASSERT(ret == MBEDTLS_ERR_X509_UNKNOWN_OID);
Gilles Peskine47c85792025-05-07 14:35:04 +020043 } else {
44 TEST_ASSERT(ret == 0);
45 TEST_ASSERT(strcmp((char *) desc, result_str) == 0);
46 }
47}
48/* END_CASE */
49
Gilles Peskine02ec5852025-05-12 20:52:07 +020050/* BEGIN_CASE depends_on:MBEDTLS_X509_OID_HAVE_GET_X509_EXT_TYPE */
Gilles Peskine47c85792025-05-07 14:35:04 +020051void oid_get_x509_extension(data_t *oid, int exp_type)
52{
53 mbedtls_asn1_buf ext_oid = { 0, 0, NULL };
54 int ret;
55 int ext_type;
56
57 ext_oid.tag = MBEDTLS_ASN1_OID;
58 ext_oid.p = oid->x;
59 ext_oid.len = oid->len;
60
Gilles Peskine532e3ee2025-05-07 20:37:15 +020061 ret = mbedtls_x509_oid_get_x509_ext_type(&ext_oid, &ext_type);
Gilles Peskine47c85792025-05-07 14:35:04 +020062 if (exp_type == 0) {
Gilles Peskine4c832212025-05-07 23:05:12 +020063 TEST_ASSERT(ret == MBEDTLS_ERR_X509_UNKNOWN_OID);
Gilles Peskine47c85792025-05-07 14:35:04 +020064 } else {
65 TEST_ASSERT(ret == 0);
66 TEST_ASSERT(ext_type == exp_type);
67 }
68}
69/* END_CASE */
70
Gilles Peskine02ec5852025-05-12 20:52:07 +020071/* BEGIN_CASE depends_on:MBEDTLS_X509_OID_HAVE_GET_MD_ALG */
Gilles Peskine47c85792025-05-07 14:35:04 +020072void oid_get_md_alg_id(data_t *oid, int exp_md_id)
73{
74 mbedtls_asn1_buf md_oid = { 0, 0, NULL };
75 int ret;
76 mbedtls_md_type_t md_id = 0;
77
78 md_oid.tag = MBEDTLS_ASN1_OID;
79 md_oid.p = oid->x;
80 md_oid.len = oid->len;
81
Gilles Peskine532e3ee2025-05-07 20:37:15 +020082 ret = mbedtls_x509_oid_get_md_alg(&md_oid, &md_id);
Gilles Peskine47c85792025-05-07 14:35:04 +020083
84 if (exp_md_id < 0) {
Gilles Peskine4c832212025-05-07 23:05:12 +020085 TEST_ASSERT(ret == MBEDTLS_ERR_X509_UNKNOWN_OID);
Gilles Peskine47c85792025-05-07 14:35:04 +020086 TEST_ASSERT(md_id == 0);
87 } else {
88 TEST_ASSERT(ret == 0);
89 TEST_ASSERT((mbedtls_md_type_t) exp_md_id == md_id);
90 }
91}
92/* END_CASE */