ecdh.h File Reference

Elliptic curve Diffie-Hellman. More...

#include "ecp.h"
Include dependency graph for ecdh.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ecdh_context
 ECDH context structure. More...

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.

Detailed Description

Elliptic curve Diffie-Hellman.

Copyright (C) 2006-2013, Brainspark B.V.

This file is part of PolarSSL (http://www.polarssl.org) Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>

All rights reserved.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Definition in file ecdh.h.


Function Documentation

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.

Parameters:
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
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

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.

Parameters:
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
Returns:
0 if successful, or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code
Note:
If f_rng is not NULL, it is used to implement countermeasures against potential elaborate timing attacks, see 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  ) 
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.

Parameters:
grp ECP group
d Destination MPI (secret exponent)
Q Destination point (public key)
f_rng RNG function
p_rng RNG parameter
Returns:
0 if successful, or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code

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.

Parameters:
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.

Parameters:
ctx ECDH context
olen number of chars written
buf destination buffer
blen length of buffer
f_rng RNG function
p_rng RNG parameter
Note:
This function assumes that ctx->grp has already been properly set (for example using ecp_use_known_dp).
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

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.

Parameters:
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
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

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.

Parameters:
ctx ECDH context
buf pointer to start of input buffer
end one past end of buffer
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

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.

Parameters:
ctx ECDH context
buf start of input buffer
blen length of input buffer
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

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().

int ecdh_self_test ( int  verbose  ) 

Checkup routine.

Returns:
0 if successful, or 1 if the test failed

Definition at line 233 of file ecdh.c.


Generated on 9 Apr 2014 for PolarSSL v1.3.2 by  doxygen 1.6.1