* copy vendor drop to trunk
[lab.git] / Dev / utvpn / utvpn-unix-v101-7101-public / src / Mayaqua / openssl / ecdsa.h
1 /* crypto/ecdsa/ecdsa.h */\r
2 /**\r
3  * \file   crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions\r
4  * \author Written by Nils Larsch for the OpenSSL project\r
5  */\r
6 /* ====================================================================\r
7  * Copyright (c) 2000-2003 The OpenSSL Project.  All rights reserved.\r
8  *\r
9  * Redistribution and use in source and binary forms, with or without\r
10  * modification, are permitted provided that the following conditions\r
11  * are met:\r
12  *\r
13  * 1. Redistributions of source code must retain the above copyright\r
14  *    notice, this list of conditions and the following disclaimer. \r
15  *\r
16  * 2. Redistributions in binary form must reproduce the above copyright\r
17  *    notice, this list of conditions and the following disclaimer in\r
18  *    the documentation and/or other materials provided with the\r
19  *    distribution.\r
20  *\r
21  * 3. All advertising materials mentioning features or use of this\r
22  *    software must display the following acknowledgment:\r
23  *    "This product includes software developed by the OpenSSL Project\r
24  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"\r
25  *\r
26  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to\r
27  *    endorse or promote products derived from this software without\r
28  *    prior written permission. For written permission, please contact\r
29  *    licensing@OpenSSL.org.\r
30  *\r
31  * 5. Products derived from this software may not be called "OpenSSL"\r
32  *    nor may "OpenSSL" appear in their names without prior written\r
33  *    permission of the OpenSSL Project.\r
34  *\r
35  * 6. Redistributions of any form whatsoever must retain the following\r
36  *    acknowledgment:\r
37  *    "This product includes software developed by the OpenSSL Project\r
38  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"\r
39  *\r
40  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\r
41  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
42  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
43  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\r
44  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
45  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
46  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
47  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
49  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
50  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r
51  * OF THE POSSIBILITY OF SUCH DAMAGE.\r
52  * ====================================================================\r
53  *\r
54  * This product includes cryptographic software written by Eric Young\r
55  * (eay@cryptsoft.com).  This product includes software written by Tim\r
56  * Hudson (tjh@cryptsoft.com).\r
57  *\r
58  */\r
59 #ifndef HEADER_ECDSA_H\r
60 #define HEADER_ECDSA_H\r
61 \r
62 #include <openssl/opensslconf.h>\r
63 \r
64 #ifdef OPENSSL_NO_ECDSA\r
65 #error ECDSA is disabled.\r
66 #endif\r
67 \r
68 #include <openssl/ec.h>\r
69 #include <openssl/ossl_typ.h>\r
70 #ifndef OPENSSL_NO_DEPRECATED\r
71 #include <openssl/bn.h>\r
72 #endif\r
73 \r
74 #ifdef __cplusplus\r
75 extern "C" {\r
76 #endif\r
77 \r
78 typedef struct ECDSA_SIG_st\r
79         {\r
80         BIGNUM *r;\r
81         BIGNUM *s;\r
82         } ECDSA_SIG;\r
83 \r
84 /** ECDSA_SIG *ECDSA_SIG_new(void)\r
85  * allocates and initialize a ECDSA_SIG structure\r
86  * \return pointer to a ECDSA_SIG structure or NULL if an error occurred\r
87  */\r
88 ECDSA_SIG *ECDSA_SIG_new(void);\r
89 \r
90 /** ECDSA_SIG_free\r
91  * frees a ECDSA_SIG structure\r
92  * \param a pointer to the ECDSA_SIG structure\r
93  */\r
94 void      ECDSA_SIG_free(ECDSA_SIG *a);\r
95 \r
96 /** i2d_ECDSA_SIG\r
97  * DER encode content of ECDSA_SIG object (note: this function modifies *pp\r
98  * (*pp += length of the DER encoded signature)).\r
99  * \param a  pointer to the ECDSA_SIG object\r
100  * \param pp pointer to a unsigned char pointer for the output or NULL\r
101  * \return the length of the DER encoded ECDSA_SIG object or 0 \r
102  */\r
103 int       i2d_ECDSA_SIG(const ECDSA_SIG *a, unsigned char **pp);\r
104 \r
105 /** d2i_ECDSA_SIG\r
106  * decodes a DER encoded ECDSA signature (note: this function changes *pp\r
107  * (*pp += len)). \r
108  * \param v pointer to ECDSA_SIG pointer (may be NULL)\r
109  * \param pp buffer with the DER encoded signature\r
110  * \param len bufferlength\r
111  * \return pointer to the decoded ECDSA_SIG structure (or NULL)\r
112  */\r
113 ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **v, const unsigned char **pp, long len);\r
114 \r
115 /** ECDSA_do_sign\r
116  * computes the ECDSA signature of the given hash value using\r
117  * the supplied private key and returns the created signature.\r
118  * \param dgst pointer to the hash value\r
119  * \param dgst_len length of the hash value\r
120  * \param eckey pointer to the EC_KEY object containing a private EC key\r
121  * \return pointer to a ECDSA_SIG structure or NULL\r
122  */\r
123 ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst,int dgst_len,EC_KEY *eckey);\r
124 \r
125 /** ECDSA_do_sign_ex\r
126  * computes ECDSA signature of a given hash value using the supplied\r
127  * private key (note: sig must point to ECDSA_size(eckey) bytes of memory).\r
128  * \param dgst pointer to the hash value to sign\r
129  * \param dgstlen length of the hash value\r
130  * \param kinv optional pointer to a pre-computed inverse k\r
131  * \param rp optional pointer to the pre-computed rp value (see \r
132  *        ECDSA_sign_setup\r
133  * \param eckey pointer to the EC_KEY object containing a private EC key\r
134  * \return pointer to a ECDSA_SIG structure or NULL\r
135  */\r
136 ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, \r
137                 const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey);\r
138 \r
139 /** ECDSA_do_verify\r
140  * verifies that the supplied signature is a valid ECDSA\r
141  * signature of the supplied hash value using the supplied public key.\r
142  * \param dgst pointer to the hash value\r
143  * \param dgst_len length of the hash value\r
144  * \param sig  pointer to the ECDSA_SIG structure\r
145  * \param eckey pointer to the EC_KEY object containing a public EC key\r
146  * \return 1 if the signature is valid, 0 if the signature is invalid and -1 on error\r
147  */\r
148 int       ECDSA_do_verify(const unsigned char *dgst, int dgst_len,\r
149                 const ECDSA_SIG *sig, EC_KEY* eckey);\r
150 \r
151 const ECDSA_METHOD *ECDSA_OpenSSL(void);\r
152 \r
153 /** ECDSA_set_default_method\r
154  * sets the default ECDSA method\r
155  * \param meth the new default ECDSA_METHOD\r
156  */\r
157 void      ECDSA_set_default_method(const ECDSA_METHOD *meth);\r
158 \r
159 /** ECDSA_get_default_method\r
160  * returns the default ECDSA method\r
161  * \return pointer to ECDSA_METHOD structure containing the default method\r
162  */\r
163 const ECDSA_METHOD *ECDSA_get_default_method(void);\r
164 \r
165 /** ECDSA_set_method\r
166  * sets method to be used for the ECDSA operations\r
167  * \param eckey pointer to the EC_KEY object\r
168  * \param meth  pointer to the new method\r
169  * \return 1 on success and 0 otherwise \r
170  */\r
171 int       ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth);\r
172 \r
173 /** ECDSA_size\r
174  * returns the maximum length of the DER encoded signature\r
175  * \param  eckey pointer to a EC_KEY object\r
176  * \return numbers of bytes required for the DER encoded signature\r
177  */\r
178 int       ECDSA_size(const EC_KEY *eckey);\r
179 \r
180 /** ECDSA_sign_setup\r
181  * precompute parts of the signing operation. \r
182  * \param eckey pointer to the EC_KEY object containing a private EC key\r
183  * \param ctx  pointer to a BN_CTX object (may be NULL)\r
184  * \param kinv pointer to a BIGNUM pointer for the inverse of k\r
185  * \param rp   pointer to a BIGNUM pointer for x coordinate of k * generator\r
186  * \return 1 on success and 0 otherwise\r
187  */\r
188 int       ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, \r
189                 BIGNUM **rp);\r
190 \r
191 /** ECDSA_sign\r
192  * computes ECDSA signature of a given hash value using the supplied\r
193  * private key (note: sig must point to ECDSA_size(eckey) bytes of memory).\r
194  * \param type this parameter is ignored\r
195  * \param dgst pointer to the hash value to sign\r
196  * \param dgstlen length of the hash value\r
197  * \param sig buffer to hold the DER encoded signature\r
198  * \param siglen pointer to the length of the returned signature\r
199  * \param eckey pointer to the EC_KEY object containing a private EC key\r
200  * \return 1 on success and 0 otherwise\r
201  */\r
202 int       ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, \r
203                 unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);\r
204 \r
205 \r
206 /** ECDSA_sign_ex\r
207  * computes ECDSA signature of a given hash value using the supplied\r
208  * private key (note: sig must point to ECDSA_size(eckey) bytes of memory).\r
209  * \param type this parameter is ignored\r
210  * \param dgst pointer to the hash value to sign\r
211  * \param dgstlen length of the hash value\r
212  * \param sig buffer to hold the DER encoded signature\r
213  * \param siglen pointer to the length of the returned signature\r
214  * \param kinv optional pointer to a pre-computed inverse k\r
215  * \param rp optional pointer to the pre-computed rp value (see \r
216  *        ECDSA_sign_setup\r
217  * \param eckey pointer to the EC_KEY object containing a private EC key\r
218  * \return 1 on success and 0 otherwise\r
219  */\r
220 int       ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, \r
221                 unsigned char *sig, unsigned int *siglen, const BIGNUM *kinv,\r
222                 const BIGNUM *rp, EC_KEY *eckey);\r
223 \r
224 /** ECDSA_verify\r
225  * verifies that the given signature is valid ECDSA signature\r
226  * of the supplied hash value using the specified public key.\r
227  * \param type this parameter is ignored\r
228  * \param dgst pointer to the hash value \r
229  * \param dgstlen length of the hash value\r
230  * \param sig  pointer to the DER encoded signature\r
231  * \param siglen length of the DER encoded signature\r
232  * \param eckey pointer to the EC_KEY object containing a public EC key\r
233  * \return 1 if the signature is valid, 0 if the signature is invalid and -1 on error\r
234  */\r
235 int       ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, \r
236                 const unsigned char *sig, int siglen, EC_KEY *eckey);\r
237 \r
238 /* the standard ex_data functions */\r
239 int       ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new \r
240                 *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\r
241 int       ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg);\r
242 void      *ECDSA_get_ex_data(EC_KEY *d, int idx);\r
243 \r
244 \r
245 /* BEGIN ERROR CODES */\r
246 /* The following lines are auto generated by the script mkerr.pl. Any changes\r
247  * made after this point may be overwritten when the script is next run.\r
248  */\r
249 void ERR_load_ECDSA_strings(void);\r
250 \r
251 /* Error codes for the ECDSA functions. */\r
252 \r
253 /* Function codes. */\r
254 #define ECDSA_F_ECDSA_DATA_NEW_METHOD                    100\r
255 #define ECDSA_F_ECDSA_DO_SIGN                            101\r
256 #define ECDSA_F_ECDSA_DO_VERIFY                          102\r
257 #define ECDSA_F_ECDSA_SIGN_SETUP                         103\r
258 \r
259 /* Reason codes. */\r
260 #define ECDSA_R_BAD_SIGNATURE                            100\r
261 #define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE              101\r
262 #define ECDSA_R_ERR_EC_LIB                               102\r
263 #define ECDSA_R_MISSING_PARAMETERS                       103\r
264 #define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED          104\r
265 #define ECDSA_R_SIGNATURE_MALLOC_FAILED                  105\r
266 \r
267 #ifdef  __cplusplus\r
268 }\r
269 #endif\r
270 #endif\r