13 #define MBEDTLS_PK_HAVE_PRIVATE_HEADER
15 #include "mbedtls/private_access.h"
22 #if defined(MBEDTLS_PSA_CRYPTO_CLIENT)
27 #define MBEDTLS_ERR_PK_TYPE_MISMATCH -0x3F00
29 #define MBEDTLS_ERR_PK_FILE_IO_ERROR -0x3E00
31 #define MBEDTLS_ERR_PK_KEY_INVALID_VERSION -0x3D80
33 #define MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -0x3D00
35 #define MBEDTLS_ERR_PK_UNKNOWN_PK_ALG -0x3C80
37 #define MBEDTLS_ERR_PK_PASSWORD_REQUIRED -0x3C00
39 #define MBEDTLS_ERR_PK_PASSWORD_MISMATCH -0x3B80
41 #define MBEDTLS_ERR_PK_INVALID_PUBKEY -0x3B00
43 #define MBEDTLS_ERR_PK_INVALID_ALG -0x3A80
45 #define MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE -0x3A00
47 #define MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE -0x3980
73 #define MBEDTLS_PK_SIGNATURE_MAX_SIZE 0
75 #if defined(MBEDTLS_RSA_C) && \
76 MBEDTLS_MPI_MAX_SIZE > MBEDTLS_PK_SIGNATURE_MAX_SIZE
78 #undef MBEDTLS_PK_SIGNATURE_MAX_SIZE
79 #define MBEDTLS_PK_SIGNATURE_MAX_SIZE MBEDTLS_MPI_MAX_SIZE
82 #if defined(MBEDTLS_ECDSA_C) && \
83 MBEDTLS_ECDSA_MAX_LEN > MBEDTLS_PK_SIGNATURE_MAX_SIZE
86 #undef MBEDTLS_PK_SIGNATURE_MAX_SIZE
87 #define MBEDTLS_PK_SIGNATURE_MAX_SIZE MBEDTLS_ECDSA_MAX_LEN
90 #if PSA_SIGNATURE_MAX_SIZE > MBEDTLS_PK_SIGNATURE_MAX_SIZE
93 #undef MBEDTLS_PK_SIGNATURE_MAX_SIZE
94 #define MBEDTLS_PK_SIGNATURE_MAX_SIZE PSA_SIGNATURE_MAX_SIZE
97 #if PSA_VENDOR_ECDSA_SIGNATURE_MAX_SIZE + 11 > MBEDTLS_PK_SIGNATURE_MAX_SIZE
104 #undef MBEDTLS_PK_SIGNATURE_MAX_SIZE
105 #define MBEDTLS_PK_SIGNATURE_MAX_SIZE (PSA_VENDOR_ECDSA_SIGNATURE_MAX_SIZE + 11)
111 #define MBEDTLS_PK_USE_PSA_EC_DATA
119 #define MBEDTLS_PK_USE_PSA_RSA_DATA
124 #define MBEDTLS_PK_MAX_EC_PUBKEY_RAW_LEN \
125 PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS)
127 #define MBEDTLS_PK_MAX_RSA_PUBKEY_RAW_LEN \
128 PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_RSA_MAX_KEY_BITS)
130 #define MBEDTLS_PK_MAX_PUBKEY_RAW_LEN \
131 (MBEDTLS_PK_MAX_EC_PUBKEY_RAW_LEN > MBEDTLS_PK_MAX_RSA_PUBKEY_RAW_LEN) ? \
132 MBEDTLS_PK_MAX_EC_PUBKEY_RAW_LEN : MBEDTLS_PK_MAX_RSA_PUBKEY_RAW_LEN
147 void *MBEDTLS_PRIVATE(pk_ctx);
159 #if defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY) || defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY)
165 size_t MBEDTLS_PRIVATE(pub_raw_len);
168 size_t MBEDTLS_PRIVATE(bits);
171 #if defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY)
176 #if defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY)
187 #if defined(MBEDTLS_ECP_RESTARTABLE)
193 void *MBEDTLS_PRIVATE(rs_ctx);
207 #if defined(PSA_WANT_ALG_DETERMINISTIC_ECDSA)
208 #define MBEDTLS_PK_ALG_ECDSA(hash_alg) PSA_ALG_DETERMINISTIC_ECDSA(hash_alg)
210 #define MBEDTLS_PK_ALG_ECDSA(hash_alg) PSA_ALG_ECDSA(hash_alg)
246 #if defined(MBEDTLS_ECP_RESTARTABLE)
345 #if defined(MBEDTLS_PSA_CRYPTO_CLIENT)
567 const unsigned char *hash,
size_t hash_len,
568 const unsigned char *sig,
size_t sig_len);
592 const unsigned char *hash,
size_t hash_len,
593 const unsigned char *sig,
size_t sig_len,
594 mbedtls_pk_restart_ctx *rs_ctx);
619 const unsigned char *hash,
size_t hash_len,
620 const unsigned char *sig,
size_t sig_len);
650 const unsigned char *hash,
size_t hash_len,
651 unsigned char *sig,
size_t sig_size,
size_t *sig_len);
689 const unsigned char *hash,
size_t hash_len,
690 unsigned char *sig,
size_t sig_size,
size_t *sig_len,
691 mbedtls_pk_restart_ctx *rs_ctx);
719 const unsigned char *hash,
size_t hash_len,
720 unsigned char *sig,
size_t sig_size,
size_t *sig_len);
740 #if defined(MBEDTLS_PK_PARSE_C)
769 const unsigned char *key,
size_t keylen,
770 const unsigned char *pwd,
size_t pwdlen);
793 const unsigned char *key,
size_t keylen);
795 #if defined(MBEDTLS_FS_IO)
816 const char *path,
const char *password);
836 #if defined(MBEDTLS_PK_WRITE_C)
867 #if defined(MBEDTLS_PEM_WRITE_C)
int mbedtls_pk_write_pubkey_pem(const mbedtls_pk_context *ctx, unsigned char *buf, size_t size)
Write a public key to a PEM string.
int mbedtls_pk_verify_ext(mbedtls_pk_sigalg_t type, mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, const unsigned char *sig, size_t sig_len)
Verify signature, selecting a specific algorithm.
void mbedtls_pk_init(mbedtls_pk_context *ctx)
Initialize a mbedtls_pk_context (as empty).
Platform Security Architecture cryptography module.
int mbedtls_pk_verify_restartable(mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, const unsigned char *sig, size_t sig_len, mbedtls_pk_restart_ctx *rs_ctx)
Restartable version of mbedtls_pk_verify()
size_t mbedtls_pk_get_bitlen(const mbedtls_pk_context *ctx)
Get the size in bits of the underlying key.
int mbedtls_pk_import_into_psa(const mbedtls_pk_context *pk, const psa_key_attributes_t *attributes, mbedtls_svc_key_id_t *key_id)
Import a key into the PSA key store.
int mbedtls_pk_sign_ext(mbedtls_pk_sigalg_t sig_type, mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, unsigned char *sig, size_t sig_size, size_t *sig_len)
Generate a signature, selecting a specific algorithm.
void mbedtls_pk_restart_init(mbedtls_pk_restart_ctx *ctx)
Initialize a restart context.
int mbedtls_pk_parse_public_key(mbedtls_pk_context *ctx, const unsigned char *key, size_t keylen)
Parse a public key in PEM or DER format.
int mbedtls_pk_write_key_der(const mbedtls_pk_context *ctx, unsigned char *buf, size_t size)
Write a private key to a PKCS#1 or SEC1 DER structure Note: data is written at the end of the buffer!...
int mbedtls_pk_parse_key(mbedtls_pk_context *ctx, const unsigned char *key, size_t keylen, const unsigned char *pwd, size_t pwdlen)
Parse a private key in PEM or DER format.
int mbedtls_pk_write_key_pem(const mbedtls_pk_context *ctx, unsigned char *buf, size_t size)
Write a private key to a PKCS#1 or SEC1 PEM string.
#define MBEDTLS_PK_MAX_PUBKEY_RAW_LEN
int mbedtls_pk_sign(mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, unsigned char *sig, size_t sig_size, size_t *sig_len)
Make signature.
uint32_t psa_algorithm_t
Encoding of a cryptographic algorithm.
int mbedtls_pk_wrap_psa(mbedtls_pk_context *ctx, const mbedtls_svc_key_id_t key)
Populate a PK context by wrapping a PSA key pair.
void mbedtls_pk_free(mbedtls_pk_context *ctx)
Empty a mbedtls_pk_context. After this, the context can be re-used as if it had been freshly initiali...
int mbedtls_pk_sign_restartable(mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, unsigned char *sig, size_t sig_size, size_t *sig_len, mbedtls_pk_restart_ctx *rs_ctx)
Restartable version of mbedtls_pk_sign()
Compatibility definitions for MbedTLS 3.x code built with MbedTLS 4.x or TF-PSA-Crypto 1...
uint32_t psa_key_usage_t
Encoding of permitted usage on a key.
int mbedtls_pk_can_do_psa(const mbedtls_pk_context *pk, psa_algorithm_t alg, psa_key_usage_t usage)
Tell if the key wrapped in the PK context is able to perform the usage operation using the alg algori...
int mbedtls_pk_parse_keyfile(mbedtls_pk_context *ctx, const char *path, const char *password)
Load and parse a private key.
struct mbedtls_pk_info_t mbedtls_pk_info_t
This file contains the generic functions for message-digest (hashing) and HMAC.
void mbedtls_pk_restart_free(mbedtls_pk_restart_ctx *ctx)
Free the components of a restart context.
int mbedtls_pk_verify(mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, const unsigned char *sig, size_t sig_len)
Verify signature.
int mbedtls_pk_get_psa_attributes(const mbedtls_pk_context *pk, psa_key_usage_t usage, psa_key_attributes_t *attributes)
Determine valid PSA attributes that can be used to import a key into PSA.
int mbedtls_pk_copy_public_from_psa(mbedtls_svc_key_id_t key_id, mbedtls_pk_context *pk)
Populate a PK context with the public key material of a PSA key.
int mbedtls_pk_copy_from_psa(mbedtls_svc_key_id_t key_id, mbedtls_pk_context *pk)
Populate a PK context with the key material from a PSA key.
Build-time configuration info.
Context for resuming operations.
struct mbedtls_pk_context mbedtls_pk_context
Public key container.
int mbedtls_pk_check_pair(const mbedtls_pk_context *pub, const mbedtls_pk_context *prv)
Check if a public-private pair of keys matches.
mbedtls_md_type_t
Supported message digests.
int mbedtls_pk_write_pubkey_der(const mbedtls_pk_context *ctx, unsigned char *buf, size_t size)
Write a public key to a SubjectPublicKeyInfo DER structure Note: data is written at the end of the bu...
int mbedtls_pk_parse_public_keyfile(mbedtls_pk_context *ctx, const char *path)
Load and parse a public key.