1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
|
/* crypto/ecdsa/ecdsa.h */
/* ====================================================================
* Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* licensing@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
#ifndef HEADER_ECDSA_H
#define HEADER_ECDSA_H
#ifdef OPENSSL_NO_ECDSA
#error ECDSA is disabled.
#endif
#ifndef OPENSSL_NO_BIO
#include <openssl/bio.h>
#endif
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/crypto.h>
#include <openssl/ossl_typ.h>
#include <openssl/asn1.h>
#include <openssl/asn1t.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ecdsa_st ECDSA;
typedef struct ECDSA_SIG_st
{
BIGNUM *r;
BIGNUM *s;
} ECDSA_SIG;
typedef struct ecdsa_method
{
const char *name;
ECDSA_SIG *(*ecdsa_do_sign)(const unsigned char *dgst, int dgst_len, ECDSA *ecdsa);
int (*ecdsa_sign_setup)(ECDSA *ecdsa, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **r);
int (*ecdsa_do_verify)(const unsigned char *dgst, int dgst_len, ECDSA_SIG *sig, ECDSA *ecdsa);
int (*init)(ECDSA *ecdsa);
int (*finish)(ECDSA *ecdsa);
int flags;
char *app_data;
} ECDSA_METHOD;
#define ECDSA_FLAG_NAMED_CURVE 1
#define ECDSA_FLAG_IMPLICITLYCA 2
struct ecdsa_st
{
int version;
int write_params;
EC_GROUP *group;
EC_POINT *pub_key;
BIGNUM *priv_key;
BIGNUM *kinv; /* signing pre-calc */
BIGNUM *r; /* signing pre-calc */
unsigned char *seed; /* seed for curve generation */
unsigned int seed_len;
int parameter_flags;
int references;
int flags;
CRYPTO_EX_DATA ex_data;
const ECDSA_METHOD *meth;
struct engine_st *engine;
};
ECDSA_SIG *ECDSA_SIG_new(void);
void ECDSA_SIG_free(ECDSA_SIG *a);
int i2d_ECDSA_SIG(const ECDSA_SIG *a, unsigned char **pp);
ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **v, const unsigned char **pp, long length);
ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, const int dgst_len, ECDSA *ecdsa);
int ECDSA_do_verify(const unsigned char *dgst, const int dgst_len, ECDSA_SIG *sig, ECDSA* ecdsa);
int ECDSA_generate_key(ECDSA *ecdsa);
int ECDSA_check_key(ECDSA *ecdsa);
const ECDSA_METHOD *ECDSA_OpenSSL(void);
void ECDSA_set_default_method(const ECDSA_METHOD *);
const ECDSA_METHOD *ECDSA_get_default_openssl_method(void);
int ECDSA_set_method(ECDSA *, const ECDSA_METHOD *);
ECDSA *ECDSA_new();
ECDSA *ECDSA_new_method(ENGINE *engine);
int ECDSA_size(const ECDSA *);
int ECDSA_sign_setup(ECDSA *ecdsa, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp);
int ECDSA_sign(int type, const unsigned char *dgst, int dgst_len, unsigned char *sig,
unsigned int *siglen, ECDSA *ecdsa);
int ECDSA_verify(int type, const unsigned char *dgst, int dgst_len, const unsigned char *sig,
const int sig_len, ECDSA *ecdsa);
int ECDSA_up_ref(ECDSA *ecdsa);
void ECDSA_free(ECDSA *a);
int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
int ECDSA_set_ex_data(ECDSA *d, int idx, void *arg);
void *ECDSA_get_ex_data(ECDSA *d, int idx);
#ifndef OPENSSL_NO_BIO
int ECDSAParameters_print(BIO *bp, const ECDSA *x);
int ECDSA_print(BIO *bp, const ECDSA *x, int off);
#endif
#ifndef OPENSSL_NO_FP_API
int ECDSAParameters_print_fp(FILE *fp, const ECDSA *x);
int ECDSA_print_fp(FILE *fp, const ECDSA *x, int off);
#endif
void ECDSA_set_parameter_flags(ECDSA *, int);
int ECDSA_get_parameter_flags(const ECDSA*);
/* the basic de- and encode functions ( see ecs_asn1.c ) */
ECDSA *d2i_ECDSAParameters(ECDSA **a, const unsigned char **in, long len);
int i2d_ECDSAParameters(ECDSA *a, unsigned char **out);
ECDSA *d2i_ECDSAPrivateKey(ECDSA **a, const unsigned char **in, long len);
int i2d_ECDSAPrivateKey(ECDSA *a, unsigned char **out);
ECDSA *d2i_ECDSAPublicKey(ECDSA **a, const unsigned char **in, long len);
int i2d_ECDSAPublicKey(ECDSA *a, unsigned char **out);
#define ECDSAParameters_dup(x) (ECDSA *)ASN1_dup((int (*)())i2d_ECDSAParameters, \
(char *(*)())d2i_ECDSAParameters,(char *)(x))
#define d2i_ECDSAParameters_fp(fp,x) (ECDSA *)ASN1_d2i_fp((char *(*)())ECDSA_new, \
(char *(*)())d2i_ECDSAParameters,(fp),(unsigned char **)(x))
#define i2d_ECDSAParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECDSAParameters,(fp), \
(unsigned char *)(x))
#define d2i_ECDSAParameters_bio(bp,x) (ECDSA *)ASN1_d2i_bio((char *(*)())ECDSA_new, \
(char *(*)())d2i_ECDSAParameters,(bp),(unsigned char **)(x))
#define i2d_ECDSAParameters_bio(bp,x) ASN1_i2d_bio(i2d_ECDSAParameters,(bp), \
(unsigned char *)(x))
/* BEGIN ERROR CODES */
/* The following lines are auto generated by the script mkerr.pl. Any changes
* made after this point may be overwritten when the script is next run.
*/
/* Error codes for the ECDSA functions. */
/* Function codes. */
#define ECDSA_F_D2I_ECDSAPARAMETERS 100
#define ECDSA_F_D2I_ECDSAPRIVATEKEY 101
#define ECDSA_F_ECDSAPARAMETERS_PRINT 102
#define ECDSA_F_ECDSAPARAMETERS_PRINT_FP 103
#define ECDSA_F_ECDSA_DO_SIGN 104
#define ECDSA_F_ECDSA_DO_VERIFY 105
#define ECDSA_F_ECDSA_GENERATE_KEY 106
#define ECDSA_F_ECDSA_GET 107
#define ECDSA_F_ECDSA_GET_CURVE_NID 120
#define ECDSA_F_ECDSA_GET_ECDSA 121
#define ECDSA_F_ECDSA_GET_EC_PARAMETERS 122
#define ECDSA_F_ECDSA_GET_X9_62_CURVE 108
#define ECDSA_F_ECDSA_GET_X9_62_EC_PARAMETERS 109
#define ECDSA_F_ECDSA_GET_X9_62_FIELDID 110
#define ECDSA_F_ECDSA_NEW 111
#define ECDSA_F_ECDSA_PRINT 112
#define ECDSA_F_ECDSA_PRINT_FP 113
#define ECDSA_F_ECDSA_SET_GROUP_P 114
#define ECDSA_F_ECDSA_SET_PRIME_GROUP 123
#define ECDSA_F_ECDSA_SIGN_SETUP 115
#define ECDSA_F_I2D_ECDSAPARAMETERS 116
#define ECDSA_F_I2D_ECDSAPRIVATEKEY 117
#define ECDSA_F_I2D_ECDSAPUBLICKEY 118
#define ECDSA_F_SIG_CB 119
/* Reason codes. */
#define ECDSA_R_BAD_SIGNATURE 100
#define ECDSA_R_CAN_NOT_GET_GENERATOR 101
#define ECDSA_R_D2I_ECDSAPRIVATEKEY_MISSING_PRIVATE_KEY 102
#define ECDSA_R_D2I_ECDSA_PRIVATEKEY_FAILURE 103
#define ECDSA_R_D2I_EC_PARAMETERS_FAILURE 133
#define ECDSA_R_D2I_X9_62_EC_PARAMETERS_FAILURE 104
#define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 105
#define ECDSA_R_ECDSAPRIVATEKEY_NEW_FAILURE 106
#define ECDSA_R_ECDSA_F_ECDSA_NEW 107
#define ECDSA_R_ECDSA_GET_EC_PARAMETERS_FAILURE 134
#define ECDSA_R_ECDSA_GET_FAILURE 108
#define ECDSA_R_ECDSA_GET_X9_62_CURVE_FAILURE 109
#define ECDSA_R_ECDSA_GET_X9_62_EC_PARAMETERS_FAILURE 110
#define ECDSA_R_ECDSA_GET_X9_62_FIELDID_FAILURE 111
#define ECDSA_R_ECDSA_NEW_FAILURE 112
#define ECDSA_R_ECDSA_R_D2I_EC_PARAMETERS_FAILURE 135
#define ECDSA_R_ECDSA_R_D2I_X9_62_EC_PARAMETERS_FAILURE 113
#define ECDSA_R_ECPARAMETERS2ECDSA_FAILURE 138
#define ECDSA_R_EC_GROUP_NID2CURVE_FAILURE 136
#define ECDSA_R_ERR_EC_LIB 114
#define ECDSA_R_I2D_ECDSA_PRIVATEKEY 115
#define ECDSA_R_I2D_ECDSA_PUBLICKEY 116
#define ECDSA_R_MISSING_PARAMETERS 117
#define ECDSA_R_NOT_SUPPORTED 118
#define ECDSA_R_NO_CURVE_PARAMETER_A_SPECIFIED 119
#define ECDSA_R_NO_CURVE_PARAMETER_B_SPECIFIED 120
#define ECDSA_R_NO_CURVE_SPECIFIED 121
#define ECDSA_R_NO_FIELD_SPECIFIED 122
#define ECDSA_R_PRIME_MISSING 123
#define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 124
#define ECDSA_R_SIGNATURE_MALLOC_FAILED 125
#define ECDSA_R_UNEXPECTED_ASN1_TYPE 126
#define ECDSA_R_UNEXPECTED_PARAMETER 127
#define ECDSA_R_UNEXPECTED_PARAMETER_LENGTH 128
#define ECDSA_R_UNEXPECTED_VERSION_NUMER 129
#define ECDSA_R_UNKNOWN_PARAMETERS_TYPE 137
#define ECDSA_R_WRONG_FIELD_IDENTIFIER 130
#define ECDSA_R_X9_62_CURVE_NEW_FAILURE 131
#define ECDSA_R_X9_62_EC_PARAMETERS_NEW_FAILURE 132
#ifdef __cplusplus
}
#endif
#endif
|