OLD | NEW |
1 /* crypto/ec/ec.h */ | 1 /* crypto/ec/ec.h */ |
2 /* | 2 /* |
3 * Originally written by Bodo Moeller for the OpenSSL project. | 3 * Originally written by Bodo Moeller for the OpenSSL project. |
4 */ | 4 */ |
| 5 /** |
| 6 * \file crypto/ec/ec.h Include file for the OpenSSL EC functions |
| 7 * \author Originally written by Bodo Moeller for the OpenSSL project |
| 8 */ |
5 /* ==================================================================== | 9 /* ==================================================================== |
6 * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. | 10 * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. |
7 * | 11 * |
8 * Redistribution and use in source and binary forms, with or without | 12 * Redistribution and use in source and binary forms, with or without |
9 * modification, are permitted provided that the following conditions | 13 * modification, are permitted provided that the following conditions |
10 * are met: | 14 * are met: |
11 * | 15 * |
12 * 1. Redistributions of source code must retain the above copyright | 16 * 1. Redistributions of source code must retain the above copyright |
13 * notice, this list of conditions and the following disclaimer. | 17 * notice, this list of conditions and the following disclaimer. |
14 * | 18 * |
15 * 2. Redistributions in binary form must reproduce the above copyright | 19 * 2. Redistributions in binary form must reproduce the above copyright |
16 * notice, this list of conditions and the following disclaimer in | 20 * notice, this list of conditions and the following disclaimer in |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 #endif | 89 #endif |
86 | 90 |
87 #ifdef __cplusplus | 91 #ifdef __cplusplus |
88 extern "C" { | 92 extern "C" { |
89 #elif defined(__SUNPRO_C) | 93 #elif defined(__SUNPRO_C) |
90 # if __SUNPRO_C >= 0x520 | 94 # if __SUNPRO_C >= 0x520 |
91 # pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) | 95 # pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) |
92 # endif | 96 # endif |
93 #endif | 97 #endif |
94 | 98 |
95 | 99 |
96 #ifndef OPENSSL_ECC_MAX_FIELD_BITS | 100 #ifndef OPENSSL_ECC_MAX_FIELD_BITS |
97 # define OPENSSL_ECC_MAX_FIELD_BITS 661 | 101 # define OPENSSL_ECC_MAX_FIELD_BITS 661 |
98 #endif | 102 #endif |
99 | 103 |
| 104 /** Enum for the point conversion form as defined in X9.62 (ECDSA) |
| 105 * for the encoding of a elliptic curve point (x,y) */ |
100 typedef enum { | 106 typedef enum { |
101 » /* values as defined in X9.62 (ECDSA) and elsewhere */ | 107 » /** the point is encoded as z||x, where the octet z specifies |
| 108 » * which solution of the quadratic equation y is */ |
102 POINT_CONVERSION_COMPRESSED = 2, | 109 POINT_CONVERSION_COMPRESSED = 2, |
| 110 /** the point is encoded as z||x||y, where z is the octet 0x02 */ |
103 POINT_CONVERSION_UNCOMPRESSED = 4, | 111 POINT_CONVERSION_UNCOMPRESSED = 4, |
| 112 /** the point is encoded as z||x||y, where the octet z specifies |
| 113 * which solution of the quadratic equation y is */ |
104 POINT_CONVERSION_HYBRID = 6 | 114 POINT_CONVERSION_HYBRID = 6 |
105 } point_conversion_form_t; | 115 } point_conversion_form_t; |
106 | 116 |
107 | 117 |
108 typedef struct ec_method_st EC_METHOD; | 118 typedef struct ec_method_st EC_METHOD; |
109 | 119 |
110 typedef struct ec_group_st | 120 typedef struct ec_group_st |
111 /* | 121 /* |
112 EC_METHOD *meth; | 122 EC_METHOD *meth; |
113 -- field definition | 123 -- field definition |
114 -- curve coefficients | 124 -- curve coefficients |
115 -- optional generator with associated information (order, cofactor) | 125 -- optional generator with associated information (order, cofactor) |
116 -- optional extra data (precomputed table for fast computation of multi
ples of generator) | 126 -- optional extra data (precomputed table for fast computation of multi
ples of generator) |
117 -- ASN1 stuff | 127 -- ASN1 stuff |
118 */ | 128 */ |
119 EC_GROUP; | 129 EC_GROUP; |
120 | 130 |
121 typedef struct ec_point_st EC_POINT; | 131 typedef struct ec_point_st EC_POINT; |
122 | 132 |
123 | 133 |
124 /* EC_METHODs for curves over GF(p). | 134 /********************************************************************/ |
125 * EC_GFp_simple_method provides the basis for the optimized methods. | 135 /* EC_METHODs for curves over GF(p) */ |
| 136 /********************************************************************/ |
| 137 |
| 138 /** Returns the basic GFp ec methods which provides the basis for the |
| 139 * optimized methods. |
| 140 * \return EC_METHOD object |
126 */ | 141 */ |
127 const EC_METHOD *EC_GFp_simple_method(void); | 142 const EC_METHOD *EC_GFp_simple_method(void); |
| 143 |
| 144 /** Returns GFp methods using montgomery multiplication. |
| 145 * \return EC_METHOD object |
| 146 */ |
128 const EC_METHOD *EC_GFp_mont_method(void); | 147 const EC_METHOD *EC_GFp_mont_method(void); |
| 148 |
| 149 /** Returns GFp methods using optimized methods for NIST recommended curves |
| 150 * \return EC_METHOD object |
| 151 */ |
129 const EC_METHOD *EC_GFp_nist_method(void); | 152 const EC_METHOD *EC_GFp_nist_method(void); |
130 | 153 |
131 /* EC_METHOD for curves over GF(2^m). | 154 |
| 155 /********************************************************************/ |
| 156 /* EC_METHOD for curves over GF(2^m) */ |
| 157 /********************************************************************/ |
| 158 |
| 159 /** Returns the basic GF2m ec method |
| 160 * \return EC_METHOD object |
132 */ | 161 */ |
133 const EC_METHOD *EC_GF2m_simple_method(void); | 162 const EC_METHOD *EC_GF2m_simple_method(void); |
134 | 163 |
135 | 164 |
136 EC_GROUP *EC_GROUP_new(const EC_METHOD *); | 165 /********************************************************************/ |
137 void EC_GROUP_free(EC_GROUP *); | 166 /* EC_GROUP functions */ |
138 void EC_GROUP_clear_free(EC_GROUP *); | 167 /********************************************************************/ |
139 int EC_GROUP_copy(EC_GROUP *, const EC_GROUP *); | |
140 EC_GROUP *EC_GROUP_dup(const EC_GROUP *); | |
141 | 168 |
142 const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *); | 169 /** Creates a new EC_GROUP object |
143 int EC_METHOD_get_field_type(const EC_METHOD *); | 170 * \param meth EC_METHOD to use |
| 171 * \return newly created EC_GROUP object or NULL in case of an error. |
| 172 */ |
| 173 EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); |
144 | 174 |
145 int EC_GROUP_set_generator(EC_GROUP *, const EC_POINT *generator, const BIGNUM *
order, const BIGNUM *cofactor); | 175 /** Frees a EC_GROUP object |
146 const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *); | 176 * \param group EC_GROUP object to be freed. |
147 int EC_GROUP_get_order(const EC_GROUP *, BIGNUM *order, BN_CTX *); | 177 */ |
148 int EC_GROUP_get_cofactor(const EC_GROUP *, BIGNUM *cofactor, BN_CTX *); | 178 void EC_GROUP_free(EC_GROUP *group); |
149 | 179 |
150 void EC_GROUP_set_curve_name(EC_GROUP *, int nid); | 180 /** Clears and frees a EC_GROUP object |
151 int EC_GROUP_get_curve_name(const EC_GROUP *); | 181 * \param group EC_GROUP object to be cleared and freed. |
| 182 */ |
| 183 void EC_GROUP_clear_free(EC_GROUP *group); |
152 | 184 |
153 void EC_GROUP_set_asn1_flag(EC_GROUP *, int flag); | 185 /** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. |
154 int EC_GROUP_get_asn1_flag(const EC_GROUP *); | 186 * \param dst destination EC_GROUP object |
| 187 * \param src source EC_GROUP object |
| 188 * \return 1 on success and 0 if an error occurred. |
| 189 */ |
| 190 int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); |
| 191 |
| 192 /** Creates a new EC_GROUP object and copies the copies the content |
| 193 * form src to the newly created EC_KEY object |
| 194 * \param src source EC_GROUP object |
| 195 * \return newly created EC_GROUP object or NULL in case of an error. |
| 196 */ |
| 197 EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); |
| 198 |
| 199 /** Returns the EC_METHOD of the EC_GROUP object. |
| 200 * \param group EC_GROUP object |
| 201 * \return EC_METHOD used in this EC_GROUP object. |
| 202 */ |
| 203 const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); |
| 204 |
| 205 /** Returns the field type of the EC_METHOD. |
| 206 * \param meth EC_METHOD object |
| 207 * \return NID of the underlying field type OID. |
| 208 */ |
| 209 int EC_METHOD_get_field_type(const EC_METHOD *meth); |
| 210 |
| 211 /** Sets the generator and it's order/cofactor of a EC_GROUP object. |
| 212 * \param group EC_GROUP object |
| 213 * \param generator EC_POINT object with the generator. |
| 214 * \param order the order of the group generated by the generator. |
| 215 * \param cofactor the index of the sub-group generated by the generator |
| 216 * in the group of all points on the elliptic curve. |
| 217 * \return 1 on success and 0 if an error occured |
| 218 */ |
| 219 int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIG
NUM *order, const BIGNUM *cofactor); |
| 220 |
| 221 /** Returns the generator of a EC_GROUP object. |
| 222 * \param group EC_GROUP object |
| 223 * \return the currently used generator (possibly NULL). |
| 224 */ |
| 225 const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); |
| 226 |
| 227 /** Gets the order of a EC_GROUP |
| 228 * \param group EC_GROUP object |
| 229 * \param order BIGNUM to which the order is copied |
| 230 * \param ctx BN_CTX object (optional) |
| 231 * \return 1 on success and 0 if an error occured |
| 232 */ |
| 233 int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); |
| 234 |
| 235 /** Gets the cofactor of a EC_GROUP |
| 236 * \param group EC_GROUP object |
| 237 * \param cofactor BIGNUM to which the cofactor is copied |
| 238 * \param ctx BN_CTX object (optional) |
| 239 * \return 1 on success and 0 if an error occured |
| 240 */ |
| 241 int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx); |
| 242 |
| 243 /** Sets the name of a EC_GROUP object |
| 244 * \param group EC_GROUP object |
| 245 * \param nid NID of the curve name OID |
| 246 */ |
| 247 void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); |
| 248 |
| 249 /** Returns the curve name of a EC_GROUP object |
| 250 * \param group EC_GROUP object |
| 251 * \return NID of the curve name OID or 0 if not set. |
| 252 */ |
| 253 int EC_GROUP_get_curve_name(const EC_GROUP *group); |
| 254 |
| 255 void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); |
| 256 int EC_GROUP_get_asn1_flag(const EC_GROUP *group); |
155 | 257 |
156 void EC_GROUP_set_point_conversion_form(EC_GROUP *, point_conversion_form_t); | 258 void EC_GROUP_set_point_conversion_form(EC_GROUP *, point_conversion_form_t); |
157 point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); | 259 point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); |
158 | 260 |
159 unsigned char *EC_GROUP_get0_seed(const EC_GROUP *); | 261 unsigned char *EC_GROUP_get0_seed(const EC_GROUP *); |
160 size_t EC_GROUP_get_seed_len(const EC_GROUP *); | 262 size_t EC_GROUP_get_seed_len(const EC_GROUP *); |
161 size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); | 263 size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); |
162 | 264 |
163 int EC_GROUP_set_curve_GFp(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const B
IGNUM *b, BN_CTX *); | 265 /** Sets the parameter of a ec over GFp defined by y^2 = x^3 + a*x + b |
164 int EC_GROUP_get_curve_GFp(const EC_GROUP *, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN
_CTX *); | 266 * \param group EC_GROUP object |
165 int EC_GROUP_set_curve_GF2m(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const
BIGNUM *b, BN_CTX *); | 267 * \param p BIGNUM with the prime number |
166 int EC_GROUP_get_curve_GF2m(const EC_GROUP *, BIGNUM *p, BIGNUM *a, BIGNUM *b, B
N_CTX *); | 268 * \param a BIGNUM with parameter a of the equation |
| 269 * \param b BIGNUM with parameter b of the equation |
| 270 * \param ctx BN_CTX object (optional) |
| 271 * \return 1 on success and 0 if an error occured |
| 272 */ |
| 273 int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, co
nst BIGNUM *b, BN_CTX *ctx); |
167 | 274 |
168 /* returns the number of bits needed to represent a field element */ | 275 /** Gets the parameter of the ec over GFp defined by y^2 = x^3 + a*x + b |
169 int EC_GROUP_get_degree(const EC_GROUP *); | 276 * \param group EC_GROUP object |
| 277 * \param p BIGNUM for the prime number |
| 278 * \param a BIGNUM for parameter a of the equation |
| 279 * \param b BIGNUM for parameter b of the equation |
| 280 * \param ctx BN_CTX object (optional) |
| 281 * \return 1 on success and 0 if an error occured |
| 282 */ |
| 283 int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *
b, BN_CTX *ctx); |
170 | 284 |
171 /* EC_GROUP_check() returns 1 if 'group' defines a valid group, 0 otherwise */ | 285 /** Sets the parameter of a ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b |
| 286 * \param group EC_GROUP object |
| 287 * \param p BIGNUM with the polynomial defining the underlying field |
| 288 * \param a BIGNUM with parameter a of the equation |
| 289 * \param b BIGNUM with parameter b of the equation |
| 290 * \param ctx BN_CTX object (optional) |
| 291 * \return 1 on success and 0 if an error occured |
| 292 */ |
| 293 int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, c
onst BIGNUM *b, BN_CTX *ctx); |
| 294 |
| 295 /** Gets the parameter of the ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 +
b |
| 296 * \param group EC_GROUP object |
| 297 * \param p BIGNUM for the polynomial defining the underlying field |
| 298 * \param a BIGNUM for parameter a of the equation |
| 299 * \param b BIGNUM for parameter b of the equation |
| 300 * \param ctx BN_CTX object (optional) |
| 301 * \return 1 on success and 0 if an error occured |
| 302 */ |
| 303 int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM
*b, BN_CTX *ctx); |
| 304 |
| 305 /** Returns the number of bits needed to represent a field element |
| 306 * \param group EC_GROUP object |
| 307 * \return number of bits needed to represent a field element |
| 308 */ |
| 309 int EC_GROUP_get_degree(const EC_GROUP *group); |
| 310 |
| 311 /** Checks whether the parameter in the EC_GROUP define a valid ec group |
| 312 * \param group EC_GROUP object |
| 313 * \param ctx BN_CTX object (optional) |
| 314 * \return 1 if group is a valid ec group and 0 otherwise |
| 315 */ |
172 int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); | 316 int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); |
173 /* EC_GROUP_check_discriminant() returns 1 if the discriminant of the | |
174 * elliptic curve is not zero, 0 otherwise */ | |
175 int EC_GROUP_check_discriminant(const EC_GROUP *, BN_CTX *); | |
176 | 317 |
177 /* EC_GROUP_cmp() returns 0 if both groups are equal and 1 otherwise */ | 318 /** Checks whether the discriminant of the elliptic curve is zero or not |
178 int EC_GROUP_cmp(const EC_GROUP *, const EC_GROUP *, BN_CTX *); | 319 * \param group EC_GROUP object |
| 320 * \param ctx BN_CTX object (optional) |
| 321 * \return 1 if the discriminant is not zero and 0 otherwise |
| 322 */ |
| 323 int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); |
| 324 |
| 325 /** Compares two EC_GROUP objects |
| 326 * \param a first EC_GROUP object |
| 327 * \param b second EC_GROUP object |
| 328 * \param ctx BN_CTX object (optional) |
| 329 * \return 0 if both groups are equal and 1 otherwise |
| 330 */ |
| 331 int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); |
179 | 332 |
180 /* EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() | 333 /* EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() |
181 * after choosing an appropriate EC_METHOD */ | 334 * after choosing an appropriate EC_METHOD */ |
182 EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM
*b, BN_CTX *); | |
183 EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM
*b, BN_CTX *); | |
184 | 335 |
185 /* EC_GROUP_new_by_curve_name() creates a EC_GROUP structure | 336 /** Creates a new EC_GROUP object with the specified parameters defined |
186 * specified by a curve name (in form of a NID) */ | 337 * over GFp (defined by the equation y^2 = x^3 + a*x + b) |
| 338 * \param p BIGNUM with the prime number |
| 339 * \param a BIGNUM with the parameter a of the equation |
| 340 * \param b BIGNUM with the parameter b of the equation |
| 341 * \param ctx BN_CTX object (optional) |
| 342 * \return newly created EC_GROUP object with the specified parameters |
| 343 */ |
| 344 EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM
*b, BN_CTX *ctx); |
| 345 |
| 346 /** Creates a new EC_GROUP object with the specified parameters defined |
| 347 * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) |
| 348 * \param p BIGNUM with the polynomial defining the underlying field |
| 349 * \param a BIGNUM with the parameter a of the equation |
| 350 * \param b BIGNUM with the parameter b of the equation |
| 351 * \param ctx BN_CTX object (optional) |
| 352 * \return newly created EC_GROUP object with the specified parameters |
| 353 */ |
| 354 EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM
*b, BN_CTX *ctx); |
| 355 |
| 356 /** Creates a EC_GROUP object with a curve specified by a NID |
| 357 * \param nid NID of the OID of the curve name |
| 358 * \return newly created EC_GROUP object with specified curve or NULL |
| 359 * if an error occurred |
| 360 */ |
187 EC_GROUP *EC_GROUP_new_by_curve_name(int nid); | 361 EC_GROUP *EC_GROUP_new_by_curve_name(int nid); |
188 /* handling of internal curves */ | 362 |
| 363 |
| 364 /********************************************************************/ |
| 365 /* handling of internal curves */ |
| 366 /********************************************************************/ |
| 367 |
189 typedef struct { | 368 typedef struct { |
190 int nid; | 369 int nid; |
191 const char *comment; | 370 const char *comment; |
192 } EC_builtin_curve; | 371 } EC_builtin_curve; |
| 372 |
193 /* EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number | 373 /* EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number |
194 * of all available curves or zero if a error occurred. | 374 * of all available curves or zero if a error occurred. |
195 * In case r ist not zero nitems EC_builtin_curve structures | 375 * In case r ist not zero nitems EC_builtin_curve structures |
196 * are filled with the data of the first nitems internal groups */ | 376 * are filled with the data of the first nitems internal groups */ |
197 size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); | 377 size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); |
198 | 378 |
199 | 379 |
200 /* EC_POINT functions */ | 380 /********************************************************************/ |
| 381 /* EC_POINT functions */ |
| 382 /********************************************************************/ |
201 | 383 |
202 EC_POINT *EC_POINT_new(const EC_GROUP *); | 384 /** Creates a new EC_POINT object for the specified EC_GROUP |
203 void EC_POINT_free(EC_POINT *); | 385 * \param group EC_GROUP the underlying EC_GROUP object |
204 void EC_POINT_clear_free(EC_POINT *); | 386 * \return newly created EC_POINT object or NULL if an error occurred |
205 int EC_POINT_copy(EC_POINT *, const EC_POINT *); | 387 */ |
206 EC_POINT *EC_POINT_dup(const EC_POINT *, const EC_GROUP *); | 388 EC_POINT *EC_POINT_new(const EC_GROUP *group); |
| 389 |
| 390 /** Frees a EC_POINT object |
| 391 * \param point EC_POINT object to be freed |
| 392 */ |
| 393 void EC_POINT_free(EC_POINT *point); |
| 394 |
| 395 /** Clears and frees a EC_POINT object |
| 396 * \param point EC_POINT object to be cleared and freed |
| 397 */ |
| 398 void EC_POINT_clear_free(EC_POINT *point); |
| 399 |
| 400 /** Copies EC_POINT object |
| 401 * \param dst destination EC_POINT object |
| 402 * \param src source EC_POINT object |
| 403 * \return 1 on success and 0 if an error occured |
| 404 */ |
| 405 int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); |
| 406 |
| 407 /** Creates a new EC_POINT object and copies the content of the supplied |
| 408 * EC_POINT |
| 409 * \param src source EC_POINT object |
| 410 * \param group underlying the EC_GROUP object |
| 411 * \return newly created EC_POINT object or NULL if an error occurred |
| 412 */ |
| 413 EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); |
207 | 414 |
208 const EC_METHOD *EC_POINT_method_of(const EC_POINT *); | 415 /** Returns the EC_METHOD used in EC_POINT object |
| 416 * \param point EC_POINT object |
| 417 * \return the EC_METHOD used |
| 418 */ |
| 419 const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); |
209 | 420 |
210 int EC_POINT_set_to_infinity(const EC_GROUP *, EC_POINT *); | 421 /** Sets a point to infinity (neutral element) |
211 int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *, EC_POINT *, | 422 * \param group underlying EC_GROUP object |
212 » const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *); | 423 * \param point EC_POINT to set to infinity |
213 int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *, const EC_POINT *, | 424 * \return 1 on success and 0 if an error occured |
214 » BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *); | 425 */ |
215 int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *, EC_POINT *, | 426 int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); |
216 » const BIGNUM *x, const BIGNUM *y, BN_CTX *); | |
217 int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *, const EC_POINT *, | |
218 » BIGNUM *x, BIGNUM *y, BN_CTX *); | |
219 int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *, EC_POINT *, | |
220 » const BIGNUM *x, int y_bit, BN_CTX *); | |
221 | 427 |
222 int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *, EC_POINT *, | 428 /** Sets the jacobian projective coordinates of a EC_POINT over GFp |
223 » const BIGNUM *x, const BIGNUM *y, BN_CTX *); | 429 * \param group underlying EC_GROUP object |
224 int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *, const EC_POINT *, | 430 * \param p EC_POINT object |
225 » BIGNUM *x, BIGNUM *y, BN_CTX *); | 431 * \param x BIGNUM with the x-coordinate |
226 int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *, EC_POINT *, | 432 * \param y BIGNUM with the y-coordinate |
227 » const BIGNUM *x, int y_bit, BN_CTX *); | 433 * \param z BIGNUM with the z-coordinate |
| 434 * \param ctx BN_CTX object (optional) |
| 435 * \return 1 on success and 0 if an error occured |
| 436 */ |
| 437 int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, |
| 438 » const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *ctx); |
228 | 439 |
229 size_t EC_POINT_point2oct(const EC_GROUP *, const EC_POINT *, point_conversion_f
orm_t form, | 440 /** Gets the jacobian projective coordinates of a EC_POINT over GFp |
230 unsigned char *buf, size_t len, BN_CTX *); | 441 * \param group underlying EC_GROUP object |
231 int EC_POINT_oct2point(const EC_GROUP *, EC_POINT *, | 442 * \param p EC_POINT object |
232 const unsigned char *buf, size_t len, BN_CTX *); | 443 * \param x BIGNUM for the x-coordinate |
| 444 * \param y BIGNUM for the y-coordinate |
| 445 * \param z BIGNUM for the z-coordinate |
| 446 * \param ctx BN_CTX object (optional) |
| 447 * \return 1 on success and 0 if an error occured |
| 448 */ |
| 449 int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, |
| 450 » const EC_POINT *p, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); |
| 451 |
| 452 /** Sets the affine coordinates of a EC_POINT over GFp |
| 453 * \param group underlying EC_GROUP object |
| 454 * \param p EC_POINT object |
| 455 * \param x BIGNUM with the x-coordinate |
| 456 * \param y BIGNUM with the y-coordinate |
| 457 * \param ctx BN_CTX object (optional) |
| 458 * \return 1 on success and 0 if an error occured |
| 459 */ |
| 460 int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, |
| 461 » const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); |
| 462 |
| 463 /** Gets the affine coordinates of a EC_POINT over GFp |
| 464 * \param group underlying EC_GROUP object |
| 465 * \param p EC_POINT object |
| 466 * \param x BIGNUM for the x-coordinate |
| 467 * \param y BIGNUM for the y-coordinate |
| 468 * \param ctx BN_CTX object (optional) |
| 469 * \return 1 on success and 0 if an error occured |
| 470 */ |
| 471 int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, |
| 472 » const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); |
| 473 |
| 474 /** Sets the x9.62 compressed coordinates of a EC_POINT over GFp |
| 475 * \param group underlying EC_GROUP object |
| 476 * \param p EC_POINT object |
| 477 * \param x BIGNUM with x-coordinate |
| 478 * \param y_bit integer with the y-Bit (either 0 or 1) |
| 479 * \param ctx BN_CTX object (optional) |
| 480 * \return 1 on success and 0 if an error occured |
| 481 */ |
| 482 int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, |
| 483 » const BIGNUM *x, int y_bit, BN_CTX *ctx); |
| 484 |
| 485 /** Sets the affine coordinates of a EC_POINT over GF2m |
| 486 * \param group underlying EC_GROUP object |
| 487 * \param p EC_POINT object |
| 488 * \param x BIGNUM with the x-coordinate |
| 489 * \param y BIGNUM with the y-coordinate |
| 490 * \param ctx BN_CTX object (optional) |
| 491 * \return 1 on success and 0 if an error occured |
| 492 */ |
| 493 int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, |
| 494 » const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); |
| 495 |
| 496 /** Gets the affine coordinates of a EC_POINT over GF2m |
| 497 * \param group underlying EC_GROUP object |
| 498 * \param p EC_POINT object |
| 499 * \param x BIGNUM for the x-coordinate |
| 500 * \param y BIGNUM for the y-coordinate |
| 501 * \param ctx BN_CTX object (optional) |
| 502 * \return 1 on success and 0 if an error occured |
| 503 */ |
| 504 int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, |
| 505 » const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); |
| 506 |
| 507 /** Sets the x9.62 compressed coordinates of a EC_POINT over GF2m |
| 508 * \param group underlying EC_GROUP object |
| 509 * \param p EC_POINT object |
| 510 * \param x BIGNUM with x-coordinate |
| 511 * \param y_bit integer with the y-Bit (either 0 or 1) |
| 512 * \param ctx BN_CTX object (optional) |
| 513 * \return 1 on success and 0 if an error occured |
| 514 */ |
| 515 int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, |
| 516 » const BIGNUM *x, int y_bit, BN_CTX *ctx); |
| 517 |
| 518 /** Encodes a EC_POINT object to a octet string |
| 519 * \param group underlying EC_GROUP object |
| 520 * \param p EC_POINT object |
| 521 * \param form point conversion form |
| 522 * \param buf memory buffer for the result. If NULL the function returns |
| 523 * required buffer size. |
| 524 * \param len length of the memory buffer |
| 525 * \param ctx BN_CTX object (optional) |
| 526 * \return the length of the encoded octet string or 0 if an error occurred |
| 527 */ |
| 528 size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, |
| 529 » point_conversion_form_t form, |
| 530 unsigned char *buf, size_t len, BN_CTX *ctx); |
| 531 |
| 532 /** Decodes a EC_POINT from a octet string |
| 533 * \param group underlying EC_GROUP object |
| 534 * \param p EC_POINT object |
| 535 * \param buf memory buffer with the encoded ec point |
| 536 * \param len length of the encoded ec point |
| 537 * \param ctx BN_CTX object (optional) |
| 538 * \return 1 on success and 0 if an error occured |
| 539 */ |
| 540 int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, |
| 541 const unsigned char *buf, size_t len, BN_CTX *ctx); |
233 | 542 |
234 /* other interfaces to point2oct/oct2point: */ | 543 /* other interfaces to point2oct/oct2point: */ |
235 BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, | 544 BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, |
236 point_conversion_form_t form, BIGNUM *, BN_CTX *); | 545 point_conversion_form_t form, BIGNUM *, BN_CTX *); |
237 EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, | 546 EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, |
238 EC_POINT *, BN_CTX *); | 547 EC_POINT *, BN_CTX *); |
239 char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, | 548 char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, |
240 point_conversion_form_t form, BN_CTX *); | 549 point_conversion_form_t form, BN_CTX *); |
241 EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, | 550 EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, |
242 EC_POINT *, BN_CTX *); | 551 EC_POINT *, BN_CTX *); |
243 | 552 |
244 int EC_POINT_add(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, const EC_POIN
T *b, BN_CTX *); | |
245 int EC_POINT_dbl(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, BN_CTX *); | |
246 int EC_POINT_invert(const EC_GROUP *, EC_POINT *, BN_CTX *); | |
247 | 553 |
248 int EC_POINT_is_at_infinity(const EC_GROUP *, const EC_POINT *); | 554 /********************************************************************/ |
249 int EC_POINT_is_on_curve(const EC_GROUP *, const EC_POINT *, BN_CTX *); | 555 /* functions for doing EC_POINT arithmetic */ |
250 int EC_POINT_cmp(const EC_GROUP *, const EC_POINT *a, const EC_POINT *b, BN_CTX
*); | 556 /********************************************************************/ |
| 557 |
| 558 /** Computes the sum of two EC_POINT |
| 559 * \param group underlying EC_GROUP object |
| 560 * \param r EC_POINT object for the result (r = a + b) |
| 561 * \param a EC_POINT object with the first summand |
| 562 * \param b EC_POINT object with the second summand |
| 563 * \param ctx BN_CTX object (optional) |
| 564 * \return 1 on success and 0 if an error occured |
| 565 */ |
| 566 int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC
_POINT *b, BN_CTX *ctx); |
| 567 |
| 568 /** Computes the double of a EC_POINT |
| 569 * \param group underlying EC_GROUP object |
| 570 * \param r EC_POINT object for the result (r = 2 * a) |
| 571 * \param a EC_POINT object |
| 572 * \param ctx BN_CTX object (optional) |
| 573 * \return 1 on success and 0 if an error occured |
| 574 */ |
| 575 int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *
ctx); |
| 576 |
| 577 /** Computes the inverse of a EC_POINT |
| 578 * \param group underlying EC_GROUP object |
| 579 * \param a EC_POINT object to be inverted (it's used for the result as w
ell) |
| 580 * \param ctx BN_CTX object (optional) |
| 581 * \return 1 on success and 0 if an error occured |
| 582 */ |
| 583 int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); |
| 584 |
| 585 /** Checks whether the point is the neutral element of the group |
| 586 * \param group the underlying EC_GROUP object |
| 587 * \param p EC_POINT object |
| 588 * \return 1 if the point is the neutral element and 0 otherwise |
| 589 */ |
| 590 int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); |
| 591 |
| 592 /** Checks whether the point is on the curve |
| 593 * \param group underlying EC_GROUP object |
| 594 * \param point EC_POINT object to check |
| 595 * \param ctx BN_CTX object (optional) |
| 596 * \return 1 if point if on the curve and 0 otherwise |
| 597 */ |
| 598 int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *c
tx); |
| 599 |
| 600 /** Compares two EC_POINTs |
| 601 * \param group underlying EC_GROUP object |
| 602 * \param a first EC_POINT object |
| 603 * \param b second EC_POINT object |
| 604 * \param ctx BN_CTX object (optional) |
| 605 * \return 0 if both points are equal and a value != 0 otherwise |
| 606 */ |
| 607 int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN
_CTX *ctx); |
251 | 608 |
252 int EC_POINT_make_affine(const EC_GROUP *, EC_POINT *, BN_CTX *); | 609 int EC_POINT_make_affine(const EC_GROUP *, EC_POINT *, BN_CTX *); |
253 int EC_POINTs_make_affine(const EC_GROUP *, size_t num, EC_POINT *[], BN_CTX *); | 610 int EC_POINTs_make_affine(const EC_GROUP *, size_t num, EC_POINT *[], BN_CTX *); |
254 | 611 |
| 612 /** Computes r = generator * n sum_{i=0}^num p[i] * m[i] |
| 613 * \param group underlying EC_GROUP object |
| 614 * \param r EC_POINT object for the result |
| 615 * \param n BIGNUM with the multiplier for the group generator (optional) |
| 616 * \param num number futher summands |
| 617 * \param p array of size num of EC_POINT objects |
| 618 * \param m array of size num of BIGNUM objects |
| 619 * \param ctx BN_CTX object (optional) |
| 620 * \return 1 on success and 0 if an error occured |
| 621 */ |
| 622 int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t nu
m, const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx); |
255 | 623 |
256 int EC_POINTs_mul(const EC_GROUP *, EC_POINT *r, const BIGNUM *, size_t num, con
st EC_POINT *[], const BIGNUM *[], BN_CTX *); | 624 /** Computes r = generator * n + q * m |
257 int EC_POINT_mul(const EC_GROUP *, EC_POINT *r, const BIGNUM *, const EC_POINT *
, const BIGNUM *, BN_CTX *); | 625 * \param group underlying EC_GROUP object |
| 626 * \param r EC_POINT object for the result |
| 627 * \param n BIGNUM with the multiplier for the group generator (optional) |
| 628 * \param q EC_POINT object with the first factor of the second summand |
| 629 * \param m BIGNUM with the second factor of the second summand |
| 630 * \param ctx BN_CTX object (optional) |
| 631 * \return 1 on success and 0 if an error occured |
| 632 */ |
| 633 int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_P
OINT *q, const BIGNUM *m, BN_CTX *ctx); |
258 | 634 |
259 /* EC_GROUP_precompute_mult() stores multiples of generator for faster point mul
tiplication */ | 635 /** Stores multiples of generator for faster point multiplication |
260 int EC_GROUP_precompute_mult(EC_GROUP *, BN_CTX *); | 636 * \param group EC_GROUP object |
261 /* EC_GROUP_have_precompute_mult() reports whether such precomputation has been
done */ | 637 * \param ctx BN_CTX object (optional) |
262 int EC_GROUP_have_precompute_mult(const EC_GROUP *); | 638 * \return 1 on success and 0 if an error occured |
| 639 */ |
| 640 int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); |
| 641 |
| 642 /** Reports whether a precomputation has been done |
| 643 * \param group EC_GROUP object |
| 644 * \return 1 if a pre-computation has been done and 0 otherwise |
| 645 */ |
| 646 int EC_GROUP_have_precompute_mult(const EC_GROUP *group); |
263 | 647 |
264 | 648 |
265 | 649 /********************************************************************/ |
266 /* ASN1 stuff */ | 650 /* ASN1 stuff */ |
| 651 /********************************************************************/ |
267 | 652 |
268 /* EC_GROUP_get_basis_type() returns the NID of the basis type | 653 /* EC_GROUP_get_basis_type() returns the NID of the basis type |
269 * used to represent the field elements */ | 654 * used to represent the field elements */ |
270 int EC_GROUP_get_basis_type(const EC_GROUP *); | 655 int EC_GROUP_get_basis_type(const EC_GROUP *); |
271 int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); | 656 int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); |
272 int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, | 657 int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, |
273 unsigned int *k2, unsigned int *k3); | 658 unsigned int *k2, unsigned int *k3); |
274 | 659 |
275 #define OPENSSL_EC_NAMED_CURVE 0x001 | 660 #define OPENSSL_EC_NAMED_CURVE 0x001 |
276 | 661 |
277 typedef struct ecpk_parameters_st ECPKPARAMETERS; | 662 typedef struct ecpk_parameters_st ECPKPARAMETERS; |
278 | 663 |
279 EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); | 664 EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); |
280 int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); | 665 int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); |
281 | 666 |
282 #define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParam
eters,bp,x) | 667 #define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParam
eters,bp,x) |
283 #define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKPara
meters,bp,x) | 668 #define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKPara
meters,bp,x) |
284 #define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ | 669 #define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ |
285 (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) | 670 (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) |
286 #define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ | 671 #define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ |
287 (unsigned char *)(x)) | 672 (unsigned char *)(x)) |
288 | 673 |
289 #ifndef OPENSSL_NO_BIO | 674 #ifndef OPENSSL_NO_BIO |
290 int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); | 675 int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); |
291 #endif | 676 #endif |
292 #ifndef OPENSSL_NO_FP_API | 677 #ifndef OPENSSL_NO_FP_API |
293 int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); | 678 int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); |
294 #endif | 679 #endif |
295 | 680 |
296 /* the EC_KEY stuff */ | 681 |
| 682 /********************************************************************/ |
| 683 /* EC_KEY functions */ |
| 684 /********************************************************************/ |
| 685 |
297 typedef struct ec_key_st EC_KEY; | 686 typedef struct ec_key_st EC_KEY; |
298 | 687 |
299 /* some values for the encoding_flag */ | 688 /* some values for the encoding_flag */ |
300 #define EC_PKEY_NO_PARAMETERS 0x001 | 689 #define EC_PKEY_NO_PARAMETERS 0x001 |
301 #define EC_PKEY_NO_PUBKEY 0x002 | 690 #define EC_PKEY_NO_PUBKEY 0x002 |
302 | 691 |
| 692 /** Creates a new EC_KEY object. |
| 693 * \return EC_KEY object or NULL if an error occurred. |
| 694 */ |
303 EC_KEY *EC_KEY_new(void); | 695 EC_KEY *EC_KEY_new(void); |
| 696 |
| 697 /** Creates a new EC_KEY object using a named curve as underlying |
| 698 * EC_GROUP object. |
| 699 * \param nid NID of the named curve. |
| 700 * \return EC_KEY object or NULL if an error occurred. |
| 701 */ |
304 EC_KEY *EC_KEY_new_by_curve_name(int nid); | 702 EC_KEY *EC_KEY_new_by_curve_name(int nid); |
305 void EC_KEY_free(EC_KEY *); | |
306 EC_KEY *EC_KEY_copy(EC_KEY *, const EC_KEY *); | |
307 EC_KEY *EC_KEY_dup(const EC_KEY *); | |
308 | 703 |
309 int EC_KEY_up_ref(EC_KEY *); | 704 /** Frees a EC_KEY object. |
| 705 * \param key EC_KEY object to be freed. |
| 706 */ |
| 707 void EC_KEY_free(EC_KEY *key); |
310 | 708 |
311 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *); | 709 /** Copies a EC_KEY object. |
312 int EC_KEY_set_group(EC_KEY *, const EC_GROUP *); | 710 * \param dst destination EC_KEY object |
313 const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *); | 711 * \param src src EC_KEY object |
314 int EC_KEY_set_private_key(EC_KEY *, const BIGNUM *); | 712 * \return dst or NULL if an error occurred. |
315 const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *); | 713 */ |
316 int EC_KEY_set_public_key(EC_KEY *, const EC_POINT *); | 714 EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); |
317 unsigned EC_KEY_get_enc_flags(const EC_KEY *); | 715 |
| 716 /** Creates a new EC_KEY object and copies the content from src to it. |
| 717 * \param src the source EC_KEY object |
| 718 * \return newly created EC_KEY object or NULL if an error occurred. |
| 719 */ |
| 720 EC_KEY *EC_KEY_dup(const EC_KEY *src); |
| 721 |
| 722 /** Increases the internal reference count of a EC_KEY object. |
| 723 * \param key EC_KEY object |
| 724 * \return 1 on success and 0 if an error occurred. |
| 725 */ |
| 726 int EC_KEY_up_ref(EC_KEY *key); |
| 727 |
| 728 /** Returns the EC_GROUP object of a EC_KEY object |
| 729 * \param key EC_KEY object |
| 730 * \return the EC_GROUP object (possibly NULL). |
| 731 */ |
| 732 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); |
| 733 |
| 734 /** Sets the EC_GROUP of a EC_KEY object. |
| 735 * \param key EC_KEY object |
| 736 * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY |
| 737 * object will use an own copy of the EC_GROUP). |
| 738 * \return 1 on success and 0 if an error occurred. |
| 739 */ |
| 740 int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); |
| 741 |
| 742 /** Returns the private key of a EC_KEY object. |
| 743 * \param key EC_KEY object |
| 744 * \return a BIGNUM with the private key (possibly NULL). |
| 745 */ |
| 746 const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); |
| 747 |
| 748 /** Sets the private key of a EC_KEY object. |
| 749 * \param key EC_KEY object |
| 750 * \param prv BIGNUM with the private key (note: the EC_KEY object |
| 751 * will use an own copy of the BIGNUM). |
| 752 * \return 1 on success and 0 if an error occurred. |
| 753 */ |
| 754 int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); |
| 755 |
| 756 /** Returns the public key of a EC_KEY object. |
| 757 * \param key the EC_KEY object |
| 758 * \return a EC_POINT object with the public key (possibly NULL) |
| 759 */ |
| 760 const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); |
| 761 |
| 762 /** Sets the public key of a EC_KEY object. |
| 763 * \param key EC_KEY object |
| 764 * \param pub EC_POINT object with the public key (note: the EC_KEY object |
| 765 * will use an own copy of the EC_POINT object). |
| 766 * \return 1 on success and 0 if an error occurred. |
| 767 */ |
| 768 int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); |
| 769 |
| 770 unsigned EC_KEY_get_enc_flags(const EC_KEY *key); |
318 void EC_KEY_set_enc_flags(EC_KEY *, unsigned int); | 771 void EC_KEY_set_enc_flags(EC_KEY *, unsigned int); |
319 point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *); | 772 point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *); |
320 void EC_KEY_set_conv_form(EC_KEY *, point_conversion_form_t); | 773 void EC_KEY_set_conv_form(EC_KEY *, point_conversion_form_t); |
321 /* functions to set/get method specific data */ | 774 /* functions to set/get method specific data */ |
322 void *EC_KEY_get_key_method_data(EC_KEY *, | 775 void *EC_KEY_get_key_method_data(EC_KEY *, |
323 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_
func)(void *)); | 776 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_
func)(void *)); |
324 void EC_KEY_insert_key_method_data(EC_KEY *, void *data, | 777 void EC_KEY_insert_key_method_data(EC_KEY *, void *data, |
325 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_
func)(void *)); | 778 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_
func)(void *)); |
326 /* wrapper functions for the underlying EC_GROUP object */ | 779 /* wrapper functions for the underlying EC_GROUP object */ |
327 void EC_KEY_set_asn1_flag(EC_KEY *, int); | 780 void EC_KEY_set_asn1_flag(EC_KEY *, int); |
328 int EC_KEY_precompute_mult(EC_KEY *, BN_CTX *ctx); | |
329 | 781 |
330 /* EC_KEY_generate_key() creates a ec private (public) key */ | 782 /** Creates a table of pre-computed multiples of the generator to |
331 int EC_KEY_generate_key(EC_KEY *); | 783 * accelerate further EC_KEY operations. |
332 /* EC_KEY_check_key() */ | 784 * \param key EC_KEY object |
333 int EC_KEY_check_key(const EC_KEY *); | 785 * \param ctx BN_CTX object (optional) |
| 786 * \return 1 on success and 0 if an error occurred. |
| 787 */ |
| 788 int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); |
334 | 789 |
335 /* de- and encoding functions for SEC1 ECPrivateKey */ | 790 /** Creates a new ec private (and optional a new public) key. |
336 EC_KEY *d2i_ECPrivateKey(EC_KEY **a, const unsigned char **in, long len); | 791 * \param key EC_KEY object |
337 int i2d_ECPrivateKey(EC_KEY *a, unsigned char **out); | 792 * \return 1 on success and 0 if an error occurred. |
338 /* de- and encoding functions for EC parameters */ | 793 */ |
339 EC_KEY *d2i_ECParameters(EC_KEY **a, const unsigned char **in, long len); | 794 int EC_KEY_generate_key(EC_KEY *key); |
340 int i2d_ECParameters(EC_KEY *a, unsigned char **out); | 795 |
341 /* de- and encoding functions for EC public key | 796 /** Verifies that a private and/or public key is valid. |
342 * (octet string, not DER -- hence 'o2i' and 'i2o') */ | 797 * \param key the EC_KEY object |
343 EC_KEY *o2i_ECPublicKey(EC_KEY **a, const unsigned char **in, long len); | 798 * \return 1 on success and 0 otherwise. |
344 int i2o_ECPublicKey(EC_KEY *a, unsigned char **out); | 799 */ |
| 800 int EC_KEY_check_key(const EC_KEY *key); |
| 801 |
| 802 |
| 803 /********************************************************************/ |
| 804 /* de- and encoding functions for SEC1 ECPrivateKey */ |
| 805 /********************************************************************/ |
| 806 |
| 807 /** Decodes a private key from a memory buffer. |
| 808 * \param key a pointer to a EC_KEY object which should be used (or NULL) |
| 809 * \param in pointer to memory with the DER encoded private key |
| 810 * \param len length of the DER encoded private key |
| 811 * \return the decoded private key or NULL if an error occurred. |
| 812 */ |
| 813 EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); |
| 814 |
| 815 /** Encodes a private key object and stores the result in a buffer. |
| 816 * \param key the EC_KEY object to encode |
| 817 * \param out the buffer for the result (if NULL the function returns number |
| 818 * of bytes needed). |
| 819 * \return 1 on success and 0 if an error occurred. |
| 820 */ |
| 821 int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); |
| 822 |
| 823 |
| 824 /********************************************************************/ |
| 825 /* de- and encoding functions for EC parameters */ |
| 826 /********************************************************************/ |
| 827 |
| 828 /** Decodes ec parameter from a memory buffer. |
| 829 * \param key a pointer to a EC_KEY object which should be used (or NULL) |
| 830 * \param in pointer to memory with the DER encoded ec parameters |
| 831 * \param len length of the DER encoded ec parameters |
| 832 * \return a EC_KEY object with the decoded parameters or NULL if an error |
| 833 * occurred. |
| 834 */ |
| 835 EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); |
| 836 |
| 837 /** Encodes ec parameter and stores the result in a buffer. |
| 838 * \param key the EC_KEY object with ec paramters to encode |
| 839 * \param out the buffer for the result (if NULL the function returns number |
| 840 * of bytes needed). |
| 841 * \return 1 on success and 0 if an error occurred. |
| 842 */ |
| 843 int i2d_ECParameters(EC_KEY *key, unsigned char **out); |
| 844 |
| 845 |
| 846 /********************************************************************/ |
| 847 /* de- and encoding functions for EC public key */ |
| 848 /* (octet string, not DER -- hence 'o2i' and 'i2o') */ |
| 849 /********************************************************************/ |
| 850 |
| 851 /** Decodes a ec public key from a octet string. |
| 852 * \param key a pointer to a EC_KEY object which should be used |
| 853 * \param in memory buffer with the encoded public key |
| 854 * \param len length of the encoded public key |
| 855 * \return EC_KEY object with decoded public key or NULL if an error |
| 856 * occurred. |
| 857 */ |
| 858 EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); |
| 859 |
| 860 /** Encodes a ec public key in an octet string. |
| 861 * \param key the EC_KEY object with the public key |
| 862 * \param out the buffer for the result (if NULL the function returns number |
| 863 * of bytes needed). |
| 864 * \return 1 on success and 0 if an error occurred |
| 865 */ |
| 866 int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); |
345 | 867 |
346 #ifndef OPENSSL_NO_BIO | 868 #ifndef OPENSSL_NO_BIO |
347 int» ECParameters_print(BIO *bp, const EC_KEY *x); | 869 /** Prints out the ec parameters on human readable form. |
348 int» EC_KEY_print(BIO *bp, const EC_KEY *x, int off); | 870 * \param bp BIO object to which the information is printed |
| 871 * \param key EC_KEY object |
| 872 * \return 1 on success and 0 if an error occurred |
| 873 */ |
| 874 int» ECParameters_print(BIO *bp, const EC_KEY *key); |
| 875 |
| 876 /** Prints out the contents of a EC_KEY object |
| 877 * \param bp BIO object to which the information is printed |
| 878 * \param key EC_KEY object |
| 879 * \param off line offset |
| 880 * \return 1 on success and 0 if an error occurred |
| 881 */ |
| 882 int» EC_KEY_print(BIO *bp, const EC_KEY *key, int off); |
| 883 |
349 #endif | 884 #endif |
350 #ifndef OPENSSL_NO_FP_API | 885 #ifndef OPENSSL_NO_FP_API |
351 int» ECParameters_print_fp(FILE *fp, const EC_KEY *x); | 886 /** Prints out the ec parameters on human readable form. |
352 int» EC_KEY_print_fp(FILE *fp, const EC_KEY *x, int off); | 887 * \param fp file descriptor to which the information is printed |
| 888 * \param key EC_KEY object |
| 889 * \return 1 on success and 0 if an error occurred |
| 890 */ |
| 891 int» ECParameters_print_fp(FILE *fp, const EC_KEY *key); |
| 892 |
| 893 /** Prints out the contents of a EC_KEY object |
| 894 * \param fp file descriptor to which the information is printed |
| 895 * \param key EC_KEY object |
| 896 * \param off line offset |
| 897 * \return 1 on success and 0 if an error occurred |
| 898 */ |
| 899 int» EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); |
| 900 |
353 #endif | 901 #endif |
354 | 902 |
355 #define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters
,x) | 903 #define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters
,x) |
356 | 904 |
357 #ifndef __cplusplus | 905 #ifndef __cplusplus |
358 #if defined(__SUNPRO_C) | 906 #if defined(__SUNPRO_C) |
359 # if __SUNPRO_C >= 0x520 | 907 # if __SUNPRO_C >= 0x520 |
360 # pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPL
ETE) | 908 # pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPL
ETE) |
361 # endif | 909 # endif |
362 # endif | 910 # endif |
363 #endif | 911 #endif |
364 | 912 |
| 913 #define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ |
| 914 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, EVP_PKEY_OP_PARAMGEN, \ |
| 915 EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) |
| 916 |
| 917 |
| 918 #define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) |
| 919 |
365 /* BEGIN ERROR CODES */ | 920 /* BEGIN ERROR CODES */ |
366 /* The following lines are auto generated by the script mkerr.pl. Any changes | 921 /* The following lines are auto generated by the script mkerr.pl. Any changes |
367 * made after this point may be overwritten when the script is next run. | 922 * made after this point may be overwritten when the script is next run. |
368 */ | 923 */ |
369 void ERR_load_EC_strings(void); | 924 void ERR_load_EC_strings(void); |
370 | 925 |
371 /* Error codes for the EC functions. */ | 926 /* Error codes for the EC functions. */ |
372 | 927 |
373 /* Function codes. */ | 928 /* Function codes. */ |
374 #define EC_F_COMPUTE_WNAF 143 | 929 #define EC_F_COMPUTE_WNAF 143 |
375 #define EC_F_D2I_ECPARAMETERS 144 | 930 #define EC_F_D2I_ECPARAMETERS 144 |
376 #define EC_F_D2I_ECPKPARAMETERS 145 | 931 #define EC_F_D2I_ECPKPARAMETERS 145 |
377 #define EC_F_D2I_ECPRIVATEKEY 146 | 932 #define EC_F_D2I_ECPRIVATEKEY 146 |
| 933 #define EC_F_DO_EC_KEY_PRINT 221 |
| 934 #define EC_F_ECKEY_PARAM2TYPE 223 |
| 935 #define EC_F_ECKEY_PARAM_DECODE 212 |
| 936 #define EC_F_ECKEY_PRIV_DECODE 213 |
| 937 #define EC_F_ECKEY_PRIV_ENCODE 214 |
| 938 #define EC_F_ECKEY_PUB_DECODE 215 |
| 939 #define EC_F_ECKEY_PUB_ENCODE 216 |
| 940 #define EC_F_ECKEY_TYPE2PARAM 220 |
378 #define EC_F_ECPARAMETERS_PRINT 147 | 941 #define EC_F_ECPARAMETERS_PRINT 147 |
379 #define EC_F_ECPARAMETERS_PRINT_FP 148 | 942 #define EC_F_ECPARAMETERS_PRINT_FP 148 |
380 #define EC_F_ECPKPARAMETERS_PRINT 149 | 943 #define EC_F_ECPKPARAMETERS_PRINT 149 |
381 #define EC_F_ECPKPARAMETERS_PRINT_FP 150 | 944 #define EC_F_ECPKPARAMETERS_PRINT_FP 150 |
382 #define EC_F_ECP_NIST_MOD_192 203 | 945 #define EC_F_ECP_NIST_MOD_192 203 |
383 #define EC_F_ECP_NIST_MOD_224 204 | 946 #define EC_F_ECP_NIST_MOD_224 204 |
384 #define EC_F_ECP_NIST_MOD_256 205 | 947 #define EC_F_ECP_NIST_MOD_256 205 |
385 #define EC_F_ECP_NIST_MOD_521 206 | 948 #define EC_F_ECP_NIST_MOD_521 206 |
386 #define EC_F_EC_ASN1_GROUP2CURVE 153 | 949 #define EC_F_EC_ASN1_GROUP2CURVE 153 |
387 #define EC_F_EC_ASN1_GROUP2FIELDID 154 | 950 #define EC_F_EC_ASN1_GROUP2FIELDID 154 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 #define EC_F_EC_GROUP_SET_CURVE_GFP 109 | 1004 #define EC_F_EC_GROUP_SET_CURVE_GFP 109 |
442 #define EC_F_EC_GROUP_SET_EXTRA_DATA 110 | 1005 #define EC_F_EC_GROUP_SET_EXTRA_DATA 110 |
443 #define EC_F_EC_GROUP_SET_GENERATOR 111 | 1006 #define EC_F_EC_GROUP_SET_GENERATOR 111 |
444 #define EC_F_EC_KEY_CHECK_KEY 177 | 1007 #define EC_F_EC_KEY_CHECK_KEY 177 |
445 #define EC_F_EC_KEY_COPY 178 | 1008 #define EC_F_EC_KEY_COPY 178 |
446 #define EC_F_EC_KEY_GENERATE_KEY 179 | 1009 #define EC_F_EC_KEY_GENERATE_KEY 179 |
447 #define EC_F_EC_KEY_NEW 182 | 1010 #define EC_F_EC_KEY_NEW 182 |
448 #define EC_F_EC_KEY_PRINT 180 | 1011 #define EC_F_EC_KEY_PRINT 180 |
449 #define EC_F_EC_KEY_PRINT_FP 181 | 1012 #define EC_F_EC_KEY_PRINT_FP 181 |
450 #define EC_F_EC_POINTS_MAKE_AFFINE 136 | 1013 #define EC_F_EC_POINTS_MAKE_AFFINE 136 |
451 #define EC_F_EC_POINTS_MUL 138 | |
452 #define EC_F_EC_POINT_ADD 112 | 1014 #define EC_F_EC_POINT_ADD 112 |
453 #define EC_F_EC_POINT_CMP 113 | 1015 #define EC_F_EC_POINT_CMP 113 |
454 #define EC_F_EC_POINT_COPY 114 | 1016 #define EC_F_EC_POINT_COPY 114 |
455 #define EC_F_EC_POINT_DBL 115 | 1017 #define EC_F_EC_POINT_DBL 115 |
456 #define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 | 1018 #define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 |
457 #define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 | 1019 #define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 |
458 #define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 | 1020 #define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 |
459 #define EC_F_EC_POINT_INVERT 210 | 1021 #define EC_F_EC_POINT_INVERT 210 |
460 #define EC_F_EC_POINT_IS_AT_INFINITY 118 | 1022 #define EC_F_EC_POINT_IS_AT_INFINITY 118 |
461 #define EC_F_EC_POINT_IS_ON_CURVE 119 | 1023 #define EC_F_EC_POINT_IS_ON_CURVE 119 |
(...skipping 10 matching lines...) Expand all Loading... |
472 #define EC_F_EC_POINT_SET_TO_INFINITY 127 | 1034 #define EC_F_EC_POINT_SET_TO_INFINITY 127 |
473 #define EC_F_EC_PRE_COMP_DUP 207 | 1035 #define EC_F_EC_PRE_COMP_DUP 207 |
474 #define EC_F_EC_PRE_COMP_NEW 196 | 1036 #define EC_F_EC_PRE_COMP_NEW 196 |
475 #define EC_F_EC_WNAF_MUL 187 | 1037 #define EC_F_EC_WNAF_MUL 187 |
476 #define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 | 1038 #define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 |
477 #define EC_F_I2D_ECPARAMETERS 190 | 1039 #define EC_F_I2D_ECPARAMETERS 190 |
478 #define EC_F_I2D_ECPKPARAMETERS 191 | 1040 #define EC_F_I2D_ECPKPARAMETERS 191 |
479 #define EC_F_I2D_ECPRIVATEKEY 192 | 1041 #define EC_F_I2D_ECPRIVATEKEY 192 |
480 #define EC_F_I2O_ECPUBLICKEY 151 | 1042 #define EC_F_I2O_ECPUBLICKEY 151 |
481 #define EC_F_O2I_ECPUBLICKEY 152 | 1043 #define EC_F_O2I_ECPUBLICKEY 152 |
| 1044 #define EC_F_OLD_EC_PRIV_DECODE 222 |
| 1045 #define EC_F_PKEY_EC_CTRL 197 |
| 1046 #define EC_F_PKEY_EC_CTRL_STR 198 |
| 1047 #define EC_F_PKEY_EC_DERIVE 217 |
| 1048 #define EC_F_PKEY_EC_KEYGEN 199 |
| 1049 #define EC_F_PKEY_EC_PARAMGEN 219 |
| 1050 #define EC_F_PKEY_EC_SIGN 218 |
482 | 1051 |
483 /* Reason codes. */ | 1052 /* Reason codes. */ |
484 #define EC_R_ASN1_ERROR 115 | 1053 #define EC_R_ASN1_ERROR 115 |
485 #define EC_R_ASN1_UNKNOWN_FIELD 116 | 1054 #define EC_R_ASN1_UNKNOWN_FIELD 116 |
486 #define EC_R_BUFFER_TOO_SMALL 100 | 1055 #define EC_R_BUFFER_TOO_SMALL 100 |
487 #define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 | 1056 #define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 |
| 1057 #define EC_R_DECODE_ERROR 142 |
488 #define EC_R_DISCRIMINANT_IS_ZERO 118 | 1058 #define EC_R_DISCRIMINANT_IS_ZERO 118 |
489 #define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 | 1059 #define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 |
490 #define EC_R_FIELD_TOO_LARGE» » » » 138 | 1060 #define EC_R_FIELD_TOO_LARGE» » » » 143 |
491 #define EC_R_GROUP2PKPARAMETERS_FAILURE 120 | 1061 #define EC_R_GROUP2PKPARAMETERS_FAILURE 120 |
492 #define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 | 1062 #define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 |
493 #define EC_R_INCOMPATIBLE_OBJECTS 101 | 1063 #define EC_R_INCOMPATIBLE_OBJECTS 101 |
494 #define EC_R_INVALID_ARGUMENT 112 | 1064 #define EC_R_INVALID_ARGUMENT 112 |
495 #define EC_R_INVALID_COMPRESSED_POINT 110 | 1065 #define EC_R_INVALID_COMPRESSED_POINT 110 |
496 #define EC_R_INVALID_COMPRESSION_BIT 109 | 1066 #define EC_R_INVALID_COMPRESSION_BIT 109 |
| 1067 #define EC_R_INVALID_CURVE 141 |
| 1068 #define EC_R_INVALID_DIGEST_TYPE 138 |
497 #define EC_R_INVALID_ENCODING 102 | 1069 #define EC_R_INVALID_ENCODING 102 |
498 #define EC_R_INVALID_FIELD 103 | 1070 #define EC_R_INVALID_FIELD 103 |
499 #define EC_R_INVALID_FORM 104 | 1071 #define EC_R_INVALID_FORM 104 |
500 #define EC_R_INVALID_GROUP_ORDER 122 | 1072 #define EC_R_INVALID_GROUP_ORDER 122 |
501 #define EC_R_INVALID_PENTANOMIAL_BASIS 132 | 1073 #define EC_R_INVALID_PENTANOMIAL_BASIS 132 |
502 #define EC_R_INVALID_PRIVATE_KEY 123 | 1074 #define EC_R_INVALID_PRIVATE_KEY 123 |
503 #define EC_R_INVALID_TRINOMIAL_BASIS 137 | 1075 #define EC_R_INVALID_TRINOMIAL_BASIS 137 |
| 1076 #define EC_R_KEYS_NOT_SET 140 |
504 #define EC_R_MISSING_PARAMETERS 124 | 1077 #define EC_R_MISSING_PARAMETERS 124 |
505 #define EC_R_MISSING_PRIVATE_KEY 125 | 1078 #define EC_R_MISSING_PRIVATE_KEY 125 |
506 #define EC_R_NOT_A_NIST_PRIME 135 | 1079 #define EC_R_NOT_A_NIST_PRIME 135 |
507 #define EC_R_NOT_A_SUPPORTED_NIST_PRIME 136 | 1080 #define EC_R_NOT_A_SUPPORTED_NIST_PRIME 136 |
508 #define EC_R_NOT_IMPLEMENTED 126 | 1081 #define EC_R_NOT_IMPLEMENTED 126 |
509 #define EC_R_NOT_INITIALIZED 111 | 1082 #define EC_R_NOT_INITIALIZED 111 |
510 #define EC_R_NO_FIELD_MOD 133 | 1083 #define EC_R_NO_FIELD_MOD 133 |
| 1084 #define EC_R_NO_PARAMETERS_SET 139 |
511 #define EC_R_PASSED_NULL_PARAMETER 134 | 1085 #define EC_R_PASSED_NULL_PARAMETER 134 |
512 #define EC_R_PKPARAMETERS2GROUP_FAILURE 127 | 1086 #define EC_R_PKPARAMETERS2GROUP_FAILURE 127 |
513 #define EC_R_POINT_AT_INFINITY 106 | 1087 #define EC_R_POINT_AT_INFINITY 106 |
514 #define EC_R_POINT_IS_NOT_ON_CURVE 107 | 1088 #define EC_R_POINT_IS_NOT_ON_CURVE 107 |
515 #define EC_R_SLOT_FULL 108 | 1089 #define EC_R_SLOT_FULL 108 |
516 #define EC_R_UNDEFINED_GENERATOR 113 | 1090 #define EC_R_UNDEFINED_GENERATOR 113 |
517 #define EC_R_UNDEFINED_ORDER 128 | 1091 #define EC_R_UNDEFINED_ORDER 128 |
518 #define EC_R_UNKNOWN_GROUP 129 | 1092 #define EC_R_UNKNOWN_GROUP 129 |
519 #define EC_R_UNKNOWN_ORDER 114 | 1093 #define EC_R_UNKNOWN_ORDER 114 |
520 #define EC_R_UNSUPPORTED_FIELD 131 | 1094 #define EC_R_UNSUPPORTED_FIELD 131 |
521 #define EC_R_WRONG_ORDER 130 | 1095 #define EC_R_WRONG_ORDER 130 |
522 | 1096 |
523 #ifdef __cplusplus | 1097 #ifdef __cplusplus |
524 } | 1098 } |
525 #endif | 1099 #endif |
526 #endif | 1100 #endif |
OLD | NEW |