30#ifndef MBEDTLS_COMPAT_H_
31#define MBEDTLS_COMPAT_H_
37#include <mbedtls/asn1.h>
38#include <mbedtls/pk.h>
40#if MBEDTLS_VERSION_NUMBER < 0x04000000
41#include <mbedtls/ctr_drbg.h>
44#include <mbedtls/oid.h>
47#ifdef HAVE_PSA_CRYPTO_H
48#include <psa/crypto.h>
54#if defined(HAVE_PSA_CRYPTO_H) && defined(MBEDTLS_PSA_CRYPTO_C)
55 if (psa_crypto_init() != PSA_SUCCESS)
57 msg(
M_FATAL,
"mbedtls: psa_crypto_init() failed");
64#if MBEDTLS_VERSION_NUMBER >= 0x04000000
69} mbedtls_ecp_curve_info;
72mbedtls_oid_get_attr_short_name(
const mbedtls_asn1_buf *oid,
const char **desc)
75 if (oid->tag != MBEDTLS_ASN1_OID || oid->len != strlen(MBEDTLS_OID_AT_CN))
81 if (memcmp(oid->p, MBEDTLS_OID_AT_CN, oid->len) == 0)
85 else if (memcmp(oid->p, MBEDTLS_OID_AT_SUR_NAME, oid->len) == 0)
89 else if (memcmp(oid->p, MBEDTLS_OID_AT_SERIAL_NUMBER, oid->len) == 0)
91 *desc =
"serialNumber";
93 else if (memcmp(oid->p, MBEDTLS_OID_AT_COUNTRY, oid->len) == 0)
97 else if (memcmp(oid->p, MBEDTLS_OID_AT_LOCALITY, oid->len) == 0)
101 else if (memcmp(oid->p, MBEDTLS_OID_AT_STATE, oid->len) == 0)
105 else if (memcmp(oid->p, MBEDTLS_OID_AT_ORGANIZATION, oid->len) == 0)
109 else if (memcmp(oid->p, MBEDTLS_OID_AT_ORG_UNIT, oid->len) == 0)
113 else if (memcmp(oid->p, MBEDTLS_OID_AT_TITLE, oid->len) == 0)
117 else if (memcmp(oid->p, MBEDTLS_OID_AT_POSTAL_ADDRESS, oid->len) == 0)
119 *desc =
"postalAddress";
121 else if (memcmp(oid->p, MBEDTLS_OID_AT_POSTAL_CODE, oid->len) == 0)
123 *desc =
"postalCode";
125 else if (memcmp(oid->p, MBEDTLS_OID_AT_GIVEN_NAME, oid->len) == 0)
129 else if (memcmp(oid->p, MBEDTLS_OID_AT_INITIALS, oid->len) == 0)
133 else if (memcmp(oid->p, MBEDTLS_OID_AT_GENERATION_QUALIFIER, oid->len) == 0)
135 *desc =
"generationQualifier";
137 else if (memcmp(oid->p, MBEDTLS_OID_AT_UNIQUE_IDENTIFIER, oid->len) == 0)
139 *desc =
"uniqueIdentifier";
141 else if (memcmp(oid->p, MBEDTLS_OID_AT_DN_QUALIFIER, oid->len) == 0)
143 *desc =
"dnQualifier";
145 else if (memcmp(oid->p, MBEDTLS_OID_AT_PSEUDONYM, oid->len) == 0)
158mbedtls_oid_get_extended_key_usage(
const mbedtls_asn1_buf *oid,
const char **desc)
161 if (oid->tag != MBEDTLS_ASN1_OID || oid->len != strlen(MBEDTLS_OID_SERVER_AUTH))
167 if (memcmp(oid->p, MBEDTLS_OID_SERVER_AUTH, oid->len) == 0)
169 *desc =
"TLS Web Server Authentication";
171 else if (memcmp(oid->p, MBEDTLS_OID_CLIENT_AUTH, oid->len) == 0)
173 *desc =
"TLS Web Client Authentication";
175 else if (memcmp(oid->p, MBEDTLS_OID_CODE_SIGNING, oid->len) == 0)
177 *desc =
"Code Signing";
179 else if (memcmp(oid->p, MBEDTLS_OID_EMAIL_PROTECTION, oid->len) == 0)
181 *desc =
"E-mail Protection";
183 else if (memcmp(oid->p, MBEDTLS_OID_TIME_STAMPING, oid->len) == 0)
185 *desc =
"Time Stamping";
187 else if (memcmp(oid->p, MBEDTLS_OID_OCSP_SIGNING, oid->len) == 0)
189 *desc =
"OCSP Signing";
206 const unsigned char *
key,
size_t keylen,
207 const unsigned char *pwd,
size_t pwdlen)
209#if MBEDTLS_VERSION_NUMBER >= 0x04000000
210 return mbedtls_pk_parse_key(ctx,
key, keylen, pwd, pwdlen);
212 return mbedtls_pk_parse_key(ctx,
key, keylen, pwd, pwdlen, mbedtls_ctr_drbg_random,
rand_ctx_get());
219#if MBEDTLS_VERSION_NUMBER >= 0x04000000
220 return mbedtls_pk_parse_keyfile(ctx, path, password);
222 return mbedtls_pk_parse_keyfile(ctx, path, password, mbedtls_ctr_drbg_random,
rand_ctx_get());
229#if MBEDTLS_VERSION_NUMBER >= 0x04000000
230 return mbedtls_pk_check_pair(pub, prv);
232 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.