47#if !defined(MBEDTLS_CONFIG_FILE)
50#include MBEDTLS_CONFIG_FILE
53#if defined(MBEDTLS_PK_C)
61#if defined(MBEDTLS_ECP_C)
65#if defined(MBEDTLS_ECDSA_C)
69#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
73#if defined(MBEDTLS_PLATFORM_C)
77#define mbedtls_calloc calloc
78#define mbedtls_free free
84#if defined(MBEDTLS_RSA_C)
91static size_t rsa_get_bitlen(
const void *
ctx )
98 const unsigned char *
hash,
size_t hash_len,
99 const unsigned char *sig,
size_t sig_len )
105#if SIZE_MAX > UINT_MAX
110 if( sig_len < rsa_len )
115 (
unsigned int) hash_len,
hash, sig ) ) != 0 )
123 if( sig_len > rsa_len )
130 const unsigned char *
hash,
size_t hash_len,
131 unsigned char *sig,
size_t *sig_len,
132 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng )
136#if SIZE_MAX > UINT_MAX
144 md_alg, (
unsigned int) hash_len,
hash, sig ) );
147static int rsa_decrypt_wrap(
void *
ctx,
148 const unsigned char *
input,
size_t ilen,
149 unsigned char *output,
size_t *olen,
size_t osize,
150 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng )
161static int rsa_encrypt_wrap(
void *
ctx,
162 const unsigned char *
input,
size_t ilen,
163 unsigned char *output,
size_t *olen,
size_t osize,
164 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng )
173 ilen,
input, output ) );
176static int rsa_check_pair_wrap(
const void *pub,
const void *prv )
182static void *rsa_alloc_wrap(
void )
192static void rsa_free_wrap(
void *
ctx )
201 items->name =
"rsa.N";
207 items->name =
"rsa.E";
218#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
227#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
235#if defined(MBEDTLS_ECP_C)
246static size_t eckey_get_bitlen(
const void *
ctx )
251#if defined(MBEDTLS_ECDSA_C)
254 const unsigned char *
hash,
size_t hash_len,
255 const unsigned char *sig,
size_t sig_len );
258 const unsigned char *
hash,
size_t hash_len,
259 unsigned char *sig,
size_t *sig_len,
260 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng );
263 const unsigned char *
hash,
size_t hash_len,
264 const unsigned char *sig,
size_t sig_len )
272 ret = ecdsa_verify_wrap( &ecdsa, md_alg,
hash, hash_len, sig, sig_len );
280 const unsigned char *
hash,
size_t hash_len,
281 unsigned char *sig,
size_t *sig_len,
282 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng )
290 ret = ecdsa_sign_wrap( &ecdsa, md_alg,
hash, hash_len, sig, sig_len,
298#if defined(MBEDTLS_ECP_RESTARTABLE)
301 const unsigned char *
hash,
size_t hash_len,
302 const unsigned char *sig,
size_t sig_len,
306 const unsigned char *
hash,
size_t hash_len,
307 unsigned char *sig,
size_t *sig_len,
308 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng,
323static void *eckey_rs_alloc(
void )
325 eckey_restart_ctx *rs_ctx;
332 mbedtls_ecdsa_restart_init( &rs_ctx->ecdsa_rs );
339static void eckey_rs_free(
void *
ctx )
341 eckey_restart_ctx *rs_ctx;
347 mbedtls_ecdsa_restart_free( &rs_ctx->ecdsa_rs );
354 const unsigned char *
hash,
size_t hash_len,
355 const unsigned char *sig,
size_t sig_len,
359 eckey_restart_ctx *rs = rs_ctx;
366 if( rs->ecdsa_ctx.grp.pbits == 0 )
370 md_alg,
hash, hash_len,
371 sig, sig_len, &rs->ecdsa_rs ) );
378 const unsigned char *
hash,
size_t hash_len,
379 unsigned char *sig,
size_t *sig_len,
380 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng,
384 eckey_restart_ctx *rs = rs_ctx;
391 if( rs->ecdsa_ctx.grp.pbits == 0 )
395 hash, hash_len, sig, sig_len,
396 f_rng, p_rng, &rs->ecdsa_rs ) );
404static int eckey_check_pair(
const void *pub,
const void *prv )
410static void *eckey_alloc_wrap(
void )
420static void eckey_free_wrap(
void *
ctx )
429 items->name =
"eckey.Q";
438#if defined(MBEDTLS_ECDSA_C)
441#if defined(MBEDTLS_ECP_RESTARTABLE)
442 eckey_verify_rs_wrap,
454#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
477#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
486#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
494#if defined(MBEDTLS_ECDSA_C)
501 const unsigned char *
hash,
size_t hash_len,
502 const unsigned char *sig,
size_t sig_len )
508 hash, hash_len, sig, sig_len );
517 const unsigned char *
hash,
size_t hash_len,
518 unsigned char *sig,
size_t *sig_len,
519 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng )
522 md_alg,
hash, hash_len, sig, sig_len, f_rng, p_rng ) );
525#if defined(MBEDTLS_ECP_RESTARTABLE)
527 const unsigned char *
hash,
size_t hash_len,
528 const unsigned char *sig,
size_t sig_len,
536 hash, hash_len, sig, sig_len,
546 const unsigned char *
hash,
size_t hash_len,
547 unsigned char *sig,
size_t *sig_len,
548 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng,
553 md_alg,
hash, hash_len, sig, sig_len, f_rng, p_rng,
559static void *ecdsa_alloc_wrap(
void )
569static void ecdsa_free_wrap(
void *
ctx )
575#if defined(MBEDTLS_ECP_RESTARTABLE)
576static void *ecdsa_rs_alloc(
void )
581 mbedtls_ecdsa_restart_init(
ctx );
586static void ecdsa_rs_free(
void *
ctx )
588 mbedtls_ecdsa_restart_free(
ctx );
600#if defined(MBEDTLS_ECP_RESTARTABLE)
601 ecdsa_verify_rs_wrap,
609#if defined(MBEDTLS_ECP_RESTARTABLE)
617#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
627static size_t rsa_alt_get_bitlen(
const void *
ctx )
635 const unsigned char *
hash,
size_t hash_len,
636 unsigned char *sig,
size_t *sig_len,
637 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng )
641#if SIZE_MAX > UINT_MAX
649 md_alg, (
unsigned int) hash_len,
hash, sig ) );
652static int rsa_alt_decrypt_wrap(
void *
ctx,
653 const unsigned char *
input,
size_t ilen,
654 unsigned char *output,
size_t *olen,
size_t osize,
655 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng )
669#if defined(MBEDTLS_RSA_C)
670static int rsa_alt_check_pair(
const void *pub,
const void *prv )
673 unsigned char hash[32];
677 if( rsa_alt_get_bitlen( prv ) != rsa_get_bitlen( pub ) )
684 sig, &sig_len,
NULL,
NULL ) ) != 0 )
690 hash,
sizeof(
hash ), sig, sig_len ) != 0 )
699static void *rsa_alt_alloc_wrap(
void )
709static void rsa_alt_free_wrap(
void *
ctx )
722#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
726 rsa_alt_decrypt_wrap,
728#if defined(MBEDTLS_RSA_C)
735#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
#define MBEDTLS_MPI_MAX_SIZE
#define MBEDTLS_MPI_CHK(f)
static void cleanup(void)
This file contains ECDSA definitions and functions.
int mbedtls_ecdsa_write_signature_restartable(mbedtls_ecdsa_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hlen, unsigned char *sig, size_t *slen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, mbedtls_ecdsa_restart_ctx *rs_ctx)
This function computes the ECDSA signature and writes it to a buffer, in a restartable way.
void mbedtls_ecdsa_free(mbedtls_ecdsa_context *ctx)
This function frees an ECDSA context.
int mbedtls_ecdsa_from_keypair(mbedtls_ecdsa_context *ctx, const mbedtls_ecp_keypair *key)
This function sets up an ECDSA context from an EC key pair.
int mbedtls_ecdsa_write_signature(mbedtls_ecdsa_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hlen, unsigned char *sig, size_t *slen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
This function computes the ECDSA signature and writes it to a buffer, serialized as defined in RFC-44...
int mbedtls_ecdsa_read_signature_restartable(mbedtls_ecdsa_context *ctx, const unsigned char *hash, size_t hlen, const unsigned char *sig, size_t slen, mbedtls_ecdsa_restart_ctx *rs_ctx)
This function reads and verifies an ECDSA signature, in a restartable way.
int mbedtls_ecdsa_read_signature(mbedtls_ecdsa_context *ctx, const unsigned char *hash, size_t hlen, const unsigned char *sig, size_t slen)
This function reads and verifies an ECDSA signature.
void mbedtls_ecdsa_init(mbedtls_ecdsa_context *ctx)
This function initializes an ECDSA context.
GLuint GLuint GLsizei GLenum type
GLenum GLenum GLenum input
mbedtls_md_type_t
Supported message digests.
mbedtls_pk_type_t
Public key types.
#define MBEDTLS_ERR_PK_BAD_INPUT_DATA
#define MBEDTLS_ERR_PK_SIG_LEN_MISMATCH
Public Key abstraction layer: wrapper functions.
const mbedtls_pk_info_t mbedtls_rsa_alt_info
const mbedtls_pk_info_t mbedtls_rsa_info
const mbedtls_pk_info_t mbedtls_ecdsa_info
const mbedtls_pk_info_t mbedtls_eckeydh_info
const mbedtls_pk_info_t mbedtls_eckey_info
This file provides an API for the RSA public-key cryptosystem.
#define MBEDTLS_RSA_PRIVATE
int mbedtls_rsa_pkcs1_encrypt(mbedtls_rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, size_t ilen, const unsigned char *input, unsigned char *output)
This function adds the message padding, then performs an RSA operation.
#define MBEDTLS_RSA_PUBLIC
int mbedtls_rsa_pkcs1_verify(mbedtls_rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, const unsigned char *sig)
This function performs a public RSA operation and checks the message digest.
void mbedtls_rsa_init(mbedtls_rsa_context *ctx, int padding, int hash_id)
This function initializes an RSA context.
#define MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE
int mbedtls_rsa_check_pub_priv(const mbedtls_rsa_context *pub, const mbedtls_rsa_context *prv)
This function checks a public-private RSA key pair.
#define MBEDTLS_ERR_RSA_VERIFY_FAILED
int mbedtls_rsa_pkcs1_sign(mbedtls_rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)
This function performs a private RSA operation to sign a message digest using PKCS#1.
size_t mbedtls_rsa_get_len(const mbedtls_rsa_context *ctx)
This function retrieves the length of RSA modulus in Bytes.
int mbedtls_rsa_pkcs1_decrypt(mbedtls_rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)
This function performs an RSA operation, then removes the message padding.
void mbedtls_rsa_free(mbedtls_rsa_context *ctx)
This function frees the components of an RSA key.
#define MBEDTLS_ERR_RSA_KEY_CHECK_FAILED
#define MBEDTLS_ERR_RSA_BAD_INPUT_DATA
Configuration options (set of defines)
This file provides an API for Elliptic Curves over GF(P) (ECP).
void mbedtls_ecp_keypair_free(mbedtls_ecp_keypair *key)
This function frees the components of a key pair.
#define MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH
int mbedtls_ecp_check_pub_priv(const mbedtls_ecp_keypair *pub, const mbedtls_ecp_keypair *prv)
This function checks that the keypair objects pub and prv have the same group and the same public poi...
void mbedtls_ecp_keypair_init(mbedtls_ecp_keypair *key)
This function initializes a key pair as an invalid one.
The ECP key-pair structure.
Item to send to the debug module.
mbedtls_pk_rsa_alt_key_len_func key_len_func
mbedtls_pk_rsa_alt_decrypt_func decrypt_func
mbedtls_pk_rsa_alt_sign_func sign_func
The RSA context structure.