godot/thirdparty/mbedtls/include/mbedtls/oid.h

/**
 * \file oid.h
 *
 * \brief Object Identifier (OID) database
 */
/*
 *  Copyright The Mbed TLS Contributors
 *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 */
#ifndef MBEDTLS_OID_H
#define MBEDTLS_OID_H
#include "mbedtls/private_access.h"

#include "mbedtls/build_info.h"

#include "mbedtls/asn1.h"
#include "mbedtls/pk.h"

#include <stddef.h>

#if defined(MBEDTLS_CIPHER_C)
#include "mbedtls/cipher.h"
#endif

#include "mbedtls/md.h"

/** OID is not found. */
#define MBEDTLS_ERR_OID_NOT_FOUND
/** output buffer is too small */
#define MBEDTLS_ERR_OID_BUF_TOO_SMALL

/* This is for the benefit of X.509, but defined here in order to avoid
 * having a "backwards" include of x.509.h here */
/*
 * X.509 extension types (internal, arbitrary values for bitsets)
 */
#define MBEDTLS_OID_X509_EXT_AUTHORITY_KEY_IDENTIFIER
#define MBEDTLS_OID_X509_EXT_SUBJECT_KEY_IDENTIFIER
#define MBEDTLS_OID_X509_EXT_KEY_USAGE
#define MBEDTLS_OID_X509_EXT_CERTIFICATE_POLICIES
#define MBEDTLS_OID_X509_EXT_POLICY_MAPPINGS
#define MBEDTLS_OID_X509_EXT_SUBJECT_ALT_NAME
#define MBEDTLS_OID_X509_EXT_ISSUER_ALT_NAME
#define MBEDTLS_OID_X509_EXT_SUBJECT_DIRECTORY_ATTRS
#define MBEDTLS_OID_X509_EXT_BASIC_CONSTRAINTS
#define MBEDTLS_OID_X509_EXT_NAME_CONSTRAINTS
#define MBEDTLS_OID_X509_EXT_POLICY_CONSTRAINTS
#define MBEDTLS_OID_X509_EXT_EXTENDED_KEY_USAGE
#define MBEDTLS_OID_X509_EXT_CRL_DISTRIBUTION_POINTS
#define MBEDTLS_OID_X509_EXT_INIHIBIT_ANYPOLICY
#define MBEDTLS_OID_X509_EXT_FRESHEST_CRL
#define MBEDTLS_OID_X509_EXT_NS_CERT_TYPE

/*
 * Maximum number of OID components allowed
 */
#define MBEDTLS_OID_MAX_COMPONENTS

/*
 * Top level OID tuples
 */
#define MBEDTLS_OID_ISO_MEMBER_BODIES
#define MBEDTLS_OID_ISO_IDENTIFIED_ORG
#define MBEDTLS_OID_ISO_CCITT_DS
#define MBEDTLS_OID_ISO_ITU_COUNTRY

/*
 * ISO Member bodies OID parts
 */
#define MBEDTLS_OID_COUNTRY_US
#define MBEDTLS_OID_ORG_RSA_DATA_SECURITY
#define MBEDTLS_OID_RSA_COMPANY
#define MBEDTLS_OID_ORG_ANSI_X9_62
#define MBEDTLS_OID_ANSI_X9_62

/*
 * ISO Identified organization OID parts
 */
#define MBEDTLS_OID_ORG_DOD
#define MBEDTLS_OID_ORG_OIW
#define MBEDTLS_OID_OIW_SECSIG
#define MBEDTLS_OID_OIW_SECSIG_ALG
#define MBEDTLS_OID_OIW_SECSIG_SHA1
#define MBEDTLS_OID_ORG_THAWTE
#define MBEDTLS_OID_THAWTE
#define MBEDTLS_OID_ORG_CERTICOM
#define MBEDTLS_OID_CERTICOM
#define MBEDTLS_OID_ORG_TELETRUST
#define MBEDTLS_OID_TELETRUST

/*
 * ISO ITU OID parts
 */
#define MBEDTLS_OID_ORGANIZATION
#define MBEDTLS_OID_ISO_ITU_US_ORG

#define MBEDTLS_OID_ORG_GOV
#define MBEDTLS_OID_GOV

#define MBEDTLS_OID_ORG_NETSCAPE
#define MBEDTLS_OID_NETSCAPE

/* ISO arc for standard certificate and CRL extensions */
#define MBEDTLS_OID_ID_CE

#define MBEDTLS_OID_NIST_ALG

/**
 * Private Internet Extensions
 * { iso(1) identified-organization(3) dod(6) internet(1)
 *                      security(5) mechanisms(5) pkix(7) }
 */
#define MBEDTLS_OID_INTERNET
#define MBEDTLS_OID_PKIX

/*
 * Arc for standard naming attributes
 */
#define MBEDTLS_OID_AT
#define MBEDTLS_OID_AT_CN
#define MBEDTLS_OID_AT_SUR_NAME
#define MBEDTLS_OID_AT_SERIAL_NUMBER
#define MBEDTLS_OID_AT_COUNTRY
#define MBEDTLS_OID_AT_LOCALITY
#define MBEDTLS_OID_AT_STATE
#define MBEDTLS_OID_AT_ORGANIZATION
#define MBEDTLS_OID_AT_ORG_UNIT
#define MBEDTLS_OID_AT_TITLE
#define MBEDTLS_OID_AT_POSTAL_ADDRESS
#define MBEDTLS_OID_AT_POSTAL_CODE
#define MBEDTLS_OID_AT_GIVEN_NAME
#define MBEDTLS_OID_AT_INITIALS
#define MBEDTLS_OID_AT_GENERATION_QUALIFIER
#define MBEDTLS_OID_AT_UNIQUE_IDENTIFIER
#define MBEDTLS_OID_AT_DN_QUALIFIER
#define MBEDTLS_OID_AT_PSEUDONYM

#define MBEDTLS_OID_UID
#define MBEDTLS_OID_DOMAIN_COMPONENT

/*
 * OIDs for standard certificate extensions
 */
#define MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER
#define MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER
#define MBEDTLS_OID_KEY_USAGE
#define MBEDTLS_OID_CERTIFICATE_POLICIES
#define MBEDTLS_OID_POLICY_MAPPINGS
#define MBEDTLS_OID_SUBJECT_ALT_NAME
#define MBEDTLS_OID_ISSUER_ALT_NAME
#define MBEDTLS_OID_SUBJECT_DIRECTORY_ATTRS
#define MBEDTLS_OID_BASIC_CONSTRAINTS
#define MBEDTLS_OID_NAME_CONSTRAINTS
#define MBEDTLS_OID_POLICY_CONSTRAINTS
#define MBEDTLS_OID_EXTENDED_KEY_USAGE
#define MBEDTLS_OID_CRL_DISTRIBUTION_POINTS
#define MBEDTLS_OID_INIHIBIT_ANYPOLICY
#define MBEDTLS_OID_FRESHEST_CRL

/*
 * Certificate policies
 */
#define MBEDTLS_OID_ANY_POLICY

/*
 * Netscape certificate extensions
 */
#define MBEDTLS_OID_NS_CERT
#define MBEDTLS_OID_NS_CERT_TYPE
#define MBEDTLS_OID_NS_BASE_URL
#define MBEDTLS_OID_NS_REVOCATION_URL
#define MBEDTLS_OID_NS_CA_REVOCATION_URL
#define MBEDTLS_OID_NS_RENEWAL_URL
#define MBEDTLS_OID_NS_CA_POLICY_URL
#define MBEDTLS_OID_NS_SSL_SERVER_NAME
#define MBEDTLS_OID_NS_COMMENT
#define MBEDTLS_OID_NS_DATA_TYPE
#define MBEDTLS_OID_NS_CERT_SEQUENCE

/*
 * OIDs for CRL extensions
 */
#define MBEDTLS_OID_PRIVATE_KEY_USAGE_PERIOD
#define MBEDTLS_OID_CRL_NUMBER

/*
 * X.509 v3 Extended key usage OIDs
 */
#define MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE

#define MBEDTLS_OID_KP
#define MBEDTLS_OID_SERVER_AUTH
#define MBEDTLS_OID_CLIENT_AUTH
#define MBEDTLS_OID_CODE_SIGNING
#define MBEDTLS_OID_EMAIL_PROTECTION
#define MBEDTLS_OID_TIME_STAMPING
#define MBEDTLS_OID_OCSP_SIGNING

/**
 * Wi-SUN Alliance Field Area Network
 * { iso(1) identified-organization(3) dod(6) internet(1)
 *                      private(4) enterprise(1) WiSUN(45605) FieldAreaNetwork(1) }
 */
#define MBEDTLS_OID_WISUN_FAN

#define MBEDTLS_OID_ON
#define MBEDTLS_OID_ON_HW_MODULE_NAME

/*
 * PKCS definition OIDs
 */

#define MBEDTLS_OID_PKCS
#define MBEDTLS_OID_PKCS1
#define MBEDTLS_OID_PKCS5
#define MBEDTLS_OID_PKCS7
#define MBEDTLS_OID_PKCS9
#define MBEDTLS_OID_PKCS12

/*
 * PKCS#1 OIDs
 */
#define MBEDTLS_OID_PKCS1_RSA
#define MBEDTLS_OID_PKCS1_MD5
#define MBEDTLS_OID_PKCS1_SHA1
#define MBEDTLS_OID_PKCS1_SHA224
#define MBEDTLS_OID_PKCS1_SHA256
#define MBEDTLS_OID_PKCS1_SHA384
#define MBEDTLS_OID_PKCS1_SHA512

#define MBEDTLS_OID_RSA_SHA_OBS

#define MBEDTLS_OID_PKCS9_EMAIL

/* RFC 4055 */
#define MBEDTLS_OID_RSASSA_PSS
#define MBEDTLS_OID_MGF1

/*
 * Digest algorithms
 */
#define MBEDTLS_OID_DIGEST_ALG_MD5
#define MBEDTLS_OID_DIGEST_ALG_SHA1
#define MBEDTLS_OID_DIGEST_ALG_SHA224
#define MBEDTLS_OID_DIGEST_ALG_SHA256

#define MBEDTLS_OID_DIGEST_ALG_SHA384

#define MBEDTLS_OID_DIGEST_ALG_SHA512

#define MBEDTLS_OID_DIGEST_ALG_RIPEMD160

#define MBEDTLS_OID_DIGEST_ALG_SHA3_224

#define MBEDTLS_OID_DIGEST_ALG_SHA3_256

#define MBEDTLS_OID_DIGEST_ALG_SHA3_384

#define MBEDTLS_OID_DIGEST_ALG_SHA3_512


#define MBEDTLS_OID_HMAC_SHA1

#define MBEDTLS_OID_HMAC_SHA224

#define MBEDTLS_OID_HMAC_SHA256

#define MBEDTLS_OID_HMAC_SHA384

#define MBEDTLS_OID_HMAC_SHA512

#define MBEDTLS_OID_HMAC_SHA3_224

#define MBEDTLS_OID_HMAC_SHA3_256

#define MBEDTLS_OID_HMAC_SHA3_384

#define MBEDTLS_OID_HMAC_SHA3_512

#define MBEDTLS_OID_HMAC_RIPEMD160

/*
 * Encryption algorithms,
 * the following standardized object identifiers are specified at
 * https://datatracker.ietf.org/doc/html/rfc8018#appendix-C.
 */
#define MBEDTLS_OID_DES_CBC
#define MBEDTLS_OID_DES_EDE3_CBC
#define MBEDTLS_OID_AES
#define MBEDTLS_OID_AES_128_CBC
#define MBEDTLS_OID_AES_192_CBC
#define MBEDTLS_OID_AES_256_CBC

/*
 * Key Wrapping algorithms
 */
/*
 * RFC 5649
 */
#define MBEDTLS_OID_AES128_KW
#define MBEDTLS_OID_AES128_KWP
#define MBEDTLS_OID_AES192_KW
#define MBEDTLS_OID_AES192_KWP
#define MBEDTLS_OID_AES256_KW
#define MBEDTLS_OID_AES256_KWP
/*
 * PKCS#5 OIDs
 */
#define MBEDTLS_OID_PKCS5_PBKDF2
#define MBEDTLS_OID_PKCS5_PBES2
#define MBEDTLS_OID_PKCS5_PBMAC1

/*
 * PKCS#5 PBES1 algorithms
 */
#define MBEDTLS_OID_PKCS5_PBE_MD5_DES_CBC
#define MBEDTLS_OID_PKCS5_PBE_MD5_RC2_CBC
#define MBEDTLS_OID_PKCS5_PBE_SHA1_DES_CBC
#define MBEDTLS_OID_PKCS5_PBE_SHA1_RC2_CBC

/*
 * PKCS#7 OIDs
 */
#define MBEDTLS_OID_PKCS7_DATA
#define MBEDTLS_OID_PKCS7_SIGNED_DATA
#define MBEDTLS_OID_PKCS7_ENVELOPED_DATA
#define MBEDTLS_OID_PKCS7_SIGNED_AND_ENVELOPED_DATA
#define MBEDTLS_OID_PKCS7_DIGESTED_DATA
#define MBEDTLS_OID_PKCS7_ENCRYPTED_DATA

/*
 * PKCS#8 OIDs
 */
#define MBEDTLS_OID_PKCS9_CSR_EXT_REQ

/*
 * PKCS#12 PBE OIDs
 */
#define MBEDTLS_OID_PKCS12_PBE

#define MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC
#define MBEDTLS_OID_PKCS12_PBE_SHA1_DES2_EDE_CBC
#define MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_128_CBC
#define MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_40_CBC

/*
 * EC key algorithms from RFC 5480
 */

/* id-ecPublicKey OBJECT IDENTIFIER ::= {
 *       iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 } */
#define MBEDTLS_OID_EC_ALG_UNRESTRICTED

/*   id-ecDH OBJECT IDENTIFIER ::= {
 *     iso(1) identified-organization(3) certicom(132)
 *     schemes(1) ecdh(12) } */
#define MBEDTLS_OID_EC_ALG_ECDH

/*
 * ECParameters namedCurve identifiers, from RFC 5480, RFC 5639, and SEC2
 */

/* secp192r1 OBJECT IDENTIFIER ::= {
 *   iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1) 1 } */
#define MBEDTLS_OID_EC_GRP_SECP192R1

/* secp224r1 OBJECT IDENTIFIER ::= {
 *   iso(1) identified-organization(3) certicom(132) curve(0) 33 } */
#define MBEDTLS_OID_EC_GRP_SECP224R1

/* secp256r1 OBJECT IDENTIFIER ::= {
 *   iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1) 7 } */
#define MBEDTLS_OID_EC_GRP_SECP256R1

/* secp384r1 OBJECT IDENTIFIER ::= {
 *   iso(1) identified-organization(3) certicom(132) curve(0) 34 } */
#define MBEDTLS_OID_EC_GRP_SECP384R1

/* secp521r1 OBJECT IDENTIFIER ::= {
 *   iso(1) identified-organization(3) certicom(132) curve(0) 35 } */
#define MBEDTLS_OID_EC_GRP_SECP521R1

/* secp192k1 OBJECT IDENTIFIER ::= {
 *   iso(1) identified-organization(3) certicom(132) curve(0) 31 } */
#define MBEDTLS_OID_EC_GRP_SECP192K1

/* secp224k1 OBJECT IDENTIFIER ::= {
 *   iso(1) identified-organization(3) certicom(132) curve(0) 32 } */
#define MBEDTLS_OID_EC_GRP_SECP224K1

/* secp256k1 OBJECT IDENTIFIER ::= {
 *   iso(1) identified-organization(3) certicom(132) curve(0) 10 } */
#define MBEDTLS_OID_EC_GRP_SECP256K1

/* RFC 5639 4.1
 * ecStdCurvesAndGeneration OBJECT IDENTIFIER::= {iso(1)
 * identified-organization(3) teletrust(36) algorithm(3) signature-
 * algorithm(3) ecSign(2) 8}
 * ellipticCurve OBJECT IDENTIFIER ::= {ecStdCurvesAndGeneration 1}
 * versionOne OBJECT IDENTIFIER ::= {ellipticCurve 1} */
#define MBEDTLS_OID_EC_BRAINPOOL_V1

/* brainpoolP256r1 OBJECT IDENTIFIER ::= {versionOne 7} */
#define MBEDTLS_OID_EC_GRP_BP256R1

/* brainpoolP384r1 OBJECT IDENTIFIER ::= {versionOne 11} */
#define MBEDTLS_OID_EC_GRP_BP384R1

/* brainpoolP512r1 OBJECT IDENTIFIER ::= {versionOne 13} */
#define MBEDTLS_OID_EC_GRP_BP512R1

/*
 * SEC1 C.1
 *
 * prime-field OBJECT IDENTIFIER ::= { id-fieldType 1 }
 * id-fieldType OBJECT IDENTIFIER ::= { ansi-X9-62 fieldType(1)}
 */
#define MBEDTLS_OID_ANSI_X9_62_FIELD_TYPE
#define MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD

/*
 * ECDSA signature identifiers, from RFC 5480
 */
#define MBEDTLS_OID_ANSI_X9_62_SIG
#define MBEDTLS_OID_ANSI_X9_62_SIG_SHA2

/* ecdsa-with-SHA1 OBJECT IDENTIFIER ::= {
 *   iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) 1 } */
#define MBEDTLS_OID_ECDSA_SHA1

/* ecdsa-with-SHA224 OBJECT IDENTIFIER ::= {
 *   iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4)
 *   ecdsa-with-SHA2(3) 1 } */
#define MBEDTLS_OID_ECDSA_SHA224

/* ecdsa-with-SHA256 OBJECT IDENTIFIER ::= {
 *   iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4)
 *   ecdsa-with-SHA2(3) 2 } */
#define MBEDTLS_OID_ECDSA_SHA256

/* ecdsa-with-SHA384 OBJECT IDENTIFIER ::= {
 *   iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4)
 *   ecdsa-with-SHA2(3) 3 } */
#define MBEDTLS_OID_ECDSA_SHA384

/* ecdsa-with-SHA512 OBJECT IDENTIFIER ::= {
 *   iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4)
 *   ecdsa-with-SHA2(3) 4 } */
#define MBEDTLS_OID_ECDSA_SHA512

/*
 * EC key algorithms from RFC 8410
 */

#define MBEDTLS_OID_X25519
#define MBEDTLS_OID_X448
#define MBEDTLS_OID_ED25519
#define MBEDTLS_OID_ED448

#ifdef __cplusplus
extern "C" {
#endif

/**
 * \brief Base OID descriptor structure
 */
mbedtls_oid_descriptor_t;

/**
 * \brief           Translate an ASN.1 OID into its numeric representation
 *                  (e.g. "\x2A\x86\x48\x86\xF7\x0D" into "1.2.840.113549")
 *
 * \param buf       buffer to put representation in
 * \param size      size of the buffer
 * \param oid       OID to translate
 *
 * \return          Length of the string written (excluding final NULL) or
 *                  MBEDTLS_ERR_OID_BUF_TOO_SMALL in case of error
 */
int mbedtls_oid_get_numeric_string(char *buf, size_t size, const mbedtls_asn1_buf *oid);

/**
 * \brief           Translate a string containing a dotted-decimal
 *                  representation of an ASN.1 OID into its encoded form
 *                  (e.g. "1.2.840.113549" into "\x2A\x86\x48\x86\xF7\x0D").
 *                  On success, this function allocates oid->buf from the
 *                  heap. It must be freed by the caller using mbedtls_free().
 *
 * \param oid       #mbedtls_asn1_buf to populate with the DER-encoded OID
 * \param oid_str   string representation of the OID to parse
 * \param size      length of the OID string, not including any null terminator
 *
 * \return          0 if successful
 * \return          #MBEDTLS_ERR_ASN1_INVALID_DATA if \p oid_str does not
 *                  represent a valid OID
 * \return          #MBEDTLS_ERR_ASN1_ALLOC_FAILED if the function fails to
 *                  allocate oid->buf
 */
int mbedtls_oid_from_numeric_string(mbedtls_asn1_buf *oid, const char *oid_str, size_t size);

/**
 * \brief          Translate an X.509 extension OID into local values
 *
 * \param oid      OID to use
 * \param ext_type place to store the extension type
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_x509_ext_type(const mbedtls_asn1_buf *oid, int *ext_type);

/**
 * \brief          Translate an X.509 attribute type OID into the short name
 *                 (e.g. the OID for an X520 Common Name into "CN")
 *
 * \param oid      OID to use
 * \param short_name    place to store the string pointer
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_attr_short_name(const mbedtls_asn1_buf *oid, const char **short_name);

/**
 * \brief          Translate PublicKeyAlgorithm OID into pk_type
 *
 * \param oid      OID to use
 * \param pk_alg   place to store public key algorithm
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_pk_alg(const mbedtls_asn1_buf *oid, mbedtls_pk_type_t *pk_alg);

/**
 * \brief          Translate pk_type into PublicKeyAlgorithm OID
 *
 * \param pk_alg   Public key type to look for
 * \param oid      place to store ASN.1 OID string pointer
 * \param olen     length of the OID
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_oid_by_pk_alg(mbedtls_pk_type_t pk_alg,
                                  const char **oid, size_t *olen);

#if defined(MBEDTLS_PK_HAVE_ECC_KEYS)
/**
 * \brief          Translate NamedCurve OID into an EC group identifier
 *
 * \param oid      OID to use
 * \param grp_id   place to store group id
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_ec_grp(const mbedtls_asn1_buf *oid, mbedtls_ecp_group_id *grp_id);

/**
 * \brief          Translate EC group identifier into NamedCurve OID
 *
 * \param grp_id   EC group identifier
 * \param oid      place to store ASN.1 OID string pointer
 * \param olen     length of the OID
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_oid_by_ec_grp(mbedtls_ecp_group_id grp_id,
                                  const char **oid, size_t *olen);

/**
 * \brief          Translate AlgorithmIdentifier OID into an EC group identifier,
 *                 for curves that are directly encoded at this level
 *
 * \param oid      OID to use
 * \param grp_id   place to store group id
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_ec_grp_algid(const mbedtls_asn1_buf *oid, mbedtls_ecp_group_id *grp_id);

/**
 * \brief          Translate EC group identifier into AlgorithmIdentifier OID,
 *                 for curves that are directly encoded at this level
 *
 * \param grp_id   EC group identifier
 * \param oid      place to store ASN.1 OID string pointer
 * \param olen     length of the OID
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_oid_by_ec_grp_algid(mbedtls_ecp_group_id grp_id,
                                        const char **oid, size_t *olen);
#endif /* MBEDTLS_PK_HAVE_ECC_KEYS */

/**
 * \brief          Translate SignatureAlgorithm OID into md_type and pk_type
 *
 * \param oid      OID to use
 * \param md_alg   place to store message digest algorithm
 * \param pk_alg   place to store public key algorithm
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_sig_alg(const mbedtls_asn1_buf *oid,
                            mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg);

/**
 * \brief          Translate SignatureAlgorithm OID into description
 *
 * \param oid      OID to use
 * \param desc     place to store string pointer
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_sig_alg_desc(const mbedtls_asn1_buf *oid, const char **desc);

/**
 * \brief          Translate md_type and pk_type into SignatureAlgorithm OID
 *
 * \param md_alg   message digest algorithm
 * \param pk_alg   public key algorithm
 * \param oid      place to store ASN.1 OID string pointer
 * \param olen     length of the OID
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_oid_by_sig_alg(mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg,
                                   const char **oid, size_t *olen);

/**
 * \brief          Translate hmac algorithm OID into md_type
 *
 * \param oid      OID to use
 * \param md_hmac  place to store message hmac algorithm
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_md_hmac(const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_hmac);

/**
 * \brief          Translate hash algorithm OID into md_type
 *
 * \param oid      OID to use
 * \param md_alg   place to store message digest algorithm
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_md_alg(const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_alg);

#if !defined(MBEDTLS_X509_REMOVE_INFO)
/**
 * \brief          Translate Extended Key Usage OID into description
 *
 * \param oid      OID to use
 * \param desc     place to store string pointer
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_extended_key_usage(const mbedtls_asn1_buf *oid, const char **desc);
#endif

/**
 * \brief          Translate certificate policies OID into description
 *
 * \param oid      OID to use
 * \param desc     place to store string pointer
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_certificate_policies(const mbedtls_asn1_buf *oid, const char **desc);

/**
 * \brief          Translate md_type into hash algorithm OID
 *
 * \param md_alg   message digest algorithm
 * \param oid      place to store ASN.1 OID string pointer
 * \param olen     length of the OID
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_oid_by_md(mbedtls_md_type_t md_alg, const char **oid, size_t *olen);

#if defined(MBEDTLS_CIPHER_C)
/**
 * \brief          Translate encryption algorithm OID into cipher_type
 *
 * \param oid           OID to use
 * \param cipher_alg    place to store cipher algorithm
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_cipher_alg(const mbedtls_asn1_buf *oid, mbedtls_cipher_type_t *cipher_alg);

#if defined(MBEDTLS_PKCS12_C)
/**
 * \brief          Translate PKCS#12 PBE algorithm OID into md_type and
 *                 cipher_type
 *
 * \param oid           OID to use
 * \param md_alg        place to store message digest algorithm
 * \param cipher_alg    place to store cipher algorithm
 *
 * \return         0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
 */
int mbedtls_oid_get_pkcs12_pbe_alg(const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_alg,
                                   mbedtls_cipher_type_t *cipher_alg);
#endif /* MBEDTLS_PKCS12_C */
#endif /* MBEDTLS_CIPHER_C */

#ifdef __cplusplus
}
#endif

#endif /* oid.h */