blob: 8d5e1bbff1e038587c134af8fdfdd62f52d2a65e [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"
Ben Taylor1030f802025-07-15 14:55:41 +010016#if defined(MBEDTLS_PK_HAVE_PRIVATE_HEADER)
17#include <mbedtls/private/pk_private.h>
18#endif /* MBEDTLS_PK_HAVE_PRIVATE_HEADER */
Gilles Peskine32a11122025-04-09 21:51:46 +020019#include "mbedtls/x509.h"
Gilles Peskine47c85792025-05-07 14:35:04 +020020
21#include <stddef.h>
22
Gilles Peskine47c85792025-05-07 14:35:04 +020023#include "mbedtls/md.h"
24
Gilles Peskine47c85792025-05-07 14:35:04 +020025/*
26 * Maximum number of OID components allowed
27 */
28#define MBEDTLS_OID_MAX_COMPONENTS 128
29
Gilles Peskine47c85792025-05-07 14:35:04 +020030#ifdef __cplusplus
31extern "C" {
32#endif
33
34/**
35 * \brief Base OID descriptor structure
36 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020037typedef struct {
Gilles Peskine47c85792025-05-07 14:35:04 +020038 const char *MBEDTLS_PRIVATE(asn1); /*!< OID ASN.1 representation */
39 size_t MBEDTLS_PRIVATE(asn1_len); /*!< length of asn1 */
40#if !defined(MBEDTLS_X509_REMOVE_INFO)
41 const char *MBEDTLS_PRIVATE(name); /*!< official name (e.g. from RFC) */
42 const char *MBEDTLS_PRIVATE(description); /*!< human friendly description */
43#endif
Gilles Peskine86e45ba2025-05-07 20:33:39 +020044} mbedtls_x509_oid_descriptor_t;
Gilles Peskine47c85792025-05-07 14:35:04 +020045
Gilles Peskine02ec5852025-05-12 20:52:07 +020046#if defined(MBEDTLS_X509_CRT_PARSE_C) || defined(MBEDTLS_X509_CSR_PARSE_C)
47#define MBEDTLS_X509_OID_HAVE_GET_X509_EXT_TYPE
Gilles Peskine47c85792025-05-07 14:35:04 +020048/**
49 * \brief Translate an X.509 extension OID into local values
50 *
51 * \param oid OID to use
52 * \param ext_type place to store the extension type
53 *
Gilles Peskine4c832212025-05-07 23:05:12 +020054 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020055 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020056int mbedtls_x509_oid_get_x509_ext_type(const mbedtls_asn1_buf *oid, int *ext_type);
Gilles Peskine02ec5852025-05-12 20:52:07 +020057#endif /* MBEDTLS_X509_OID_HAVE_GET_X509_EXT_TYPE */
Gilles Peskine47c85792025-05-07 14:35:04 +020058
Gilles Peskine02ec5852025-05-12 20:52:07 +020059#if defined(MBEDTLS_X509_USE_C)
Gilles Peskine47c85792025-05-07 14:35:04 +020060/**
61 * \brief Translate an X.509 attribute type OID into the short name
62 * (e.g. the OID for an X520 Common Name into "CN")
63 *
64 * \param oid OID to use
65 * \param short_name place to store the string pointer
66 *
Gilles Peskine4c832212025-05-07 23:05:12 +020067 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020068 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020069int mbedtls_x509_oid_get_attr_short_name(const mbedtls_asn1_buf *oid, const char **short_name);
Gilles Peskine02ec5852025-05-12 20:52:07 +020070#endif /* MBEDTLS_X509_USE_C */
Gilles Peskine47c85792025-05-07 14:35:04 +020071
Gilles Peskine02ec5852025-05-12 20:52:07 +020072#if defined(MBEDTLS_X509_USE_C)
Gilles Peskine47c85792025-05-07 14:35:04 +020073/**
Gilles Peskine47c85792025-05-07 14:35:04 +020074 * \brief Translate SignatureAlgorithm OID into md_type and pk_type
75 *
76 * \param oid OID to use
77 * \param md_alg place to store message digest algorithm
78 * \param pk_alg place to store public key algorithm
79 *
Gilles Peskine4c832212025-05-07 23:05:12 +020080 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020081 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020082int mbedtls_x509_oid_get_sig_alg(const mbedtls_asn1_buf *oid,
83 mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg);
Gilles Peskine47c85792025-05-07 14:35:04 +020084
Gilles Peskine02ec5852025-05-12 20:52:07 +020085#if !defined(MBEDTLS_X509_REMOVE_INFO)
Gilles Peskine47c85792025-05-07 14:35:04 +020086/**
87 * \brief Translate SignatureAlgorithm OID into description
88 *
89 * \param oid OID to use
90 * \param desc place to store string pointer
91 *
Gilles Peskine4c832212025-05-07 23:05:12 +020092 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020093 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020094int mbedtls_x509_oid_get_sig_alg_desc(const mbedtls_asn1_buf *oid, const char **desc);
Gilles Peskine02ec5852025-05-12 20:52:07 +020095#endif /* !MBEDTLS_X509_REMOVE_INFO */
96#endif /* MBEDTLS_X509_USE_C */
Gilles Peskine47c85792025-05-07 14:35:04 +020097
Gilles Peskine02ec5852025-05-12 20:52:07 +020098#if defined(MBEDTLS_X509_CRT_WRITE_C) || defined(MBEDTLS_X509_CSR_WRITE_C)
Gilles Peskine47c85792025-05-07 14:35:04 +020099/**
100 * \brief Translate md_type and pk_type into SignatureAlgorithm OID
101 *
102 * \param md_alg message digest algorithm
103 * \param pk_alg public key algorithm
104 * \param oid place to store ASN.1 OID string pointer
105 * \param olen length of the OID
106 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200107 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200108 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200109int mbedtls_x509_oid_get_oid_by_sig_alg(mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg,
110 const char **oid, size_t *olen);
Gilles Peskine02ec5852025-05-12 20:52:07 +0200111#endif /* MBEDTLS_X509_CRT_WRITE_C || MBEDTLS_X509_CSR_WRITE_C */
Gilles Peskine47c85792025-05-07 14:35:04 +0200112
Gilles Peskine02ec5852025-05-12 20:52:07 +0200113#if (defined(MBEDTLS_X509_USE_C) && defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT)) || \
114 defined(MBEDTLS_PKCS7_C)
115#define MBEDTLS_X509_OID_HAVE_GET_MD_ALG
Gilles Peskine47c85792025-05-07 14:35:04 +0200116/**
Gilles Peskine47c85792025-05-07 14:35:04 +0200117 * \brief Translate hash algorithm OID into md_type
118 *
119 * \param oid OID to use
120 * \param md_alg place to store message digest algorithm
121 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200122 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200123 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200124int mbedtls_x509_oid_get_md_alg(const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_alg);
Gilles Peskine02ec5852025-05-12 20:52:07 +0200125#endif /* MBEDTLS_X509_OID_HAVE_GET_MD_ALG */
Gilles Peskine47c85792025-05-07 14:35:04 +0200126
Gilles Peskine02ec5852025-05-12 20:52:07 +0200127#if defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_X509_REMOVE_INFO)
Gilles Peskine47c85792025-05-07 14:35:04 +0200128/**
129 * \brief Translate Extended Key Usage OID into description
130 *
131 * \param oid OID to use
132 * \param desc place to store string pointer
133 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200134 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200135 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200136int mbedtls_x509_oid_get_extended_key_usage(const mbedtls_asn1_buf *oid, const char **desc);
Gilles Peskine47c85792025-05-07 14:35:04 +0200137
138/**
139 * \brief Translate certificate policies OID into description
140 *
141 * \param oid OID to use
142 * \param desc place to store string pointer
143 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200144 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200145 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200146int mbedtls_x509_oid_get_certificate_policies(const mbedtls_asn1_buf *oid, const char **desc);
Gilles Peskine02ec5852025-05-12 20:52:07 +0200147#endif /* MBEDTLS_X509_CRT_PARSE_C && !MBEDTLS_X509_REMOVE_INFO */
Gilles Peskine47c85792025-05-07 14:35:04 +0200148
Gilles Peskine47c85792025-05-07 14:35:04 +0200149#ifdef __cplusplus
150}
151#endif
152
Gilles Peskineb825dcf2025-05-07 19:41:09 +0200153#endif /* x509_oid.h */