#include "polarssl/config.h"
#include "polarssl/ecdsa.h"
#include "polarssl/asn1write.h"
Go to the source code of this file.
Defines | |
#define | MAX_SIG_LEN ( 3 + 2 * ( 2 + POLARSSL_ECP_MAX_BYTES ) ) |
Functions | |
static int | derive_mpi (const ecp_group *grp, mpi *x, const unsigned char *buf, size_t blen) |
int | ecdsa_sign (ecp_group *grp, mpi *r, mpi *s, const mpi *d, const unsigned char *buf, size_t blen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Compute ECDSA signature of a previously hashed message. | |
int | ecdsa_verify (ecp_group *grp, const unsigned char *buf, size_t blen, const ecp_point *Q, const mpi *r, const mpi *s) |
Verify ECDSA signature of a previously hashed message. | |
int | ecdsa_write_signature (ecdsa_context *ctx, const unsigned char *hash, size_t hlen, unsigned char *sig, size_t *slen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Compute ECDSA signature and write it to buffer, serialized as defined in RFC 4492 page 20. | |
int | ecdsa_read_signature (ecdsa_context *ctx, const unsigned char *hash, size_t hlen, const unsigned char *sig, size_t slen) |
Read and verify an ECDSA signature. | |
int | ecdsa_genkey (ecdsa_context *ctx, ecp_group_id gid, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Generate an ECDSA keypair on the given curve. | |
int | ecdsa_from_keypair (ecdsa_context *ctx, const ecp_keypair *key) |
Set an ECDSA context from an EC key pair. | |
void | ecdsa_init (ecdsa_context *ctx) |
Initialize context. | |
void | ecdsa_free (ecdsa_context *ctx) |
Free context. | |
int | ecdsa_self_test (int verbose) |
Checkup routine. |
#define MAX_SIG_LEN ( 3 + 2 * ( 2 + POLARSSL_ECP_MAX_BYTES ) ) |
Definition at line 218 of file ecdsa.c.
Referenced by ecdsa_write_signature().
static int derive_mpi | ( | const ecp_group * | grp, | |
mpi * | x, | |||
const unsigned char * | buf, | |||
size_t | blen | |||
) | [static] |
Definition at line 43 of file ecdsa.c.
References mpi_read_binary(), and ecp_group::nbits.
Referenced by ecdsa_sign(), and ecdsa_verify().
void ecdsa_free | ( | ecdsa_context * | ctx | ) |
Free context.
ctx | Context to free |
Definition at line 328 of file ecdsa.c.
References ecdsa_context::d, ecp_group_free(), ecp_point_free(), ecdsa_context::grp, mpi_free(), ecdsa_context::Q, ecdsa_context::r, and ecdsa_context::s.
Referenced by ecdsa_free_wrap(), ecdsa_from_keypair(), eckey_sign_wrap(), eckey_verify_wrap(), and test_suite_ecdsa_write_read_random().
int ecdsa_from_keypair | ( | ecdsa_context * | ctx, | |
const ecp_keypair * | key | |||
) |
Set an ECDSA context from an EC key pair.
ctx | ECDSA context to set | |
key | EC key to use |
Definition at line 299 of file ecdsa.c.
References ecp_keypair::d, ecdsa_context::d, ecdsa_free(), ecp_copy(), ecp_group_copy(), ecp_keypair::grp, ecdsa_context::grp, mpi_copy(), ecp_keypair::Q, and ecdsa_context::Q.
Referenced by eckey_sign_wrap(), and eckey_verify_wrap().
int ecdsa_genkey | ( | ecdsa_context * | ctx, | |
ecp_group_id | gid, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Generate an ECDSA keypair on the given curve.
ctx | ECDSA context in which the keypair should be stored | |
gid | Group (elliptic curve) to use. One of the various POLARSSL_ECP_DP_XXX macros depending on configuration. | |
f_rng | RNG function | |
p_rng | RNG parameter |
Definition at line 289 of file ecdsa.c.
References ecdsa_context::d, ecp_gen_keypair(), ecp_use_known_dp(), ecdsa_context::grp, and ecdsa_context::Q.
Referenced by test_suite_ecdsa_write_read_random().
void ecdsa_init | ( | ecdsa_context * | ctx | ) |
Initialize context.
ctx | Context to initialize |
Definition at line 316 of file ecdsa.c.
References ecdsa_context::d, ecp_group_init(), ecp_point_init(), ecdsa_context::grp, mpi_init(), ecdsa_context::Q, ecdsa_context::r, and ecdsa_context::s.
Referenced by ecdsa_alloc_wrap(), eckey_sign_wrap(), eckey_verify_wrap(), and test_suite_ecdsa_write_read_random().
int ecdsa_read_signature | ( | ecdsa_context * | ctx, | |
const unsigned char * | hash, | |||
size_t | hlen, | |||
const unsigned char * | sig, | |||
size_t | slen | |||
) |
Read and verify an ECDSA signature.
ctx | ECDSA context | |
hash | Message hash | |
hlen | Size of hash | |
sig | Signature to read and verify | |
slen | Size of sig |
Definition at line 256 of file ecdsa.c.
References ASN1_CONSTRUCTED, asn1_get_mpi(), asn1_get_tag(), ASN1_SEQUENCE, ecdsa_verify(), ecdsa_context::grp, POLARSSL_ERR_ASN1_LENGTH_MISMATCH, POLARSSL_ERR_ECP_BAD_INPUT_DATA, ecdsa_context::Q, ecdsa_context::r, and ecdsa_context::s.
Referenced by ecdsa_verify_wrap(), and test_suite_ecdsa_write_read_random().
int ecdsa_self_test | ( | int | verbose | ) |
int ecdsa_sign | ( | ecp_group * | grp, | |
mpi * | r, | |||
mpi * | s, | |||
const mpi * | d, | |||
const unsigned char * | buf, | |||
size_t | blen, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Compute ECDSA signature of a previously hashed message.
grp | ECP group | |
r | First output integer | |
s | Second output integer | |
d | Private signing key | |
buf | Message hash | |
blen | Length of buf | |
f_rng | RNG function | |
p_rng | RNG parameter |
Definition at line 54 of file ecdsa.c.
References derive_mpi(), ecp_gen_keypair(), ecp_point_free(), ecp_point_init(), mpi_add_mpi(), MPI_CHK, mpi_cmp_int(), mpi_free(), mpi_init(), mpi_inv_mod(), mpi_mod_mpi(), mpi_mul_mpi(), ecp_group::N, POLARSSL_ERR_ECP_RANDOM_FAILED, R, and ecp_point::X.
Referenced by ecdsa_write_signature(), test_suite_ecdsa_prim_random(), and test_suite_ecdsa_prim_test_vectors().
int ecdsa_verify | ( | ecp_group * | grp, | |
const unsigned char * | buf, | |||
size_t | blen, | |||
const ecp_point * | Q, | |||
const mpi * | r, | |||
const mpi * | s | |||
) |
Verify ECDSA signature of a previously hashed message.
grp | ECP group | |
buf | Message hash | |
blen | Length of buf | |
Q | Public key to use for verification | |
r | First integer of the signature | |
s | Second integer of the signature |
Definition at line 121 of file ecdsa.c.
References derive_mpi(), ecp_add(), ecp_check_pubkey(), ecp_is_zero(), ecp_mul(), ecp_point_free(), ecp_point_init(), ecp_group::G, MPI_CHK, mpi_cmp_int(), mpi_cmp_mpi(), mpi_free(), mpi_init(), mpi_inv_mod(), mpi_mod_mpi(), mpi_mul_mpi(), ecp_group::N, P, POLARSSL_ERR_ECP_VERIFY_FAILED, R, and ecp_point::X.
Referenced by ecdsa_read_signature(), test_suite_ecdsa_prim_random(), and test_suite_ecdsa_prim_test_vectors().
int ecdsa_write_signature | ( | ecdsa_context * | ctx, | |
const unsigned char * | hash, | |||
size_t | hlen, | |||
unsigned char * | sig, | |||
size_t * | slen, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Compute ECDSA signature and write it to buffer, serialized as defined in RFC 4492 page 20.
(Not thread-safe to use same context in multiple threads)
ctx | ECDSA context | |
hash | Message hash | |
hlen | Length of hash | |
sig | Buffer that will hold the signature | |
slen | Length of the signature written | |
f_rng | RNG function | |
p_rng | RNG parameter |
Definition at line 223 of file ecdsa.c.
References ASN1_CHK_ADD, ASN1_CONSTRUCTED, ASN1_SEQUENCE, asn1_write_len(), asn1_write_mpi(), asn1_write_tag(), ecdsa_context::d, ecdsa_sign(), ecdsa_context::grp, MAX_SIG_LEN, ecdsa_context::r, and ecdsa_context::s.
Referenced by ecdsa_sign_wrap(), and test_suite_ecdsa_write_read_random().