mbed TLS v2.7.6
|
Elliptic curves over GF(p) More...
#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... | |
Macros | |
#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 |
Functions | |
const mbedtls_ecp_curve_info * | mbedtls_ecp_curve_list (void) |
Get the list of supported curves in order of preferrence (full information) More... | |
const mbedtls_ecp_group_id * | mbedtls_ecp_grp_id_list (void) |
Get the list of supported curves in order of preferrence (grp_id only) More... | |
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. More... | |
const mbedtls_ecp_curve_info * | mbedtls_ecp_curve_info_from_tls_id (uint16_t tls_id) |
Get curve information from a TLS NamedCurve value. More... | |
const mbedtls_ecp_curve_info * | mbedtls_ecp_curve_info_from_name (const char *name) |
Get curve information from a human-readable name. More... | |
void | mbedtls_ecp_point_init (mbedtls_ecp_point *pt) |
Initialize a point (as zero) More... | |
void | mbedtls_ecp_group_init (mbedtls_ecp_group *grp) |
Initialize a group (to something meaningless) More... | |
void | mbedtls_ecp_keypair_init (mbedtls_ecp_keypair *key) |
Initialize a key pair (as an invalid one) More... | |
void | mbedtls_ecp_point_free (mbedtls_ecp_point *pt) |
Free the components of a point. More... | |
void | mbedtls_ecp_group_free (mbedtls_ecp_group *grp) |
Free the components of an ECP group. More... | |
void | mbedtls_ecp_keypair_free (mbedtls_ecp_keypair *key) |
Free the components of a key pair. More... | |
int | mbedtls_ecp_copy (mbedtls_ecp_point *P, const mbedtls_ecp_point *Q) |
Copy the contents of point Q into P. More... | |
int | mbedtls_ecp_group_copy (mbedtls_ecp_group *dst, const mbedtls_ecp_group *src) |
Copy the contents of a group object. More... | |
int | mbedtls_ecp_set_zero (mbedtls_ecp_point *pt) |
Set a point to zero. More... | |
int | mbedtls_ecp_is_zero (mbedtls_ecp_point *pt) |
Tell if a point is zero. More... | |
int | mbedtls_ecp_point_cmp (const mbedtls_ecp_point *P, const mbedtls_ecp_point *Q) |
Compare two points. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
int | mbedtls_ecp_group_load (mbedtls_ecp_group *grp, mbedtls_ecp_group_id id) |
Set a group using well-known domain parameters. More... | |
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. More... | |
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. More... | |
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) More... | |
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) More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
int | mbedtls_ecp_check_pub_priv (const mbedtls_ecp_keypair *pub, const mbedtls_ecp_keypair *prv) |
Check a public-private key pair. More... | |
int | mbedtls_ecp_self_test (int verbose) |
Checkup routine. More... | |
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_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)
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 |