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_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_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 |
1.6.1