ecdsa.h File Reference

Elliptic curve DSA. More...

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

Go to the source code of this file.

Data Structures

struct  ecdsa_context
 ECDSA context structure. More...

Functions

int ecdsa_sign (ecp_group *grp, mpi *r, mpi *s, const mpi *d, const unsigned char *buf, size_t blen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Compute ECDSA signature of a previously hashed message.
int ecdsa_verify (ecp_group *grp, const unsigned char *buf, size_t blen, const ecp_point *Q, const mpi *r, const mpi *s)
 Verify ECDSA signature of a previously hashed message.
int ecdsa_write_signature (ecdsa_context *ctx, const unsigned char *hash, size_t hlen, unsigned char *sig, size_t *slen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Compute ECDSA signature and write it to buffer, serialized as defined in RFC 4492 page 20.
int ecdsa_read_signature (ecdsa_context *ctx, const unsigned char *hash, size_t hlen, const unsigned char *sig, size_t slen)
 Read and verify an ECDSA signature.
int ecdsa_genkey (ecdsa_context *ctx, ecp_group_id gid, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Generate an ECDSA keypair on the given curve.
int ecdsa_from_keypair (ecdsa_context *ctx, const ecp_keypair *key)
 Set an ECDSA context from an EC key pair.
void ecdsa_init (ecdsa_context *ctx)
 Initialize context.
void ecdsa_free (ecdsa_context *ctx)
 Free context.
int ecdsa_self_test (int verbose)
 Checkup routine.

Detailed Description

Elliptic curve DSA.

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 ecdsa.h.


Function Documentation

void ecdsa_free ( ecdsa_context ctx  ) 
int ecdsa_from_keypair ( ecdsa_context ctx,
const ecp_keypair key 
)

Set an ECDSA context from an EC key pair.

Parameters:
ctx ECDSA context to set
key EC key to use
Returns:
0 on success, or a POLARSSL_ERR_ECP code.

Definition at line 299 of file ecdsa.c.

References ecp_keypair::d, ecdsa_context::d, ecdsa_free(), ecp_copy(), ecp_group_copy(), ecp_keypair::grp, ecdsa_context::grp, mpi_copy(), ecp_keypair::Q, and ecdsa_context::Q.

Referenced by eckey_sign_wrap(), and eckey_verify_wrap().

int ecdsa_genkey ( ecdsa_context ctx,
ecp_group_id  gid,
int(*)(void *, unsigned char *, size_t)  f_rng,
void *  p_rng 
)

Generate an ECDSA keypair on the given curve.

Parameters:
ctx ECDSA context in which the keypair should be stored
gid Group (elliptic curve) to use. One of the various POLARSSL_ECP_DP_XXX macros depending on configuration.
f_rng RNG function
p_rng RNG parameter
Returns:
0 on success, or a POLARSSL_ERR_ECP code.

Definition at line 289 of file ecdsa.c.

References ecdsa_context::d, ecp_gen_keypair(), ecp_use_known_dp(), ecdsa_context::grp, and ecdsa_context::Q.

Referenced by test_suite_ecdsa_write_read_random().

void ecdsa_init ( ecdsa_context ctx  ) 
int ecdsa_read_signature ( ecdsa_context ctx,
const unsigned char *  hash,
size_t  hlen,
const unsigned char *  sig,
size_t  slen 
)

Read and verify an ECDSA signature.

Parameters:
ctx ECDSA context
hash Message hash
hlen Size of hash
sig Signature to read and verify
slen Size of sig
Returns:
0 if successful, POLARSSL_ERR_ECP_BAD_INPUT_DATA if signature is invalid or a POLARSSL_ERR_ECP or POLARSSL_ERR_MPI error code

Definition at line 256 of file ecdsa.c.

References ASN1_CONSTRUCTED, asn1_get_mpi(), asn1_get_tag(), ASN1_SEQUENCE, ecdsa_verify(), ecdsa_context::grp, POLARSSL_ERR_ASN1_LENGTH_MISMATCH, POLARSSL_ERR_ECP_BAD_INPUT_DATA, ecdsa_context::Q, ecdsa_context::r, and ecdsa_context::s.

Referenced by ecdsa_verify_wrap(), and test_suite_ecdsa_write_read_random().

int ecdsa_self_test ( int  verbose  ) 

Checkup routine.

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

Definition at line 342 of file ecdsa.c.

int ecdsa_sign ( ecp_group grp,
mpi r,
mpi s,
const mpi d,
const unsigned char *  buf,
size_t  blen,
int(*)(void *, unsigned char *, size_t)  f_rng,
void *  p_rng 
)

Compute ECDSA signature of a previously hashed message.

Parameters:
grp ECP group
r First output integer
s Second output integer
d Private signing key
buf Message hash
blen Length of buf
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 54 of file ecdsa.c.

References derive_mpi(), ecp_gen_keypair(), ecp_point_free(), ecp_point_init(), mpi_add_mpi(), MPI_CHK, mpi_cmp_int(), mpi_free(), mpi_init(), mpi_inv_mod(), mpi_mod_mpi(), mpi_mul_mpi(), ecp_group::N, POLARSSL_ERR_ECP_RANDOM_FAILED, R, and ecp_point::X.

Referenced by ecdsa_write_signature(), test_suite_ecdsa_prim_random(), and test_suite_ecdsa_prim_test_vectors().

int ecdsa_verify ( ecp_group grp,
const unsigned char *  buf,
size_t  blen,
const ecp_point Q,
const mpi r,
const mpi s 
)

Verify ECDSA signature of a previously hashed message.

Parameters:
grp ECP group
buf Message hash
blen Length of buf
Q Public key to use for verification
r First integer of the signature
s Second integer of the signature
Returns:
0 if successful, POLARSSL_ERR_ECP_BAD_INPUT_DATA if signature is invalid or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code

Definition at line 121 of file ecdsa.c.

References derive_mpi(), ecp_add(), ecp_check_pubkey(), ecp_is_zero(), ecp_mul(), ecp_point_free(), ecp_point_init(), ecp_group::G, MPI_CHK, mpi_cmp_int(), mpi_cmp_mpi(), mpi_free(), mpi_init(), mpi_inv_mod(), mpi_mod_mpi(), mpi_mul_mpi(), ecp_group::N, P, POLARSSL_ERR_ECP_VERIFY_FAILED, R, and ecp_point::X.

Referenced by ecdsa_read_signature(), test_suite_ecdsa_prim_random(), and test_suite_ecdsa_prim_test_vectors().

int ecdsa_write_signature ( ecdsa_context ctx,
const unsigned char *  hash,
size_t  hlen,
unsigned char *  sig,
size_t *  slen,
int(*)(void *, unsigned char *, size_t)  f_rng,
void *  p_rng 
)

Compute ECDSA signature and write it to buffer, serialized as defined in RFC 4492 page 20.

(Not thread-safe to use same context in multiple threads)

Parameters:
ctx ECDSA context
hash Message hash
hlen Length of hash
sig Buffer that will hold the signature
slen Length of the signature written
f_rng RNG function
p_rng RNG parameter
Note:
The "sig" buffer must be at least as large as twice the size of the curve used, plus 7 (eg. 71 bytes if a 256-bit curve is used).
Returns:
0 if successful, or a POLARSSL_ERR_ECP, POLARSSL_ERR_MPI or POLARSSL_ERR_ASN1 error code

Definition at line 223 of file ecdsa.c.

References ASN1_CHK_ADD, ASN1_CONSTRUCTED, ASN1_SEQUENCE, asn1_write_len(), asn1_write_mpi(), asn1_write_tag(), ecdsa_context::d, ecdsa_sign(), ecdsa_context::grp, MAX_SIG_LEN, ecdsa_context::r, and ecdsa_context::s.

Referenced by ecdsa_sign_wrap(), and test_suite_ecdsa_write_read_random().


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