30#ifndef MBEDTLS_COMPAT_H_
31#define MBEDTLS_COMPAT_H_
37#include <mbedtls/asn1.h>
38#include <mbedtls/pk.h>
39#include <mbedtls/version.h>
41#if MBEDTLS_VERSION_NUMBER < 0x04000000
42#include <mbedtls/ctr_drbg.h>
45#include <mbedtls/oid.h>
48#ifdef HAVE_PSA_CRYPTO_H
49#include <psa/crypto.h>
55#if defined(HAVE_PSA_CRYPTO_H) && defined(MBEDTLS_PSA_CRYPTO_C)
56 if (psa_crypto_init() != PSA_SUCCESS)
58 msg(
M_FATAL,
"mbedtls: psa_crypto_init() failed");
65#if MBEDTLS_VERSION_NUMBER >= 0x04000000
70} mbedtls_ecp_curve_info;
73mbedtls_oid_get_attr_short_name(
const mbedtls_asn1_buf *oid,
const char **desc)
76 if (oid->tag != MBEDTLS_ASN1_OID || oid->len != strlen(MBEDTLS_OID_AT_CN))
82 if (memcmp(oid->p, MBEDTLS_OID_AT_CN, oid->len) == 0)
86 else if (memcmp(oid->p, MBEDTLS_OID_AT_SUR_NAME, oid->len) == 0)
90 else if (memcmp(oid->p, MBEDTLS_OID_AT_SERIAL_NUMBER, oid->len) == 0)
92 *desc =
"serialNumber";
94 else if (memcmp(oid->p, MBEDTLS_OID_AT_COUNTRY, oid->len) == 0)
98 else if (memcmp(oid->p, MBEDTLS_OID_AT_LOCALITY, oid->len) == 0)
102 else if (memcmp(oid->p, MBEDTLS_OID_AT_STATE, oid->len) == 0)
106 else if (memcmp(oid->p, MBEDTLS_OID_AT_ORGANIZATION, oid->len) == 0)
110 else if (memcmp(oid->p, MBEDTLS_OID_AT_ORG_UNIT, oid->len) == 0)
114 else if (memcmp(oid->p, MBEDTLS_OID_AT_TITLE, oid->len) == 0)
118 else if (memcmp(oid->p, MBEDTLS_OID_AT_POSTAL_ADDRESS, oid->len) == 0)
120 *desc =
"postalAddress";
122 else if (memcmp(oid->p, MBEDTLS_OID_AT_POSTAL_CODE, oid->len) == 0)
124 *desc =
"postalCode";
126 else if (memcmp(oid->p, MBEDTLS_OID_AT_GIVEN_NAME, oid->len) == 0)
130 else if (memcmp(oid->p, MBEDTLS_OID_AT_INITIALS, oid->len) == 0)
134 else if (memcmp(oid->p, MBEDTLS_OID_AT_GENERATION_QUALIFIER, oid->len) == 0)
136 *desc =
"generationQualifier";
138 else if (memcmp(oid->p, MBEDTLS_OID_AT_UNIQUE_IDENTIFIER, oid->len) == 0)
140 *desc =
"uniqueIdentifier";
142 else if (memcmp(oid->p, MBEDTLS_OID_AT_DN_QUALIFIER, oid->len) == 0)
144 *desc =
"dnQualifier";
146 else if (memcmp(oid->p, MBEDTLS_OID_AT_PSEUDONYM, oid->len) == 0)
159mbedtls_oid_get_extended_key_usage(
const mbedtls_asn1_buf *oid,
const char **desc)
162 if (oid->tag != MBEDTLS_ASN1_OID || oid->len != strlen(MBEDTLS_OID_SERVER_AUTH))
168 if (memcmp(oid->p, MBEDTLS_OID_SERVER_AUTH, oid->len) == 0)
170 *desc =
"TLS Web Server Authentication";
172 else if (memcmp(oid->p, MBEDTLS_OID_CLIENT_AUTH, oid->len) == 0)
174 *desc =
"TLS Web Client Authentication";
176 else if (memcmp(oid->p, MBEDTLS_OID_CODE_SIGNING, oid->len) == 0)
178 *desc =
"Code Signing";
180 else if (memcmp(oid->p, MBEDTLS_OID_EMAIL_PROTECTION, oid->len) == 0)
182 *desc =
"E-mail Protection";
184 else if (memcmp(oid->p, MBEDTLS_OID_TIME_STAMPING, oid->len) == 0)
186 *desc =
"Time Stamping";
188 else if (memcmp(oid->p, MBEDTLS_OID_OCSP_SIGNING, oid->len) == 0)
190 *desc =
"OCSP Signing";
207 const unsigned char *
key,
size_t keylen,
208 const unsigned char *pwd,
size_t pwdlen)
210#if MBEDTLS_VERSION_NUMBER >= 0x04000000
211 return mbedtls_pk_parse_key(ctx,
key, keylen, pwd, pwdlen);
213 return mbedtls_pk_parse_key(ctx,
key, keylen, pwd, pwdlen, mbedtls_ctr_drbg_random,
rand_ctx_get());
220#if MBEDTLS_VERSION_NUMBER >= 0x04000000
221 return mbedtls_pk_parse_keyfile(ctx, path, password);
223 return mbedtls_pk_parse_keyfile(ctx, path, password, mbedtls_ctr_drbg_random,
rand_ctx_get());
230#if MBEDTLS_VERSION_NUMBER >= 0x04000000
231 return mbedtls_pk_check_pair(pub, prv);
233 return mbedtls_pk_check_pair(pub, prv, mbedtls_ctr_drbg_random,
rand_ctx_get());
Data Channel Cryptography mbed TLS-specific backend interface.
mbedtls_ctr_drbg_context * rand_ctx_get(void)
Returns a singleton instance of the mbed TLS random number generator.
static int mbedtls_compat_pk_parse_key(mbedtls_pk_context *ctx, const unsigned char *key, size_t keylen, const unsigned char *pwd, size_t pwdlen)
static void mbedtls_compat_psa_crypto_init(void)
static int mbedtls_compat_pk_check_pair(const mbedtls_pk_context *pub, const mbedtls_pk_context *prv)
static int mbedtls_compat_pk_parse_keyfile(mbedtls_pk_context *ctx, const char *path, const char *password)
Container for unidirectional cipher and HMAC key material.