This file contains ECDSA definitions and functions. More...
Go to the source code of this file.
Macros | |
#define | MBEDTLS_ECDSA_MAX_LEN ( 3 + 2 * ( 3 + MBEDTLS_ECP_MAX_BYTES ) ) |
Typedefs | |
typedef mbedtls_ecp_keypair | mbedtls_ecdsa_context |
The ECDSA context structure. More... | |
typedef void | mbedtls_ecdsa_restart_ctx |
Functions | |
int | mbedtls_ecdsa_sign (mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, const mbedtls_mpi *d, const unsigned char *buf, size_t blen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
This function computes the ECDSA signature of a previously-hashed message. More... | |
int | mbedtls_ecdsa_verify (mbedtls_ecp_group *grp, const unsigned char *buf, size_t blen, const mbedtls_ecp_point *Q, const mbedtls_mpi *r, const mbedtls_mpi *s) |
This function verifies the ECDSA signature of a previously-hashed message. More... | |
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-4492: Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS). More... | |
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. More... | |
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. More... | |
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. More... | |
int | mbedtls_ecdsa_genkey (mbedtls_ecdsa_context *ctx, mbedtls_ecp_group_id gid, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
This function generates an ECDSA keypair on the given curve. More... | |
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. More... | |
void | mbedtls_ecdsa_init (mbedtls_ecdsa_context *ctx) |
This function initializes an ECDSA context. More... | |
void | mbedtls_ecdsa_free (mbedtls_ecdsa_context *ctx) |
This function frees an ECDSA context. More... | |
This file contains ECDSA definitions and functions.
The Elliptic Curve Digital Signature Algorithm (ECDSA) is defined in Standards for Efficient Cryptography Group (SECG): SEC1 Elliptic Curve Cryptography. The use of ECDSA for TLS is defined in RFC-4492: Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS).
#define MBEDTLS_ECDSA_MAX_LEN ( 3 + 2 * ( 3 + MBEDTLS_ECP_MAX_BYTES ) ) |
The maximal size of an ECDSA signature in Bytes.
The ECDSA context structure.
typedef void mbedtls_ecdsa_restart_ctx |
void mbedtls_ecdsa_free | ( | mbedtls_ecdsa_context * | ctx | ) |
This function frees an ECDSA context.
ctx | The ECDSA context to free. This may be NULL , in which case this function does nothing. If it is not NULL , it must be initialized. |
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.
ctx | The ECDSA context to setup. This must be initialized. |
key | The EC key to use. This must be initialized and hold a private-public key pair or a public key. In the former case, the ECDSA context may be used for signature creation and verification after this call. In the latter case, it may be used for signature verification. |
0
on success. MBEDTLS_ERR_ECP_XXX
code on failure. int mbedtls_ecdsa_genkey | ( | mbedtls_ecdsa_context * | ctx, |
mbedtls_ecp_group_id | gid, | ||
int(*)(void *, unsigned char *, size_t) | f_rng, | ||
void * | p_rng | ||
) |
This function generates an ECDSA keypair on the given curve.
ctx | The ECDSA context to store the keypair in. This must be initialized. |
gid | The elliptic curve to use. One of the various MBEDTLS_ECP_DP_XXX macros depending on configuration. |
f_rng | The RNG function to use. This must not be NULL . |
p_rng | The RNG context to be passed to f_rng . This may be NULL if f_rng doesn't need a context argument. |
0
on success. MBEDTLS_ERR_ECP_XXX
code on failure. void mbedtls_ecdsa_init | ( | mbedtls_ecdsa_context * | ctx | ) |
This function initializes an ECDSA context.
ctx | The ECDSA context to initialize. This must not be NULL . |
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.
ctx | The ECDSA context to use. This must be initialized and have a group and public key bound to it. |
hash | The message hash that was signed. This must be a readable buffer of length size Bytes. |
hlen | The size of the hash hash . |
sig | The signature to read and verify. This must be a readable buffer of length slen Bytes. |
slen | The size of sig in Bytes. |
0
on success. sig
, but its length is less than siglen
. MBEDTLS_ERR_ECP_XXX
or MBEDTLS_ERR_MPI_XXX
error code on failure for any other reason. 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.
mbedtls_ecdsa_read_signature()
mbedtls_ecdsa_read_signature()
but it can return early and restart according to the limit set with mbedtls_ecp_set_max_ops()
to reduce blocking.ctx | The ECDSA context to use. This must be initialized and have a group and public key bound to it. |
hash | The message hash that was signed. This must be a readable buffer of length size Bytes. |
hlen | The size of the hash hash . |
sig | The signature to read and verify. This must be a readable buffer of length slen Bytes. |
slen | The size of sig in Bytes. |
rs_ctx | The restart context to use. This may be NULL to disable restarting. If it is not NULL , it must point to an initialized restart context. |
0
on success. sig
, but its length is less than siglen
. mbedtls_ecp_set_max_ops()
. MBEDTLS_ERR_ECP_XXX
or MBEDTLS_ERR_MPI_XXX
error code on failure for any other reason. int mbedtls_ecdsa_sign | ( | mbedtls_ecp_group * | grp, |
mbedtls_mpi * | r, | ||
mbedtls_mpi * | s, | ||
const mbedtls_mpi * | d, | ||
const unsigned char * | buf, | ||
size_t | blen, | ||
int(*)(void *, unsigned char *, size_t) | f_rng, | ||
void * | p_rng | ||
) |
This function computes the ECDSA signature of a previously-hashed message.
grp | The context for the elliptic curve to use. This must be initialized and have group parameters set, for example through mbedtls_ecp_group_load(). |
r | The MPI context in which to store the first part the signature. This must be initialized. |
s | The MPI context in which to store the second part the signature. This must be initialized. |
d | The private signing key. This must be initialized. |
buf | The content to be signed. This is usually the hash of the original data to be signed. This must be a readable buffer of length blen Bytes. It may be NULL if blen is zero. |
blen | The length of buf in Bytes. |
f_rng | The RNG function. This must not be NULL . |
p_rng | The RNG context to be passed to f_rng . This may be NULL if f_rng doesn't need a context parameter. |
0
on success. MBEDTLS_ERR_ECP_XXX
or MBEDTLS_MPI_XXX
error code on failure. int mbedtls_ecdsa_verify | ( | mbedtls_ecp_group * | grp, |
const unsigned char * | buf, | ||
size_t | blen, | ||
const mbedtls_ecp_point * | Q, | ||
const mbedtls_mpi * | r, | ||
const mbedtls_mpi * | s | ||
) |
This function verifies the ECDSA signature of a previously-hashed message.
grp | The ECP group to use. This must be initialized and have group parameters set, for example through mbedtls_ecp_group_load(). |
buf | The hashed content that was signed. This must be a readable buffer of length blen Bytes. It may be NULL if blen is zero. |
blen | The length of buf in Bytes. |
Q | The public key to use for verification. This must be initialized and setup. |
r | The first integer of the signature. This must be initialized. |
s | The second integer of the signature. This must be initialized. |
0
on success. MBEDTLS_ERR_ECP_XXX
or MBEDTLS_MPI_XXX
error code on failure for any other reason. 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(*)(void *, unsigned char *, size_t) | f_rng, | ||
void * | p_rng | ||
) |
This function computes the ECDSA signature and writes it to a buffer, serialized as defined in RFC-4492: Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS).
ctx | The ECDSA context to use. This must be initialized and have a group and private key bound to it, for example via mbedtls_ecdsa_genkey() or mbedtls_ecdsa_from_keypair(). |
md_alg | The message digest that was used to hash the message. |
hash | The message hash to be signed. This must be a readable buffer of length blen Bytes. |
hlen | The length of the hash hash in Bytes. |
sig | The buffer to which to write the signature. This must be a writable buffer of length at least twice as large as the size of the curve used, plus 9. For example, 73 Bytes if a 256-bit curve is used. A buffer length of MBEDTLS_ECDSA_MAX_LEN is always safe. |
slen | The address at which to store the actual length of the signature written. Must not be NULL . |
f_rng | The RNG function. This must not be NULL if #MBEDTLS_ECDSA_DETERMINISTIC is unset. Otherwise, it is unused and may be set to NULL . |
p_rng | The RNG context to be passed to f_rng . This may be NULL if f_rng is NULL or doesn't use a context. |
0
on success. MBEDTLS_ERR_ECP_XXX
, MBEDTLS_ERR_MPI_XXX
or MBEDTLS_ERR_ASN1_XXX
error code on failure. 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(*)(void *, unsigned char *, size_t) | f_rng, | ||
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.
mbedtls_ecdsa_write_signature()
mbedtls_ecdsa_write_signature()
but it can return early and restart according to the limit set with mbedtls_ecp_set_max_ops()
to reduce blocking.ctx | The ECDSA context to use. This must be initialized and have a group and private key bound to it, for example via mbedtls_ecdsa_genkey() or mbedtls_ecdsa_from_keypair(). |
md_alg | The message digest that was used to hash the message. |
hash | The message hash to be signed. This must be a readable buffer of length blen Bytes. |
hlen | The length of the hash hash in Bytes. |
sig | The buffer to which to write the signature. This must be a writable buffer of length at least twice as large as the size of the curve used, plus 9. For example, 73 Bytes if a 256-bit curve is used. A buffer length of MBEDTLS_ECDSA_MAX_LEN is always safe. |
slen | The address at which to store the actual length of the signature written. Must not be NULL . |
f_rng | The RNG function. This must not be NULL if #MBEDTLS_ECDSA_DETERMINISTIC is unset. Otherwise, it is unused and may be set to NULL . |
p_rng | The RNG context to be passed to f_rng . This may be NULL if f_rng is NULL or doesn't use a context. |
rs_ctx | The restart context to use. This may be NULL to disable restarting. If it is not NULL , it must point to an initialized restart context. |
0
on success. mbedtls_ecp_set_max_ops()
. MBEDTLS_ERR_ECP_XXX
, MBEDTLS_ERR_MPI_XXX
or MBEDTLS_ERR_ASN1_XXX
error code on failure.