mbed TLS v2.2.0
Data Structures | Macros | Enumerations | Functions
ecp.h File Reference

Detailed Description

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"
Include dependency graph for ecp.h:
This graph shows which files directly or indirectly include this file:

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_infombedtls_ecp_curve_list (void)
 Get the list of supported curves in order of preferrence (full information) More...
 
const mbedtls_ecp_group_idmbedtls_ecp_grp_id_list (void)
 Get the list of supported curves in order of preferrence (grp_id only) More...
 
const mbedtls_ecp_curve_infombedtls_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_infombedtls_ecp_curve_info_from_tls_id (uint16_t tls_id)
 Get curve information from a TLS NamedCurve value. More...
 
const mbedtls_ecp_curve_infombedtls_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...
 

Macro Definition Documentation

#define MBEDTLS_ECP_DP_MAX   12

Number of supported curves (plus one for NONE).

(Montgomery curves excluded for now.)

Definition at line 82 of file ecp.h.

#define MBEDTLS_ECP_MAX_BYTES   ( ( MBEDTLS_ECP_MAX_BITS + 7 ) / 8 )

Definition at line 186 of file ecp.h.

#define MBEDTLS_ECP_MAX_PT_LEN   ( 2 * MBEDTLS_ECP_MAX_BYTES + 1 )

Definition at line 187 of file ecp.h.

#define MBEDTLS_ECP_PF_COMPRESSED   1

Compressed point format.

Definition at line 234 of file ecp.h.

#define MBEDTLS_ECP_PF_UNCOMPRESSED   0

Uncompressed point format.

Definition at line 233 of file ecp.h.

#define MBEDTLS_ECP_TLS_NAMED_CURVE   3

ECCurveType's named_curve.

Definition at line 239 of file ecp.h.

#define MBEDTLS_ERR_ECP_ALLOC_FAILED   -0x4D80

Memory allocation failed.

Definition at line 35 of file ecp.h.

#define MBEDTLS_ERR_ECP_BAD_INPUT_DATA   -0x4F80

Bad input parameters to function.

Definition at line 31 of file ecp.h.

#define MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL   -0x4F00

The buffer is too small to write to.

Definition at line 32 of file ecp.h.

#define MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE   -0x4E80

Requested curve not available.

Definition at line 33 of file ecp.h.

#define MBEDTLS_ERR_ECP_INVALID_KEY   -0x4C80

Invalid private or public key.

Definition at line 37 of file ecp.h.

#define MBEDTLS_ERR_ECP_RANDOM_FAILED   -0x4D00

Generation of random value, such as (ephemeral) key, failed.

Definition at line 36 of file ecp.h.

#define MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH   -0x4C00

Signature is valid but shorter than the user-supplied length.

Definition at line 38 of file ecp.h.

#define MBEDTLS_ERR_ECP_VERIFY_FAILED   -0x4E00

The signature is not valid.

Definition at line 34 of file ecp.h.

Enumeration Type Documentation

Domain parameters (curve, subgroup and generator) identifiers.

Only curves over prime fields are supported.

Warning
This library does not support validation of arbitrary domain parameters. Therefore, only well-known domain parameters from trusted sources should be used. See mbedtls_ecp_group_load().
Enumerator
MBEDTLS_ECP_DP_NONE 
MBEDTLS_ECP_DP_SECP192R1 

192-bits NIST curve

MBEDTLS_ECP_DP_SECP224R1 

224-bits NIST curve

MBEDTLS_ECP_DP_SECP256R1 

256-bits NIST curve

MBEDTLS_ECP_DP_SECP384R1 

384-bits NIST curve

MBEDTLS_ECP_DP_SECP521R1 

521-bits NIST curve

MBEDTLS_ECP_DP_BP256R1 

256-bits Brainpool curve

MBEDTLS_ECP_DP_BP384R1 

384-bits Brainpool curve

MBEDTLS_ECP_DP_BP512R1 

512-bits Brainpool curve

MBEDTLS_ECP_DP_CURVE25519 

Curve25519

MBEDTLS_ECP_DP_SECP192K1 

192-bits "Koblitz" curve

MBEDTLS_ECP_DP_SECP224K1 

224-bits "Koblitz" curve

MBEDTLS_ECP_DP_SECP256K1 

256-bits "Koblitz" curve

Definition at line 60 of file ecp.h.

Function Documentation

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.

Parameters
grpGroup used
dInteger to check
Returns
0 if point is a valid private key, MBEDTLS_ERR_ECP_INVALID_KEY otherwise.
Note
Uses bare components rather than an mbedtls_ecp_keypair structure in order to ease use with other structures such as mbedtls_ecdh_context of mbedtls_ecdsa_context.
int mbedtls_ecp_check_pub_priv ( const mbedtls_ecp_keypair pub,
const mbedtls_ecp_keypair prv 
)

Check a public-private key pair.

Parameters
pubKeypair structure holding a public key
prvKeypair structure holding a private (plus public) key
Returns
0 if successful (keys are valid and match), or MBEDTLS_ERR_ECP_BAD_INPUT_DATA, or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_ERR_MPI_XXX code.
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.

Parameters
grpCurve/group the point should belong to
ptPoint to check
Returns
0 if point is a valid public key, MBEDTLS_ERR_ECP_INVALID_KEY otherwise.
Note
This function only checks the point is non-zero, has valid coordinates and lies on the curve, but not that it is indeed a multiple of G. This is additional check is more expensive, isn't required by standards, and shouldn't be necessary if the group used has a small cofactor. In particular, it is useless for the NIST groups which all have a cofactor of 1.
Uses bare components rather than an mbedtls_ecp_keypair structure in order to ease use with other structures such as mbedtls_ecdh_context of mbedtls_ecdsa_context.
int mbedtls_ecp_copy ( mbedtls_ecp_point P,
const mbedtls_ecp_point Q 
)

Copy the contents of point Q into P.

Parameters
PDestination point
QSource point
Returns
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed
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.

Parameters
grp_idA MBEDTLS_ECP_DP_XXX value
Returns
The associated curve information or NULL
const mbedtls_ecp_curve_info* mbedtls_ecp_curve_info_from_name ( const char *  name)

Get curve information from a human-readable name.

Parameters
nameThe name
Returns
The associated curve information or NULL
const mbedtls_ecp_curve_info* mbedtls_ecp_curve_info_from_tls_id ( uint16_t  tls_id)

Get curve information from a TLS NamedCurve value.

Parameters
tls_idA MBEDTLS_ECP_DP_XXX value
Returns
The associated curve information or NULL
const mbedtls_ecp_curve_info* mbedtls_ecp_curve_list ( void  )

Get the list of supported curves in order of preferrence (full information)

Returns
A statically allocated array, the last entry is 0.
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.

Parameters
grp_idECP group identifier
keyDestination keypair
f_rngRNG function
p_rngRNG parameter
Returns
0 if successful, or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code
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.

Parameters
grpECP group
dDestination MPI (secret part)
QDestination point (public part)
f_rngRNG function
p_rngRNG parameter
Returns
0 if successful, or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code
Note
Uses bare components rather than an mbedtls_ecp_keypair structure in order to ease use with other structures such as mbedtls_ecdh_context of mbedtls_ecdsa_context.
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.

Parameters
grpECP group
GChosen base point
dDestination MPI (secret part)
QDestination point (public part)
f_rngRNG function
p_rngRNG parameter
Returns
0 if successful, or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code
Note
Uses bare components rather than an mbedtls_ecp_keypair structure in order to ease use with other structures such as mbedtls_ecdh_context of mbedtls_ecdsa_context.
int mbedtls_ecp_group_copy ( mbedtls_ecp_group dst,
const mbedtls_ecp_group src 
)

Copy the contents of a group object.

Parameters
dstDestination group
srcSource group
Returns
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed
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.

Parameters
grpDestination group
indexIndex in the list of well-known domain parameters
Returns
0 if successful, MBEDTLS_ERR_MPI_XXX if initialization failed MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE for unkownn groups
Note
Index should be a value of RFC 4492's enum NamedCurve, usually in the form of a MBEDTLS_ECP_DP_XXX macro.
const mbedtls_ecp_group_id* mbedtls_ecp_grp_id_list ( void  )

Get the list of supported curves in order of preferrence (grp_id only)

Returns
A statically allocated array, terminated with MBEDTLS_ECP_DP_NONE.
int mbedtls_ecp_is_zero ( mbedtls_ecp_point pt)

Tell if a point is zero.

Parameters
ptPoint to test
Returns
1 if point is zero, 0 otherwise
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)

Note
In order to prevent timing attacks, this function executes the exact same sequence of (base field) operations for any valid m. It avoids any if-branch or array index depending on the value of m.
If f_rng is not NULL, it is used to randomize intermediate results in order to prevent potential timing attacks targeting these results. It is recommended to always provide a non-NULL f_rng (the overhead is negligible).
Parameters
grpECP group
RDestination point
mInteger by which to multiply
PPoint to multiply
f_rngRNG function (see notes)
p_rngRNG parameter
Returns
0 if successful, MBEDTLS_ERR_ECP_INVALID_KEY if m is not a valid privkey or P is not a valid pubkey, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed
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)

Note
In contrast to mbedtls_ecp_mul(), this function does not guarantee a constant execution flow and timing.
Parameters
grpECP group
RDestination point
mInteger by which to multiply P
PPoint to multiply by m
nInteger by which to multiply Q
QPoint to be multiplied by n
Returns
0 if successful, MBEDTLS_ERR_ECP_INVALID_KEY if m or n is not a valid privkey or P or Q is not a valid pubkey, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed
int mbedtls_ecp_point_cmp ( const mbedtls_ecp_point P,
const mbedtls_ecp_point Q 
)

Compare two points.

Note
This assumes the points are normalized. Otherwise, they may compare as "not equal" even if they are.
Parameters
PFirst point to compare
QSecond point to compare
Returns
0 if the points are equal, MBEDTLS_ERR_ECP_BAD_INPUT_DATA otherwise
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.

Parameters
grpGroup to which the point should belong
PPoint to import
bufInput buffer
ilenActual length of input
Returns
0 if successful, MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the point format is not implemented.
Note
This function does NOT check that the point actually belongs to the given group, see mbedtls_ecp_check_pubkey() for that.
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.

Parameters
PDestination point
radixInput numeric base
xFirst affine coordinate as a null-terminated string
ySecond affine coordinate as a null-terminated string
Returns
0 if successful, or a MBEDTLS_ERR_MPI_XXX error code
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.

Parameters
grpGroup to which the point should belong
PPoint to export
formatPoint format, should be a MBEDTLS_ECP_PF_XXX macro
olenLength of the actual output
bufOutput buffer
buflenLength of the output buffer
Returns
0 if successful, or MBEDTLS_ERR_ECP_BAD_INPUT_DATA or MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL
int mbedtls_ecp_set_zero ( mbedtls_ecp_point pt)

Set a point to zero.

Parameters
ptDestination point
Returns
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed
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.

Parameters
grpDestination group
buf&(Start of input buffer)
lenBuffer length
Note
buf is updated to point right after ECParameters on exit
Returns
0 if successful, MBEDTLS_ERR_MPI_XXX if initialization failed MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid
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.

Parameters
grpECP group used
ptDestination point
buf$(Start of input buffer)
lenBuffer length
Note
buf is updated to point right after the ECPoint on exit
Returns
0 if successful, MBEDTLS_ERR_MPI_XXX if initialization failed MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid
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.

Parameters
grpECP group used
olenNumber of bytes actually written
bufBuffer to write to
blenBuffer length
Returns
0 if successful, or MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL
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.

Parameters
grpECP group used
ptPoint to export
formatExport format
olenlength of data written
bufBuffer to write to
blenBuffer length
Returns
0 if successful, or MBEDTLS_ERR_ECP_BAD_INPUT_DATA or MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL