blob: c2fe8dc403e540594ed2cfa7e0b921baeee44667 [file] [log] [blame]
Gilles Peskine47c85792025-05-07 14:35:04 +02001/**
Gilles Peskineb825dcf2025-05-07 19:41:09 +02002 * \file x509_oid.h
Gilles Peskine47c85792025-05-07 14:35:04 +02003 *
4 * \brief Object Identifier (OID) database
5 */
6/*
7 * Copyright The Mbed TLS Contributors
8 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
9 */
Gilles Peskineb825dcf2025-05-07 19:41:09 +020010#ifndef MBEDTLS_X509_OID_H
11#define MBEDTLS_X509_OID_H
Gilles Peskine47c85792025-05-07 14:35:04 +020012#include "mbedtls/private_access.h"
13
Gilles Peskine47c85792025-05-07 14:35:04 +020014#include "mbedtls/asn1.h"
15#include "mbedtls/pk.h"
Gilles Peskine32a11122025-04-09 21:51:46 +020016#include "mbedtls/x509.h"
Gilles Peskine47c85792025-05-07 14:35:04 +020017
18#include <stddef.h>
19
Gilles Peskine47c85792025-05-07 14:35:04 +020020#include "mbedtls/md.h"
21
Gilles Peskine47c85792025-05-07 14:35:04 +020022/*
23 * Maximum number of OID components allowed
24 */
25#define MBEDTLS_OID_MAX_COMPONENTS 128
26
Gilles Peskine47c85792025-05-07 14:35:04 +020027#ifdef __cplusplus
28extern "C" {
29#endif
30
31/**
32 * \brief Base OID descriptor structure
33 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020034typedef struct {
Gilles Peskine47c85792025-05-07 14:35:04 +020035 const char *MBEDTLS_PRIVATE(asn1); /*!< OID ASN.1 representation */
36 size_t MBEDTLS_PRIVATE(asn1_len); /*!< length of asn1 */
37#if !defined(MBEDTLS_X509_REMOVE_INFO)
38 const char *MBEDTLS_PRIVATE(name); /*!< official name (e.g. from RFC) */
39 const char *MBEDTLS_PRIVATE(description); /*!< human friendly description */
40#endif
Gilles Peskine86e45ba2025-05-07 20:33:39 +020041} mbedtls_x509_oid_descriptor_t;
Gilles Peskine47c85792025-05-07 14:35:04 +020042
Gilles Peskine02ec5852025-05-12 20:52:07 +020043#if defined(MBEDTLS_X509_CRT_PARSE_C) || defined(MBEDTLS_X509_CSR_PARSE_C)
44#define MBEDTLS_X509_OID_HAVE_GET_X509_EXT_TYPE
Gilles Peskine47c85792025-05-07 14:35:04 +020045/**
46 * \brief Translate an X.509 extension OID into local values
47 *
48 * \param oid OID to use
49 * \param ext_type place to store the extension type
50 *
Gilles Peskine4c832212025-05-07 23:05:12 +020051 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020052 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020053int mbedtls_x509_oid_get_x509_ext_type(const mbedtls_asn1_buf *oid, int *ext_type);
Gilles Peskine02ec5852025-05-12 20:52:07 +020054#endif /* MBEDTLS_X509_OID_HAVE_GET_X509_EXT_TYPE */
Gilles Peskine47c85792025-05-07 14:35:04 +020055
Gilles Peskine02ec5852025-05-12 20:52:07 +020056#if defined(MBEDTLS_X509_USE_C)
Gilles Peskine47c85792025-05-07 14:35:04 +020057/**
58 * \brief Translate an X.509 attribute type OID into the short name
59 * (e.g. the OID for an X520 Common Name into "CN")
60 *
61 * \param oid OID to use
62 * \param short_name place to store the string pointer
63 *
Gilles Peskine4c832212025-05-07 23:05:12 +020064 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020065 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020066int mbedtls_x509_oid_get_attr_short_name(const mbedtls_asn1_buf *oid, const char **short_name);
Gilles Peskine02ec5852025-05-12 20:52:07 +020067#endif /* MBEDTLS_X509_USE_C */
Gilles Peskine47c85792025-05-07 14:35:04 +020068
Gilles Peskine02ec5852025-05-12 20:52:07 +020069#if defined(MBEDTLS_X509_USE_C)
Gilles Peskine47c85792025-05-07 14:35:04 +020070/**
Gilles Peskine47c85792025-05-07 14:35:04 +020071 * \brief Translate SignatureAlgorithm OID into md_type and pk_type
72 *
73 * \param oid OID to use
74 * \param md_alg place to store message digest algorithm
75 * \param pk_alg place to store public key algorithm
76 *
Gilles Peskine4c832212025-05-07 23:05:12 +020077 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020078 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020079int mbedtls_x509_oid_get_sig_alg(const mbedtls_asn1_buf *oid,
80 mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg);
Gilles Peskine47c85792025-05-07 14:35:04 +020081
Gilles Peskine02ec5852025-05-12 20:52:07 +020082#if !defined(MBEDTLS_X509_REMOVE_INFO)
Gilles Peskine47c85792025-05-07 14:35:04 +020083/**
84 * \brief Translate SignatureAlgorithm OID into description
85 *
86 * \param oid OID to use
87 * \param desc place to store string pointer
88 *
Gilles Peskine4c832212025-05-07 23:05:12 +020089 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020090 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020091int mbedtls_x509_oid_get_sig_alg_desc(const mbedtls_asn1_buf *oid, const char **desc);
Gilles Peskine02ec5852025-05-12 20:52:07 +020092#endif /* !MBEDTLS_X509_REMOVE_INFO */
93#endif /* MBEDTLS_X509_USE_C */
Gilles Peskine47c85792025-05-07 14:35:04 +020094
Gilles Peskine02ec5852025-05-12 20:52:07 +020095#if defined(MBEDTLS_X509_CRT_WRITE_C) || defined(MBEDTLS_X509_CSR_WRITE_C)
Gilles Peskine47c85792025-05-07 14:35:04 +020096/**
97 * \brief Translate md_type and pk_type into SignatureAlgorithm OID
98 *
99 * \param md_alg message digest algorithm
100 * \param pk_alg public key algorithm
101 * \param oid place to store ASN.1 OID string pointer
102 * \param olen length of the OID
103 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200104 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200105 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200106int mbedtls_x509_oid_get_oid_by_sig_alg(mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg,
107 const char **oid, size_t *olen);
Gilles Peskine02ec5852025-05-12 20:52:07 +0200108#endif /* MBEDTLS_X509_CRT_WRITE_C || MBEDTLS_X509_CSR_WRITE_C */
Gilles Peskine47c85792025-05-07 14:35:04 +0200109
Gilles Peskine02ec5852025-05-12 20:52:07 +0200110#if (defined(MBEDTLS_X509_USE_C) && defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT)) || \
111 defined(MBEDTLS_PKCS7_C)
112#define MBEDTLS_X509_OID_HAVE_GET_MD_ALG
Gilles Peskine47c85792025-05-07 14:35:04 +0200113/**
Gilles Peskine47c85792025-05-07 14:35:04 +0200114 * \brief Translate hash algorithm OID into md_type
115 *
116 * \param oid OID to use
117 * \param md_alg place to store message digest algorithm
118 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200119 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200120 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200121int mbedtls_x509_oid_get_md_alg(const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_alg);
Gilles Peskine02ec5852025-05-12 20:52:07 +0200122#endif /* MBEDTLS_X509_OID_HAVE_GET_MD_ALG */
Gilles Peskine47c85792025-05-07 14:35:04 +0200123
Gilles Peskine02ec5852025-05-12 20:52:07 +0200124#if defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_X509_REMOVE_INFO)
Gilles Peskine47c85792025-05-07 14:35:04 +0200125/**
126 * \brief Translate Extended Key Usage OID into description
127 *
128 * \param oid OID to use
129 * \param desc place to store string pointer
130 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200131 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200132 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200133int mbedtls_x509_oid_get_extended_key_usage(const mbedtls_asn1_buf *oid, const char **desc);
Gilles Peskine47c85792025-05-07 14:35:04 +0200134
135/**
136 * \brief Translate certificate policies OID into description
137 *
138 * \param oid OID to use
139 * \param desc place to store string pointer
140 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200141 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200142 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200143int mbedtls_x509_oid_get_certificate_policies(const mbedtls_asn1_buf *oid, const char **desc);
Gilles Peskine02ec5852025-05-12 20:52:07 +0200144#endif /* MBEDTLS_X509_CRT_PARSE_C && !MBEDTLS_X509_REMOVE_INFO */
Gilles Peskine47c85792025-05-07 14:35:04 +0200145
Gilles Peskine47c85792025-05-07 14:35:04 +0200146#ifdef __cplusplus
147}
148#endif
149
Gilles Peskineb825dcf2025-05-07 19:41:09 +0200150#endif /* x509_oid.h */