blob: f3646f8a1a61f83853abc8d92f928ad0a2429059 [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
43/**
44 * \brief Translate an X.509 extension OID into local values
45 *
46 * \param oid OID to use
47 * \param ext_type place to store the extension type
48 *
Gilles Peskine4c832212025-05-07 23:05:12 +020049 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020050 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020051int mbedtls_x509_oid_get_x509_ext_type(const mbedtls_asn1_buf *oid, int *ext_type);
Gilles Peskine47c85792025-05-07 14:35:04 +020052
53/**
54 * \brief Translate an X.509 attribute type OID into the short name
55 * (e.g. the OID for an X520 Common Name into "CN")
56 *
57 * \param oid OID to use
58 * \param short_name place to store the string pointer
59 *
Gilles Peskine4c832212025-05-07 23:05:12 +020060 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020061 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020062int mbedtls_x509_oid_get_attr_short_name(const mbedtls_asn1_buf *oid, const char **short_name);
Gilles Peskine47c85792025-05-07 14:35:04 +020063
64/**
Gilles Peskine47c85792025-05-07 14:35:04 +020065 * \brief Translate SignatureAlgorithm OID into md_type and pk_type
66 *
67 * \param oid OID to use
68 * \param md_alg place to store message digest algorithm
69 * \param pk_alg place to store public key algorithm
70 *
Gilles Peskine4c832212025-05-07 23:05:12 +020071 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020072 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020073int mbedtls_x509_oid_get_sig_alg(const mbedtls_asn1_buf *oid,
74 mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg);
Gilles Peskine47c85792025-05-07 14:35:04 +020075
76/**
77 * \brief Translate SignatureAlgorithm OID into description
78 *
79 * \param oid OID to use
80 * \param desc place to store string pointer
81 *
Gilles Peskine4c832212025-05-07 23:05:12 +020082 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020083 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020084int mbedtls_x509_oid_get_sig_alg_desc(const mbedtls_asn1_buf *oid, const char **desc);
Gilles Peskine47c85792025-05-07 14:35:04 +020085
86/**
87 * \brief Translate md_type and pk_type into SignatureAlgorithm OID
88 *
89 * \param md_alg message digest algorithm
90 * \param pk_alg public key algorithm
91 * \param oid place to store ASN.1 OID string pointer
92 * \param olen length of the OID
93 *
Gilles Peskine4c832212025-05-07 23:05:12 +020094 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +020095 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +020096int mbedtls_x509_oid_get_oid_by_sig_alg(mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg,
97 const char **oid, size_t *olen);
Gilles Peskine47c85792025-05-07 14:35:04 +020098
99/**
Gilles Peskine47c85792025-05-07 14:35:04 +0200100 * \brief Translate hash algorithm OID into md_type
101 *
102 * \param oid OID to use
103 * \param md_alg place to store message digest algorithm
104 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200105 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200106 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200107int mbedtls_x509_oid_get_md_alg(const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_alg);
Gilles Peskine47c85792025-05-07 14:35:04 +0200108
109#if !defined(MBEDTLS_X509_REMOVE_INFO)
110/**
111 * \brief Translate Extended Key Usage OID into description
112 *
113 * \param oid OID to use
114 * \param desc place to store string pointer
115 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200116 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200117 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200118int mbedtls_x509_oid_get_extended_key_usage(const mbedtls_asn1_buf *oid, const char **desc);
Gilles Peskine47c85792025-05-07 14:35:04 +0200119#endif
120
121/**
122 * \brief Translate certificate policies OID into description
123 *
124 * \param oid OID to use
125 * \param desc place to store string pointer
126 *
Gilles Peskine4c832212025-05-07 23:05:12 +0200127 * \return 0 if successful, or MBEDTLS_ERR_X509_UNKNOWN_OID
Gilles Peskine47c85792025-05-07 14:35:04 +0200128 */
Gilles Peskine86e45ba2025-05-07 20:33:39 +0200129int mbedtls_x509_oid_get_certificate_policies(const mbedtls_asn1_buf *oid, const char **desc);
Gilles Peskine47c85792025-05-07 14:35:04 +0200130
Gilles Peskine47c85792025-05-07 14:35:04 +0200131#ifdef __cplusplus
132}
133#endif
134
Gilles Peskineb825dcf2025-05-07 19:41:09 +0200135#endif /* x509_oid.h */