#include "polarssl/config.h"
#include "polarssl/ecdh.h"
Go to the source code of this file.
Functions | |
int | ecdh_gen_public (ecp_group *grp, mpi *d, ecp_point *Q, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Generate a public key. | |
int | ecdh_compute_shared (ecp_group *grp, mpi *z, const ecp_point *Q, const mpi *d, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Compute shared secret. | |
void | ecdh_init (ecdh_context *ctx) |
Initialize context. | |
void | ecdh_free (ecdh_context *ctx) |
Free context. | |
int | ecdh_make_params (ecdh_context *ctx, size_t *olen, unsigned char *buf, size_t blen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Setup and write the ServerKeyExhange parameters. | |
int | ecdh_read_params (ecdh_context *ctx, const unsigned char **buf, const unsigned char *end) |
Parse the ServerKeyExhange parameters. | |
int | ecdh_make_public (ecdh_context *ctx, size_t *olen, unsigned char *buf, size_t blen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Setup and export the client's public value. | |
int | ecdh_read_public (ecdh_context *ctx, const unsigned char *buf, size_t blen) |
Parse and import the client's public value. | |
int | ecdh_calc_secret (ecdh_context *ctx, size_t *olen, unsigned char *buf, size_t blen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng) |
Derive and export the shared secret. | |
int | ecdh_self_test (int verbose) |
Checkup routine. |
int ecdh_calc_secret | ( | ecdh_context * | ctx, | |
size_t * | olen, | |||
unsigned char * | buf, | |||
size_t | blen, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Derive and export the shared secret.
ctx | ECDH context | |
olen | number of bytes written | |
buf | destination buffer | |
blen | buffer length | |
f_rng | RNG function, see notes for ecdh_compute_shared() | |
p_rng | RNG parameter |
Definition at line 204 of file ecdh.c.
References ecdh_context::d, ecdh_compute_shared(), ecdh_context::grp, mpi_size(), mpi_write_binary(), ecp_group::nbits, POLARSSL_ERR_ECP_BAD_INPUT_DATA, ecdh_context::Qp, and ecdh_context::z.
Referenced by ssl_parse_client_key_exchange(), ssl_psk_derive_premaster(), ssl_write_client_key_exchange(), and test_suite_ecdh_exchange().
int ecdh_compute_shared | ( | ecp_group * | grp, | |
mpi * | z, | |||
const ecp_point * | Q, | |||
const mpi * | d, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Compute shared secret.
grp | ECP group | |
z | Destination MPI (shared secret) | |
Q | Public key from other party | |
d | Our secret exponent | |
f_rng | RNG function (see notes) | |
p_rng | RNG parameter |
ecp_mul()
for details. Definition at line 52 of file ecdh.c.
References ecp_check_pubkey(), ecp_is_zero(), ecp_mul(), ecp_point_free(), ecp_point_init(), MPI_CHK, mpi_copy(), P, POLARSSL_ERR_ECP_BAD_INPUT_DATA, and ecp_point::X.
Referenced by ecdh_calc_secret(), test_suite_ecdh_primitive_random(), and test_suite_ecdh_primitive_testvec().
void ecdh_free | ( | ecdh_context * | ctx | ) |
Free context.
ctx | Context to free |
Definition at line 94 of file ecdh.c.
References ecdh_context::_d, ecdh_context::d, ecp_group_free(), ecp_point_free(), ecdh_context::grp, mpi_free(), ecdh_context::Q, ecdh_context::Qp, ecdh_context::Vf, ecdh_context::Vi, and ecdh_context::z.
Referenced by ssl_handshake_free(), and test_suite_ecdh_exchange().
int ecdh_gen_public | ( | ecp_group * | grp, | |
mpi * | d, | |||
ecp_point * | Q, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Generate a public key.
grp | ECP group | |
d | Destination MPI (secret exponent) | |
Q | Destination point (public key) | |
f_rng | RNG function | |
p_rng | RNG parameter |
Definition at line 42 of file ecdh.c.
References ecp_gen_keypair().
Referenced by ecdh_make_params(), ecdh_make_public(), test_suite_ecdh_primitive_random(), and test_suite_ecdh_primitive_testvec().
void ecdh_init | ( | ecdh_context * | ctx | ) |
Initialize context.
ctx | Context to initialize |
Definition at line 86 of file ecdh.c.
Referenced by ssl_handshake_init(), and test_suite_ecdh_exchange().
int ecdh_make_params | ( | ecdh_context * | ctx, | |
size_t * | olen, | |||
unsigned char * | buf, | |||
size_t | blen, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Setup and write the ServerKeyExhange parameters.
ctx | ECDH context | |
olen | number of chars written | |
buf | destination buffer | |
blen | length of buffer | |
f_rng | RNG function | |
p_rng | RNG parameter |
Definition at line 116 of file ecdh.c.
References ecdh_context::d, ecdh_gen_public(), ecp_tls_write_group(), ecp_tls_write_point(), ecdh_context::grp, ecp_group::pbits, ecdh_context::point_format, POLARSSL_ERR_ECP_BAD_INPUT_DATA, pt_len, and ecdh_context::Q.
Referenced by ssl_write_server_key_exchange(), and test_suite_ecdh_exchange().
int ecdh_make_public | ( | ecdh_context * | ctx, | |
size_t * | olen, | |||
unsigned char * | buf, | |||
size_t | blen, | |||
int(*)(void *, unsigned char *, size_t) | f_rng, | |||
void * | p_rng | |||
) |
Setup and export the client's public value.
ctx | ECDH context | |
olen | number of bytes actually written | |
buf | destination buffer | |
blen | size of destination buffer | |
f_rng | RNG function | |
p_rng | RNG parameter |
Definition at line 171 of file ecdh.c.
References ecdh_context::d, ecdh_gen_public(), ecp_tls_write_point(), ecdh_context::grp, ecp_group::pbits, ecdh_context::point_format, POLARSSL_ERR_ECP_BAD_INPUT_DATA, and ecdh_context::Q.
Referenced by ssl_write_client_key_exchange(), and test_suite_ecdh_exchange().
int ecdh_read_params | ( | ecdh_context * | ctx, | |
const unsigned char ** | buf, | |||
const unsigned char * | end | |||
) |
Parse the ServerKeyExhange parameters.
ctx | ECDH context | |
buf | pointer to start of input buffer | |
end | one past end of buffer |
Definition at line 153 of file ecdh.c.
References ecp_tls_read_group(), ecp_tls_read_point(), ecdh_context::grp, and ecdh_context::Qp.
Referenced by ssl_parse_server_ecdh_params(), and test_suite_ecdh_exchange().
int ecdh_read_public | ( | ecdh_context * | ctx, | |
const unsigned char * | buf, | |||
size_t | blen | |||
) |
Parse and import the client's public value.
ctx | ECDH context | |
buf | start of input buffer | |
blen | length of input buffer |
Definition at line 192 of file ecdh.c.
References ecp_tls_read_point(), ecdh_context::grp, POLARSSL_ERR_ECP_BAD_INPUT_DATA, and ecdh_context::Qp.
Referenced by ssl_parse_client_key_exchange(), and test_suite_ecdh_exchange().