Elliptic curve DSA. More...
#include "ecp.h"

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. | |
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.
| void ecdsa_free | ( | ecdsa_context * | ctx | ) |
Free context.
| ctx | Context to free |
Definition at line 328 of file ecdsa.c.
References ecdsa_context::d, ecp_group_free(), ecp_point_free(), ecdsa_context::grp, mpi_free(), ecdsa_context::Q, ecdsa_context::r, and ecdsa_context::s.
Referenced by ecdsa_free_wrap(), ecdsa_from_keypair(), eckey_sign_wrap(), and eckey_verify_wrap().
| int ecdsa_from_keypair | ( | ecdsa_context * | ctx, | |
| const ecp_keypair * | key | |||
| ) |
Set an ECDSA context from an EC key pair.
| ctx | ECDSA context to set | |
| key | EC key to use |
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.
| 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 |
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.
| void ecdsa_init | ( | ecdsa_context * | ctx | ) |
Initialize context.
| ctx | Context to initialize |
Definition at line 316 of file ecdsa.c.
References ecdsa_context::d, ecp_group_init(), ecp_point_init(), ecdsa_context::grp, mpi_init(), ecdsa_context::Q, ecdsa_context::r, and ecdsa_context::s.
Referenced by ecdsa_alloc_wrap(), eckey_sign_wrap(), and eckey_verify_wrap().
| 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.
| ctx | ECDSA context | |
| hash | Message hash | |
| hlen | Size of hash | |
| sig | Signature to read and verify | |
| slen | Size of sig |
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().
| int ecdsa_self_test | ( | int | verbose | ) |
| 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.
| 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 |
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().
| 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.
| 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 |
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().
| 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)
| 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 |
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().
1.6.1