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