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>
49#ifdef HAVE_PSA_CRYPTO_H
50#include <psa/crypto.h>
56#if defined(HAVE_PSA_CRYPTO_H) && defined(MBEDTLS_PSA_CRYPTO_C)
57 if (psa_crypto_init() != PSA_SUCCESS)
59 msg(
M_FATAL,
"mbedtls: psa_crypto_init() failed");
66#if MBEDTLS_VERSION_NUMBER >= 0x04000000
71} mbedtls_ecp_curve_info;
74mbedtls_oid_get_attr_short_name(
const mbedtls_asn1_buf *oid,
const char **desc)
77 if (oid->tag != MBEDTLS_ASN1_OID || oid->len != strlen(MBEDTLS_OID_AT_CN))
83 if (memcmp(oid->p, MBEDTLS_OID_AT_CN, oid->len) == 0)
87 else if (memcmp(oid->p, MBEDTLS_OID_AT_SUR_NAME, oid->len) == 0)
91 else if (memcmp(oid->p, MBEDTLS_OID_AT_SERIAL_NUMBER, oid->len) == 0)
93 *desc =
"serialNumber";
95 else if (memcmp(oid->p, MBEDTLS_OID_AT_COUNTRY, oid->len) == 0)
99 else if (memcmp(oid->p, MBEDTLS_OID_AT_LOCALITY, oid->len) == 0)
103 else if (memcmp(oid->p, MBEDTLS_OID_AT_STATE, oid->len) == 0)
107 else if (memcmp(oid->p, MBEDTLS_OID_AT_ORGANIZATION, oid->len) == 0)
111 else if (memcmp(oid->p, MBEDTLS_OID_AT_ORG_UNIT, oid->len) == 0)
115 else if (memcmp(oid->p, MBEDTLS_OID_AT_TITLE, oid->len) == 0)
119 else if (memcmp(oid->p, MBEDTLS_OID_AT_POSTAL_ADDRESS, oid->len) == 0)
121 *desc =
"postalAddress";
123 else if (memcmp(oid->p, MBEDTLS_OID_AT_POSTAL_CODE, oid->len) == 0)
125 *desc =
"postalCode";
127 else if (memcmp(oid->p, MBEDTLS_OID_AT_GIVEN_NAME, oid->len) == 0)
131 else if (memcmp(oid->p, MBEDTLS_OID_AT_INITIALS, oid->len) == 0)
135 else if (memcmp(oid->p, MBEDTLS_OID_AT_GENERATION_QUALIFIER, oid->len) == 0)
137 *desc =
"generationQualifier";
139 else if (memcmp(oid->p, MBEDTLS_OID_AT_UNIQUE_IDENTIFIER, oid->len) == 0)
141 *desc =
"uniqueIdentifier";
143 else if (memcmp(oid->p, MBEDTLS_OID_AT_DN_QUALIFIER, oid->len) == 0)
145 *desc =
"dnQualifier";
147 else if (memcmp(oid->p, MBEDTLS_OID_AT_PSEUDONYM, oid->len) == 0)
160mbedtls_oid_get_extended_key_usage(
const mbedtls_asn1_buf *oid,
const char **desc)
163 if (oid->tag != MBEDTLS_ASN1_OID || oid->len != strlen(MBEDTLS_OID_SERVER_AUTH))
169 if (memcmp(oid->p, MBEDTLS_OID_SERVER_AUTH, oid->len) == 0)
171 *desc =
"TLS Web Server Authentication";
173 else if (memcmp(oid->p, MBEDTLS_OID_CLIENT_AUTH, oid->len) == 0)
175 *desc =
"TLS Web Client Authentication";
177 else if (memcmp(oid->p, MBEDTLS_OID_CODE_SIGNING, oid->len) == 0)
179 *desc =
"Code Signing";
181 else if (memcmp(oid->p, MBEDTLS_OID_EMAIL_PROTECTION, oid->len) == 0)
183 *desc =
"E-mail Protection";
185 else if (memcmp(oid->p, MBEDTLS_OID_TIME_STAMPING, oid->len) == 0)
187 *desc =
"Time Stamping";
189 else if (memcmp(oid->p, MBEDTLS_OID_OCSP_SIGNING, oid->len) == 0)
191 *desc =
"OCSP Signing";
208 const unsigned char *
key,
size_t keylen,
209 const unsigned char *pwd,
size_t pwdlen)
211#if MBEDTLS_VERSION_NUMBER >= 0x04000000
212 return mbedtls_pk_parse_key(ctx,
key, keylen, pwd, pwdlen);
214 return mbedtls_pk_parse_key(ctx,
key, keylen, pwd, pwdlen, mbedtls_ctr_drbg_random,
rand_ctx_get());
221#if MBEDTLS_VERSION_NUMBER >= 0x04000000
222 return mbedtls_pk_parse_keyfile(ctx, path, password);
224 return mbedtls_pk_parse_keyfile(ctx, path, password, mbedtls_ctr_drbg_random,
rand_ctx_get());
231#if MBEDTLS_VERSION_NUMBER >= 0x04000000
234#if MBEDTLS_VERSION_NUMBER >= 0x04010000
235 if (prv->MBEDTLS_PRIVATE(pub_raw_len) == 0)
237 mbedtls_pk_context *mut_prv = (mbedtls_pk_context *)prv;
238 ASSERT(
mbed_ok(psa_export_public_key(mut_prv->MBEDTLS_PRIVATE(priv_id),
239 mut_prv->MBEDTLS_PRIVATE(pub_raw),
240 sizeof(mut_prv->MBEDTLS_PRIVATE(pub_raw)),
241 &mut_prv->MBEDTLS_PRIVATE(pub_raw_len))));
244 return mbedtls_pk_check_pair(pub, prv);
246 return mbedtls_pk_check_pair(pub, prv, mbedtls_ctr_drbg_random,
rand_ctx_get());
Data Channel Cryptography backend interface using the TF-PSA-Crypto library part of Mbed TLS 4.
#define mbed_ok(errval)
Check errval and log on error.
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.