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