1c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* crypto/ecdsa/ecdsa.h */ 2c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/** 3c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * \file crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions 4c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * \author Written by Nils Larsch for the OpenSSL project 5c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 6c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* ==================================================================== 7480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. 8c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 9c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Redistribution and use in source and binary forms, with or without 10c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * modification, are permitted provided that the following conditions 11c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * are met: 12c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 13c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 1. Redistributions of source code must retain the above copyright 14c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * notice, this list of conditions and the following disclaimer. 15c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 16c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 2. Redistributions in binary form must reproduce the above copyright 17c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * notice, this list of conditions and the following disclaimer in 18c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * the documentation and/or other materials provided with the 19c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * distribution. 20c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 21c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 3. All advertising materials mentioning features or use of this 22c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * software must display the following acknowledgment: 23c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * "This product includes software developed by the OpenSSL Project 24c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 25c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 26c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 27c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * endorse or promote products derived from this software without 28c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * prior written permission. For written permission, please contact 29c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * licensing@OpenSSL.org. 30c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 31c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 5. Products derived from this software may not be called "OpenSSL" 32c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * nor may "OpenSSL" appear in their names without prior written 33c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * permission of the OpenSSL Project. 34c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 35c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 6. Redistributions of any form whatsoever must retain the following 36c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * acknowledgment: 37c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * "This product includes software developed by the OpenSSL Project 38c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 39c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 40c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 41c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 43c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 44c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 45c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 46c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 47c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 49c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 50c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 51c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * OF THE POSSIBILITY OF SUCH DAMAGE. 52c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ==================================================================== 53c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 54c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This product includes cryptographic software written by Eric Young 55c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * (eay@cryptsoft.com). This product includes software written by Tim 56c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Hudson (tjh@cryptsoft.com). 57c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 58c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 59c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifndef HEADER_ECDSA_H 60c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define HEADER_ECDSA_H 61c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 62c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/opensslconf.h> 63c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 64c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef OPENSSL_NO_ECDSA 65c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#error ECDSA is disabled. 66c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif 67c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 68c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/ec.h> 69c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/ossl_typ.h> 70c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifndef OPENSSL_NO_DEPRECATED 71c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/bn.h> 72c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif 73c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 74c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef __cplusplus 75c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgextern "C" { 76c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif 77c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 78c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgtypedef struct ECDSA_SIG_st 79c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 80c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org BIGNUM *r; 81c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org BIGNUM *s; 82c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } ECDSA_SIG; 83c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 84480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Allocates and initialize a ECDSA_SIG structure 85480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return pointer to a ECDSA_SIG structure or NULL if an error occurred 86c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 87c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgECDSA_SIG *ECDSA_SIG_new(void); 88c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 89480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** frees a ECDSA_SIG structure 90480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param sig pointer to the ECDSA_SIG structure 91c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 92480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.orgvoid ECDSA_SIG_free(ECDSA_SIG *sig); 93c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 94480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** DER encode content of ECDSA_SIG object (note: this function modifies *pp 95480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * (*pp += length of the DER encoded signature)). 96480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param sig pointer to the ECDSA_SIG object 97480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param pp pointer to a unsigned char pointer for the output or NULL 98480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return the length of the DER encoded ECDSA_SIG object or 0 99c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 100480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.orgint i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); 101c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 102480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Decodes a DER encoded ECDSA signature (note: this function changes *pp 103480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * (*pp += len)). 104480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param sig pointer to ECDSA_SIG pointer (may be NULL) 105480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param pp memory buffer with the DER encoded signature 106480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param len length of the buffer 107480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return pointer to the decoded ECDSA_SIG structure (or NULL) 108c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 109480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.orgECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); 110c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 111480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Computes the ECDSA signature of the given hash value using 112480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * the supplied private key and returns the created signature. 113480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgst pointer to the hash value 114480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgst_len length of the hash value 115480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param eckey EC_KEY object containing a private EC key 116480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return pointer to a ECDSA_SIG structure or NULL if an error occurred 117c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 118c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst,int dgst_len,EC_KEY *eckey); 119c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 120480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Computes ECDSA signature of a given hash value using the supplied 121480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). 122480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgst pointer to the hash value to sign 123480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgstlen length of the hash value 124480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param kinv BIGNUM with a pre-computed inverse k (optional) 125480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param rp BIGNUM with a pre-computed rp value (optioanl), 126480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * see ECDSA_sign_setup 127480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param eckey EC_KEY object containing a private EC key 128480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return pointer to a ECDSA_SIG structure or NULL if an error occurred 129c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 130c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, 131c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); 132c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 133480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Verifies that the supplied signature is a valid ECDSA 134480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * signature of the supplied hash value using the supplied public key. 135480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgst pointer to the hash value 136480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgst_len length of the hash value 137480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param sig ECDSA_SIG structure 138480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param eckey EC_KEY object containing a public EC key 139480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return 1 if the signature is valid, 0 if the signature is invalid 140480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * and -1 on error 141c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 142c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint ECDSA_do_verify(const unsigned char *dgst, int dgst_len, 143c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org const ECDSA_SIG *sig, EC_KEY* eckey); 144c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 145c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgconst ECDSA_METHOD *ECDSA_OpenSSL(void); 146c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 147480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Sets the default ECDSA method 148480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param meth new default ECDSA_METHOD 149c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 150c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgvoid ECDSA_set_default_method(const ECDSA_METHOD *meth); 151c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 152480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Returns the default ECDSA method 153480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return pointer to ECDSA_METHOD structure containing the default method 154c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 155c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgconst ECDSA_METHOD *ECDSA_get_default_method(void); 156c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 157480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Sets method to be used for the ECDSA operations 158480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param eckey EC_KEY object 159480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param meth new method 160480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return 1 on success and 0 otherwise 161c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 162c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth); 163c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 164480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Returns the maximum length of the DER encoded signature 165480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param eckey EC_KEY object 166480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return numbers of bytes required for the DER encoded signature 167c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 168c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint ECDSA_size(const EC_KEY *eckey); 169c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 170480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Precompute parts of the signing operation 171480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param eckey EC_KEY object containing a private EC key 172480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param ctx BN_CTX object (optional) 173480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param kinv BIGNUM pointer for the inverse of k 174480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param rp BIGNUM pointer for x coordinate of k * generator 175480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return 1 on success and 0 otherwise 176c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 177c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, 178c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org BIGNUM **rp); 179c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 180480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Computes ECDSA signature of a given hash value using the supplied 181480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). 182480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param type this parameter is ignored 183480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgst pointer to the hash value to sign 184480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgstlen length of the hash value 185480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param sig memory for the DER encoded created signature 186480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param siglen pointer to the length of the returned signature 187480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param eckey EC_KEY object containing a private EC key 188480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return 1 on success and 0 otherwise 189c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 190c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, 191c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); 192c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 193c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 194480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Computes ECDSA signature of a given hash value using the supplied 195480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). 196480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param type this parameter is ignored 197480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgst pointer to the hash value to sign 198480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgstlen length of the hash value 199480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param sig buffer to hold the DER encoded signature 200480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param siglen pointer to the length of the returned signature 201480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param kinv BIGNUM with a pre-computed inverse k (optional) 202480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param rp BIGNUM with a pre-computed rp value (optioanl), 203480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * see ECDSA_sign_setup 204480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param eckey EC_KEY object containing a private EC key 205480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return 1 on success and 0 otherwise 206c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 207c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, 208c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org unsigned char *sig, unsigned int *siglen, const BIGNUM *kinv, 209c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org const BIGNUM *rp, EC_KEY *eckey); 210c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 211480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org/** Verifies that the given signature is valid ECDSA signature 212480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * of the supplied hash value using the specified public key. 213480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param type this parameter is ignored 214480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgst pointer to the hash value 215480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param dgstlen length of the hash value 216480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param sig pointer to the DER encoded signature 217480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param siglen length of the DER encoded signature 218480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \param eckey EC_KEY object containing a public EC key 219480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * \return 1 if the signature is valid, 0 if the signature is invalid 220480da75abf485e7e2a6be5acc0f71842368792c0jnd@chromium.org * and -1 on error 221c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 222c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, 223c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org const unsigned char *sig, int siglen, EC_KEY *eckey); 224c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 225c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* the standard ex_data functions */ 226c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new 227c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); 228c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg); 229c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgvoid *ECDSA_get_ex_data(EC_KEY *d, int idx); 230c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 231c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 232c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* BEGIN ERROR CODES */ 233c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* The following lines are auto generated by the script mkerr.pl. Any changes 234c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * made after this point may be overwritten when the script is next run. 235c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 236c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgvoid ERR_load_ECDSA_strings(void); 237c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 238c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* Error codes for the ECDSA functions. */ 239c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 240c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* Function codes. */ 2412c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org#define ECDSA_F_ECDSA_CHECK 104 242c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_F_ECDSA_DATA_NEW_METHOD 100 243c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_F_ECDSA_DO_SIGN 101 244c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_F_ECDSA_DO_VERIFY 102 245c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_F_ECDSA_SIGN_SETUP 103 246c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 247c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* Reason codes. */ 248c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_R_BAD_SIGNATURE 100 249c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 101 250c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_R_ERR_EC_LIB 102 251c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_R_MISSING_PARAMETERS 103 252c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_R_NEED_NEW_SETUP_VALUES 106 2532c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org#define ECDSA_R_NON_FIPS_METHOD 107 254c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 104 255c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define ECDSA_R_SIGNATURE_MALLOC_FAILED 105 256c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 257c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef __cplusplus 258c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org} 259c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif 260c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif 261