Example program to test AES-GCM functionality. Used for a workshop

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

ecdh.h File Reference

ecdh.h File Reference

Elliptic curve Diffie-Hellman. More...

Go to the source code of this file.

Data Structures

struct  ecdh_context
 ECDH context structure. More...

Enumerations

enum  ecdh_side
 

When importing from an EC key, select if it is our key or the peer's key.

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_get_params (ecdh_context *ctx, const ecp_keypair *key, ecdh_side side)
 Setup an ECDH context from an EC key.
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.


Enumeration Type Documentation

enum ecdh_side

When importing from an EC key, select if it is our key or the peer's key.

Definition at line 39 of 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:
ctxECDH context
olennumber of bytes written
bufdestination buffer
blenbuffer length
f_rngRNG function, see notes for ecdh_compute_shared()
p_rngRNG parameter
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

Definition at line 243 of file ecdh.c.

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:
grpECP group
zDestination MPI (shared secret)
QPublic key from other party
dOur secret exponent
f_rngRNG function (see notes)
p_rngRNG 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 56 of file ecdh.c.

void ecdh_free ( ecdh_context ctx )

Free context.

Parameters:
ctxContext to free

Definition at line 98 of file ecdh.c.

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:
grpECP group
dDestination MPI (secret exponent)
QDestination point (public key)
f_rngRNG function
p_rngRNG parameter
Returns:
0 if successful, or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code

Definition at line 46 of file ecdh.c.

int ecdh_get_params ( ecdh_context ctx,
const ecp_keypair key,
ecdh_side  side 
)

Setup an ECDH context from an EC key.

Parameters:
ctxECDH constext to set
keyEC key to use
sideIs it our key (1) or the peer's key (0) ?
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

Definition at line 175 of file ecdh.c.

void ecdh_init ( ecdh_context ctx )

Initialize context.

Parameters:
ctxContext to initialize

Definition at line 90 of file ecdh.c.

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:
ctxECDH context
olennumber of chars written
bufdestination buffer
blenlength of buffer
f_rngRNG function
p_rngRNG 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 120 of file ecdh.c.

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:
ctxECDH context
olennumber of bytes actually written
bufdestination buffer
blensize of destination buffer
f_rngRNG function
p_rngRNG parameter
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

Definition at line 201 of file ecdh.c.

int ecdh_read_params ( ecdh_context ctx,
const unsigned char **  buf,
const unsigned char *  end 
)

Parse the ServerKeyExhange parameters.

Parameters:
ctxECDH context
bufpointer to start of input buffer
endone past end of buffer
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

Definition at line 157 of file ecdh.c.

int ecdh_read_public ( ecdh_context ctx,
const unsigned char *  buf,
size_t  blen 
)

Parse and import the client's public value.

Parameters:
ctxECDH context
bufstart of input buffer
blenlength of input buffer
Returns:
0 if successful, or an POLARSSL_ERR_ECP_XXX error code

Definition at line 222 of file ecdh.c.

int ecdh_self_test ( int  verbose )

Checkup routine.

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

Definition at line 272 of file ecdh.c.