mbed TLS v2.2.0
|
Elliptic curves over GF(p)
Copyright (C) 2006-2015, ARM Limited, All Rights Reserved SPDX-License-Identifier: Apache-2.0
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
This file is part of mbed TLS (https://tls.mbed.org)
Definition in file ecp.h.
#include "bignum.h"
Go to the source code of this file.
Data Structures | |
struct | mbedtls_ecp_curve_info |
Curve information for use by other modules. More... | |
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 |
Bad input parameters to function. More... | |
#define | MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL -0x4F00 |
The buffer is too small to write to. More... | |
#define | MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE -0x4E80 |
Requested curve not available. More... | |
#define | MBEDTLS_ERR_ECP_VERIFY_FAILED -0x4E00 |
The signature is not valid. More... | |
#define | MBEDTLS_ERR_ECP_ALLOC_FAILED -0x4D80 |
Memory allocation failed. More... | |
#define | MBEDTLS_ERR_ECP_RANDOM_FAILED -0x4D00 |
Generation of random value, such as (ephemeral) key, failed. More... | |
#define | MBEDTLS_ERR_ECP_INVALID_KEY -0x4C80 |
Invalid private or public key. More... | |
#define | MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH -0x4C00 |
Signature is valid but shorter than the user-supplied length. More... | |
#define | MBEDTLS_ECP_DP_MAX 12 |
Number of supported curves (plus one for NONE). More... | |
#define | MBEDTLS_ECP_PF_UNCOMPRESSED 0 |
Uncompressed point format. More... | |
#define | MBEDTLS_ECP_PF_COMPRESSED 1 |
Compressed point format. More... | |
#define | MBEDTLS_ECP_TLS_NAMED_CURVE 3 |
ECCurveType's named_curve. More... | |
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_BYTES ( ( MBEDTLS_ECP_MAX_BITS + 7 ) / 8 ) |
#define | MBEDTLS_ECP_MAX_PT_LEN ( 2 * MBEDTLS_ECP_MAX_BYTES + 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 } |
Domain parameters (curve, subgroup and generator) identifiers. More... | |
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 index) |
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... | |
#define MBEDTLS_ECP_DP_MAX 12 |
#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_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 | index | ||
) |
Set a group using well-known domain parameters.
grp | Destination group |
index | 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_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 |