Elliptic curves over GF(p). More...
#include "config.h"
#include "bignum.h"
Go to the source code of this file.
Data Structures | |
struct | mbedtls_ecp_curve_info |
struct | mbedtls_ecp_point |
ECP point structure (jacobian coordinates). More... | |
struct | mbedtls_ecp_group |
ECP group structure. More... | |
struct | mbedtls_ecp_keypair |
ECP key pair structure. More... | |
Defines | |
#define | MBEDTLS_ERR_ECP_BAD_INPUT_DATA -0x4F80 |
#define | MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL -0x4F00 |
#define | MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE -0x4E80 |
#define | MBEDTLS_ERR_ECP_VERIFY_FAILED -0x4E00 |
#define | MBEDTLS_ERR_ECP_ALLOC_FAILED -0x4D80 |
#define | MBEDTLS_ERR_ECP_RANDOM_FAILED -0x4D00 |
#define | MBEDTLS_ERR_ECP_INVALID_KEY -0x4C80 |
#define | MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH -0x4C00 |
#define | MBEDTLS_ERR_ECP_HW_ACCEL_FAILED -0x4B80 |
#define | MBEDTLS_ECP_DP_MAX 12 |
#define | MBEDTLS_ECP_PF_UNCOMPRESSED 0 |
#define | MBEDTLS_ECP_PF_COMPRESSED 1 |
#define | MBEDTLS_ECP_TLS_NAMED_CURVE 3 |
SECTION: Module settings | |
The configuration options you can set for this module are in this section. Either change them in config.h or define them on the compiler command line. | |
#define | MBEDTLS_ECP_MAX_BITS 521 |
#define | MBEDTLS_ECP_MAX_BYTES ( ( MBEDTLS_ECP_MAX_BITS + 7 ) / 8 ) |
#define | MBEDTLS_ECP_MAX_PT_LEN ( 2 * MBEDTLS_ECP_MAX_BYTES + 1 ) |
#define | MBEDTLS_ECP_WINDOW_SIZE 6 |
#define | MBEDTLS_ECP_FIXED_POINT_OPTIM 1 |
Enumerations | |
enum | mbedtls_ecp_group_id { MBEDTLS_ECP_DP_NONE = 0, MBEDTLS_ECP_DP_SECP192R1, MBEDTLS_ECP_DP_SECP224R1, MBEDTLS_ECP_DP_SECP256R1, MBEDTLS_ECP_DP_SECP384R1, MBEDTLS_ECP_DP_SECP521R1, MBEDTLS_ECP_DP_BP256R1, MBEDTLS_ECP_DP_BP384R1, MBEDTLS_ECP_DP_BP512R1, MBEDTLS_ECP_DP_CURVE25519, MBEDTLS_ECP_DP_SECP192K1, MBEDTLS_ECP_DP_SECP224K1, MBEDTLS_ECP_DP_SECP256K1 } |
Functions | |
const mbedtls_ecp_curve_info * | mbedtls_ecp_curve_list (void) |
Get the list of supported curves in order of preferrence (full information). | |
const mbedtls_ecp_group_id * | mbedtls_ecp_grp_id_list (void) |
Get the list of supported curves in order of preferrence (grp_id only). | |
const mbedtls_ecp_curve_info * | mbedtls_ecp_curve_info_from_grp_id (mbedtls_ecp_group_id grp_id) |
Get curve information from an internal group identifier. | |
const mbedtls_ecp_curve_info * | mbedtls_ecp_curve_info_from_tls_id (uint16_t tls_id) |
Get curve information from a TLS NamedCurve value. | |
const mbedtls_ecp_curve_info * | mbedtls_ecp_curve_info_from_name (const char *name) |
Get curve information from a human-readable name. | |
void | mbedtls_ecp_point_init (mbedtls_ecp_point *pt) |
Initialize a point (as zero). | |
void | mbedtls_ecp_group_init (mbedtls_ecp_group *grp) |
Initialize a group (to something meaningless). | |
void | mbedtls_ecp_keypair_init (mbedtls_ecp_keypair *key) |
Initialize a key pair (as an invalid one). | |
void | mbedtls_ecp_point_free (mbedtls_ecp_point *pt) |
Free the components of a point. | |
void | mbedtls_ecp_group_free (mbedtls_ecp_group *grp) |
Free the components of an ECP group. | |
void | mbedtls_ecp_keypair_free (mbedtls_ecp_keypair *key) |
Free the components of a key pair. | |
int | mbedtls_ecp_copy (mbedtls_ecp_point *P, const mbedtls_ecp_point *Q) |
Copy the contents of point Q into P. | |
int | mbedtls_ecp_group_copy (mbedtls_ecp_group *dst, const mbedtls_ecp_group *src) |
Copy the contents of a group object. | |
int | mbedtls_ecp_set_zero (mbedtls_ecp_point *pt) |
Set a point to zero. | |
int | mbedtls_ecp_is_zero (mbedtls_ecp_point *pt) |
Tell if a point is zero. | |
int | mbedtls_ecp_point_cmp (const mbedtls_ecp_point *P, const mbedtls_ecp_point *Q) |
Compare two points. | |
int | mbedtls_ecp_point_read_string (mbedtls_ecp_point *P, int radix, const char *x, const char *y) |
Import a non-zero point from two ASCII strings. | |
int | mbedtls_ecp_point_write_binary (const mbedtls_ecp_group *grp, const mbedtls_ecp_point *P, int format, size_t *olen, unsigned char *buf, size_t buflen) |
Export a point into unsigned binary data. | |
int | mbedtls_ecp_point_read_binary (const mbedtls_ecp_group *grp, mbedtls_ecp_point *P, const unsigned char *buf, size_t ilen) |
Import a point from unsigned binary data. | |
int | mbedtls_ecp_tls_read_point (const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, const unsigned char **buf, size_t len) |
Import a point from a TLS ECPoint record. | |
int | mbedtls_ecp_tls_write_point (const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt, int format, size_t *olen, unsigned char *buf, size_t blen) |
Export a point as a TLS ECPoint record. | |
int | mbedtls_ecp_group_load (mbedtls_ecp_group *grp, mbedtls_ecp_group_id id) |
Set a group using well-known domain parameters. | |
int | mbedtls_ecp_tls_read_group (mbedtls_ecp_group *grp, const unsigned char **buf, size_t len) |
Set a group from a TLS ECParameters record. | |
int | mbedtls_ecp_tls_write_group (const mbedtls_ecp_group *grp, size_t *olen, unsigned char *buf, size_t blen) |
Write the TLS ECParameters record for a group. | |
int | mbedtls_ecp_mul (mbedtls_ecp_group *grp, mbedtls_ecp_point *R, const mbedtls_mpi *m, const mbedtls_ecp_point *P, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Multiplication by an integer: R = m * P (Not thread-safe to use same group in multiple threads). | |
int | mbedtls_ecp_muladd (mbedtls_ecp_group *grp, mbedtls_ecp_point *R, const mbedtls_mpi *m, const mbedtls_ecp_point *P, const mbedtls_mpi *n, const mbedtls_ecp_point *Q) |
Multiplication and addition of two points by integers: R = m * P + n * Q (Not thread-safe to use same group in multiple threads). | |
int | mbedtls_ecp_check_pubkey (const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt) |
Check that a point is a valid public key on this curve. | |
int | mbedtls_ecp_check_privkey (const mbedtls_ecp_group *grp, const mbedtls_mpi *d) |
Check that an mbedtls_mpi is a valid private key for this curve. | |
int | mbedtls_ecp_gen_privkey (const mbedtls_ecp_group *grp, mbedtls_mpi *d, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Generate a private key. | |
int | mbedtls_ecp_gen_keypair_base (mbedtls_ecp_group *grp, const mbedtls_ecp_point *G, mbedtls_mpi *d, mbedtls_ecp_point *Q, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Generate a keypair with configurable base point. | |
int | mbedtls_ecp_gen_keypair (mbedtls_ecp_group *grp, mbedtls_mpi *d, mbedtls_ecp_point *Q, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Generate a keypair. | |
int | mbedtls_ecp_gen_key (mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Generate a keypair. | |
int | mbedtls_ecp_check_pub_priv (const mbedtls_ecp_keypair *pub, const mbedtls_ecp_keypair *prv) |
Check a public-private key pair. | |
int | mbedtls_ecp_self_test (int verbose) |
Checkup routine. |
Elliptic curves over GF(p).
Definition in file ecp.h.
#define MBEDTLS_ECP_DP_MAX 12 |
#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1 |
#define MBEDTLS_ECP_MAX_BITS 521 |
#define MBEDTLS_ECP_MAX_BYTES ( ( MBEDTLS_ECP_MAX_BITS + 7 ) / 8 ) |
#define MBEDTLS_ECP_MAX_PT_LEN ( 2 * MBEDTLS_ECP_MAX_BYTES + 1 ) |
#define MBEDTLS_ECP_PF_UNCOMPRESSED 0 |
#define MBEDTLS_ECP_TLS_NAMED_CURVE 3 |
#define MBEDTLS_ERR_ECP_ALLOC_FAILED -0x4D80 |
#define MBEDTLS_ERR_ECP_BAD_INPUT_DATA -0x4F80 |
#define MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL -0x4F00 |
#define MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE -0x4E80 |
#define MBEDTLS_ERR_ECP_HW_ACCEL_FAILED -0x4B80 |
#define MBEDTLS_ERR_ECP_INVALID_KEY -0x4C80 |
#define MBEDTLS_ERR_ECP_RANDOM_FAILED -0x4D00 |
#define MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH -0x4C00 |
#define MBEDTLS_ERR_ECP_VERIFY_FAILED -0x4E00 |
enum mbedtls_ecp_group_id |
Domain parameters (curve, subgroup and generator) identifiers.
Only curves over prime fields are supported.
int mbedtls_ecp_check_privkey | ( | const mbedtls_ecp_group * | grp, | |
const mbedtls_mpi * | d | |||
) |
Check that an mbedtls_mpi is a valid private key for this curve.
grp | Group used | |
d | Integer to check |
int mbedtls_ecp_check_pub_priv | ( | const mbedtls_ecp_keypair * | pub, | |
const mbedtls_ecp_keypair * | prv | |||
) |
Check a public-private key pair.
pub | Keypair structure holding a public key | |
prv | Keypair structure holding a private (plus public) key |
int mbedtls_ecp_check_pubkey | ( | const mbedtls_ecp_group * | grp, | |
const mbedtls_ecp_point * | pt | |||
) |
Check that a point is a valid public key on this curve.
grp | Curve/group the point should belong to | |
pt | Point to check |
int mbedtls_ecp_copy | ( | mbedtls_ecp_point * | P, | |
const mbedtls_ecp_point * | Q | |||
) |
Copy the contents of point Q into P.
P | Destination point | |
Q | Source point |
const mbedtls_ecp_curve_info* mbedtls_ecp_curve_info_from_grp_id | ( | mbedtls_ecp_group_id | grp_id | ) |
Get curve information from an internal group identifier.
grp_id | A MBEDTLS_ECP_DP_XXX value |
const mbedtls_ecp_curve_info* mbedtls_ecp_curve_info_from_name | ( | const char * | name | ) |
Get curve information from a human-readable name.
name | The name |
const mbedtls_ecp_curve_info* mbedtls_ecp_curve_info_from_tls_id | ( | uint16_t | tls_id | ) |
Get curve information from a TLS NamedCurve value.
tls_id | A MBEDTLS_ECP_DP_XXX value |
const mbedtls_ecp_curve_info* mbedtls_ecp_curve_list | ( | void | ) |
Get the list of supported curves in order of preferrence (full information).
int mbedtls_ecp_gen_key | ( | mbedtls_ecp_group_id | grp_id, | |
mbedtls_ecp_keypair * | key, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Generate a keypair.
grp_id | ECP group identifier | |
key | Destination keypair | |
f_rng | RNG function | |
p_rng | RNG parameter |
int mbedtls_ecp_gen_keypair | ( | mbedtls_ecp_group * | grp, | |
mbedtls_mpi * | d, | |||
mbedtls_ecp_point * | Q, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Generate a keypair.
grp | ECP group | |
d | Destination MPI (secret part) | |
Q | Destination point (public part) | |
f_rng | RNG function | |
p_rng | RNG parameter |
int mbedtls_ecp_gen_keypair_base | ( | mbedtls_ecp_group * | grp, | |
const mbedtls_ecp_point * | G, | |||
mbedtls_mpi * | d, | |||
mbedtls_ecp_point * | Q, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Generate a keypair with configurable base point.
grp | ECP group | |
G | Chosen base point | |
d | Destination MPI (secret part) | |
Q | Destination point (public part) | |
f_rng | RNG function | |
p_rng | RNG parameter |
int mbedtls_ecp_gen_privkey | ( | const mbedtls_ecp_group * | grp, | |
mbedtls_mpi * | d, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Generate a private key.
grp | ECP group | |
d | Destination MPI (secret part) | |
f_rng | RNG function | |
p_rng | RNG parameter |
int mbedtls_ecp_group_copy | ( | mbedtls_ecp_group * | dst, | |
const mbedtls_ecp_group * | src | |||
) |
Copy the contents of a group object.
dst | Destination group | |
src | Source group |
void mbedtls_ecp_group_free | ( | mbedtls_ecp_group * | grp | ) |
Free the components of an ECP group.
void mbedtls_ecp_group_init | ( | mbedtls_ecp_group * | grp | ) |
Initialize a group (to something meaningless).
int mbedtls_ecp_group_load | ( | mbedtls_ecp_group * | grp, | |
mbedtls_ecp_group_id | id | |||
) |
Set a group using well-known domain parameters.
grp | Destination group | |
id | Index in the list of well-known domain parameters |
const mbedtls_ecp_group_id* mbedtls_ecp_grp_id_list | ( | void | ) |
Get the list of supported curves in order of preferrence (grp_id only).
int mbedtls_ecp_is_zero | ( | mbedtls_ecp_point * | pt | ) |
Tell if a point is zero.
pt | Point to test |
void mbedtls_ecp_keypair_free | ( | mbedtls_ecp_keypair * | key | ) |
Free the components of a key pair.
void mbedtls_ecp_keypair_init | ( | mbedtls_ecp_keypair * | key | ) |
Initialize a key pair (as an invalid one).
int mbedtls_ecp_mul | ( | mbedtls_ecp_group * | grp, | |
mbedtls_ecp_point * | R, | |||
const mbedtls_mpi * | m, | |||
const mbedtls_ecp_point * | P, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Multiplication by an integer: R = m * P (Not thread-safe to use same group in multiple threads).
f_rng
is not NULL, it is used to randomize intermediate results to prevent potential timing attacks targeting these results. We recommend always providing a non-NULL f_rng
. The overhead is negligible. Note: unless MBEDTLS_ECP_NO_INTERNAL_RNG is defined, when f_rng
is NULL, an internal RNG (seeded from the value of m
) will be used instead.grp | ECP group | |
R | Destination point | |
m | Integer by which to multiply | |
P | Point to multiply | |
f_rng | RNG function (see notes) | |
p_rng | RNG parameter |
int mbedtls_ecp_muladd | ( | mbedtls_ecp_group * | grp, | |
mbedtls_ecp_point * | R, | |||
const mbedtls_mpi * | m, | |||
const mbedtls_ecp_point * | P, | |||
const mbedtls_mpi * | n, | |||
const mbedtls_ecp_point * | Q | |||
) |
Multiplication and addition of two points by integers: R = m * P + n * Q (Not thread-safe to use same group in multiple threads).
grp | ECP group | |
R | Destination point | |
m | Integer by which to multiply P | |
P | Point to multiply by m | |
n | Integer by which to multiply Q | |
Q | Point to be multiplied by n |
int mbedtls_ecp_point_cmp | ( | const mbedtls_ecp_point * | P, | |
const mbedtls_ecp_point * | Q | |||
) |
Compare two points.
P | First point to compare | |
Q | Second point to compare |
void mbedtls_ecp_point_free | ( | mbedtls_ecp_point * | pt | ) |
Free the components of a point.
void mbedtls_ecp_point_init | ( | mbedtls_ecp_point * | pt | ) |
Initialize a point (as zero).
int mbedtls_ecp_point_read_binary | ( | const mbedtls_ecp_group * | grp, | |
mbedtls_ecp_point * | P, | |||
const unsigned char * | buf, | |||
size_t | ilen | |||
) |
Import a point from unsigned binary data.
grp | Group to which the point should belong | |
P | Point to import | |
buf | Input buffer | |
ilen | Actual length of input |
int mbedtls_ecp_point_read_string | ( | mbedtls_ecp_point * | P, | |
int | radix, | |||
const char * | x, | |||
const char * | y | |||
) |
Import a non-zero point from two ASCII strings.
P | Destination point | |
radix | Input numeric base | |
x | First affine coordinate as a null-terminated string | |
y | Second affine coordinate as a null-terminated string |
int mbedtls_ecp_point_write_binary | ( | const mbedtls_ecp_group * | grp, | |
const mbedtls_ecp_point * | P, | |||
int | format, | |||
size_t * | olen, | |||
unsigned char * | buf, | |||
size_t | buflen | |||
) |
Export a point into unsigned binary data.
grp | Group to which the point should belong | |
P | Point to export | |
format | Point format, should be a MBEDTLS_ECP_PF_XXX macro | |
olen | Length of the actual output | |
buf | Output buffer | |
buflen | Length of the output buffer |
int mbedtls_ecp_self_test | ( | int | verbose | ) |
Checkup routine.
int mbedtls_ecp_set_zero | ( | mbedtls_ecp_point * | pt | ) |
Set a point to zero.
pt | Destination point |
int mbedtls_ecp_tls_read_group | ( | mbedtls_ecp_group * | grp, | |
const unsigned char ** | buf, | |||
size_t | len | |||
) |
Set a group from a TLS ECParameters record.
grp | Destination group | |
buf | &(Start of input buffer) | |
len | Buffer length |
int mbedtls_ecp_tls_read_point | ( | const mbedtls_ecp_group * | grp, | |
mbedtls_ecp_point * | pt, | |||
const unsigned char ** | buf, | |||
size_t | len | |||
) |
Import a point from a TLS ECPoint record.
grp | ECP group used | |
pt | Destination point | |
buf | $(Start of input buffer) | |
len | Buffer length |
int mbedtls_ecp_tls_write_group | ( | const mbedtls_ecp_group * | grp, | |
size_t * | olen, | |||
unsigned char * | buf, | |||
size_t | blen | |||
) |
Write the TLS ECParameters record for a group.
grp | ECP group used | |
olen | Number of bytes actually written | |
buf | Buffer to write to | |
blen | Buffer length |
int mbedtls_ecp_tls_write_point | ( | const mbedtls_ecp_group * | grp, | |
const mbedtls_ecp_point * | pt, | |||
int | format, | |||
size_t * | olen, | |||
unsigned char * | buf, | |||
size_t | blen | |||
) |
Export a point as a TLS ECPoint record.
grp | ECP group used | |
pt | Point to export | |
format | Export format | |
olen | length of data written | |
buf | Buffer to write to | |
blen | Buffer length |