summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/ec/ec.h
diff options
context:
space:
mode:
authorcvs2svn <admin@example.com>2025-04-14 17:32:06 +0000
committercvs2svn <admin@example.com>2025-04-14 17:32:06 +0000
commiteb8dd9dca1228af0cd132f515509051ecfabf6f6 (patch)
treeedb6da6af7e865d488dc1a29309f1e1ec226e603 /src/lib/libcrypto/ec/ec.h
parent247f0352e0ed72a4f476db9dc91f4d982bc83eb2 (diff)
downloadopenbsd-tb_20250414.tar.gz
openbsd-tb_20250414.tar.bz2
openbsd-tb_20250414.zip
This commit was manufactured by cvs2git to create tag 'tb_20250414'.tb_20250414
Diffstat (limited to 'src/lib/libcrypto/ec/ec.h')
-rw-r--r--src/lib/libcrypto/ec/ec.h675
1 files changed, 0 insertions, 675 deletions
diff --git a/src/lib/libcrypto/ec/ec.h b/src/lib/libcrypto/ec/ec.h
deleted file mode 100644
index 5438dd8013..0000000000
--- a/src/lib/libcrypto/ec/ec.h
+++ /dev/null
@@ -1,675 +0,0 @@
1/* $OpenBSD: ec.h,v 1.55 2025/03/10 08:38:11 tb Exp $ */
2/*
3 * Originally written by Bodo Moeller for the OpenSSL project.
4 */
5/* ====================================================================
6 * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * openssl-core@openssl.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58/* ====================================================================
59 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
60 *
61 * Portions of the attached software ("Contribution") are developed by
62 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
63 *
64 * The Contribution is licensed pursuant to the OpenSSL open source
65 * license provided above.
66 *
67 * The elliptic curve binary polynomial software is originally written by
68 * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
69 */
70
71#ifndef HEADER_EC_H
72#define HEADER_EC_H
73
74#include <openssl/opensslconf.h>
75
76#include <openssl/asn1.h>
77#include <openssl/bn.h>
78
79#ifdef __cplusplus
80extern "C" {
81#endif
82
83#ifndef OPENSSL_ECC_MAX_FIELD_BITS
84#define OPENSSL_ECC_MAX_FIELD_BITS 661
85#endif
86
87/* Elliptic point conversion form as per X9.62, page 4 and section 4.4.2. */
88typedef enum {
89 POINT_CONVERSION_COMPRESSED = 2,
90 POINT_CONVERSION_UNCOMPRESSED = 4,
91 POINT_CONVERSION_HYBRID = 6
92} point_conversion_form_t;
93
94typedef struct ec_group_st EC_GROUP;
95typedef struct ec_point_st EC_POINT;
96
97void EC_GROUP_free(EC_GROUP *group);
98void EC_GROUP_clear_free(EC_GROUP *group);
99
100EC_GROUP *EC_GROUP_dup(const EC_GROUP *src);
101
102int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator,
103 const BIGNUM *order, const BIGNUM *cofactor);
104const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);
105
106int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
107int EC_GROUP_order_bits(const EC_GROUP *group);
108int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
109
110void EC_GROUP_set_curve_name(EC_GROUP *group, int nid);
111int EC_GROUP_get_curve_name(const EC_GROUP *group);
112
113void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
114int EC_GROUP_get_asn1_flag(const EC_GROUP *group);
115
116void EC_GROUP_set_point_conversion_form(EC_GROUP *group,
117 point_conversion_form_t form);
118point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);
119
120unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
121size_t EC_GROUP_get_seed_len(const EC_GROUP *);
122size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);
123
124int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a,
125 const BIGNUM *b, BN_CTX *ctx);
126int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b,
127 BN_CTX *ctx);
128
129int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a,
130 const BIGNUM *b, BN_CTX *ctx);
131int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a,
132 BIGNUM *b, BN_CTX *ctx);
133
134int EC_GROUP_get_degree(const EC_GROUP *group);
135
136int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);
137int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx);
138
139/* Compare two EC_GROUPs. Returns 0 if both groups are equal, 1 otherwise. */
140int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx);
141
142EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a,
143 const BIGNUM *b, BN_CTX *ctx);
144EC_GROUP *EC_GROUP_new_by_curve_name(int nid);
145
146typedef struct {
147 int nid;
148 const char *comment;
149} EC_builtin_curve;
150
151size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
152
153const char *EC_curve_nid2nist(int nid);
154int EC_curve_nist2nid(const char *name);
155
156EC_POINT *EC_POINT_new(const EC_GROUP *group);
157void EC_POINT_free(EC_POINT *point);
158void EC_POINT_clear_free(EC_POINT *point);
159int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);
160EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);
161
162int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point);
163
164int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p,
165 const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
166int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p,
167 BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
168int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p,
169 const BIGNUM *x, int y_bit, BN_CTX *ctx);
170
171int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
172 const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
173int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
174 const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
175int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
176 const BIGNUM *x, int y_bit, BN_CTX *ctx);
177size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p,
178 point_conversion_form_t form, unsigned char *buf, size_t len, BN_CTX *ctx);
179int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p,
180 const unsigned char *buf, size_t len, BN_CTX *ctx);
181
182BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *,
183 point_conversion_form_t form, BIGNUM *, BN_CTX *);
184EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, EC_POINT *,
185 BN_CTX *);
186char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *,
187 point_conversion_form_t form, BN_CTX *);
188EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, EC_POINT *,
189 BN_CTX *);
190
191int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
192 const EC_POINT *b, BN_CTX *ctx);
193int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
194 BN_CTX *ctx);
195int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);
196int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);
197int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
198 BN_CTX *ctx);
199int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b,
200 BN_CTX *ctx);
201
202int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
203int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n,
204 const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
205
206int EC_GROUP_get_basis_type(const EC_GROUP *);
207
208#define OPENSSL_EC_EXPLICIT_CURVE 0x000
209#define OPENSSL_EC_NAMED_CURVE 0x001
210
211EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len);
212int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out);
213
214#define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x)
215#define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x)
216#define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \
217 (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x))
218#define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \
219 (unsigned char *)(x))
220
221#ifndef OPENSSL_NO_BIO
222int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off);
223#endif
224int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off);
225
226#define EC_PKEY_NO_PARAMETERS 0x001
227#define EC_PKEY_NO_PUBKEY 0x002
228
229#define EC_FLAG_NON_FIPS_ALLOW 0x1
230#define EC_FLAG_FIPS_CHECKED 0x2
231#define EC_FLAG_COFACTOR_ECDH 0x1000
232
233EC_KEY *EC_KEY_new(void);
234int EC_KEY_get_flags(const EC_KEY *key);
235void EC_KEY_set_flags(EC_KEY *key, int flags);
236void EC_KEY_clear_flags(EC_KEY *key, int flags);
237EC_KEY *EC_KEY_new_by_curve_name(int nid);
238void EC_KEY_free(EC_KEY *key);
239EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src);
240EC_KEY *EC_KEY_dup(const EC_KEY *src);
241int EC_KEY_up_ref(EC_KEY *key);
242
243const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
244int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
245const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);
246int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
247const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
248int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
249
250unsigned EC_KEY_get_enc_flags(const EC_KEY *key);
251void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags);
252point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);
253void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);
254
255void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);
256int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx);
257int EC_KEY_generate_key(EC_KEY *key);
258int EC_KEY_check_key(const EC_KEY *key);
259int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y);
260
261EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len);
262int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out);
263EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len);
264int i2d_ECParameters(EC_KEY *key, unsigned char **out);
265
266EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len);
267int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out);
268
269#ifndef OPENSSL_NO_BIO
270int ECParameters_print(BIO *bp, const EC_KEY *key);
271int EC_KEY_print(BIO *bp, const EC_KEY *key, int off);
272#endif
273int ECParameters_print_fp(FILE *fp, const EC_KEY *key);
274int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off);
275
276#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \
277 CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef)
278int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg);
279void *EC_KEY_get_ex_data(const EC_KEY *key, int idx);
280
281const EC_KEY_METHOD *EC_KEY_OpenSSL(void);
282const EC_KEY_METHOD *EC_KEY_get_default_method(void);
283void EC_KEY_set_default_method(const EC_KEY_METHOD *meth);
284const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key);
285int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth);
286EC_KEY *EC_KEY_new_method(ENGINE *engine);
287
288int ECDH_size(const EC_KEY *ecdh);
289int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
290 EC_KEY *ecdh,
291 void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen));
292
293typedef struct ECDSA_SIG_st ECDSA_SIG;
294
295ECDSA_SIG *ECDSA_SIG_new(void);
296void ECDSA_SIG_free(ECDSA_SIG *sig);
297int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp);
298ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len);
299
300const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig);
301const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig);
302void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
303int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s);
304
305int ECDSA_size(const EC_KEY *eckey);
306
307ECDSA_SIG *ECDSA_do_sign(const unsigned char *digest, int digest_len,
308 EC_KEY *eckey);
309int ECDSA_do_verify(const unsigned char *digest, int digest_len,
310 const ECDSA_SIG *sig, EC_KEY *eckey);
311
312int ECDSA_sign(int type, const unsigned char *digest, int digest_len,
313 unsigned char *signature, unsigned int *signature_len, EC_KEY *eckey);
314int ECDSA_verify(int type, const unsigned char *digest, int digest_len,
315 const unsigned char *signature, int signature_len, EC_KEY *eckey);
316
317EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth);
318void EC_KEY_METHOD_free(EC_KEY_METHOD *meth);
319void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth,
320 int (*init)(EC_KEY *key),
321 void (*finish)(EC_KEY *key),
322 int (*copy)(EC_KEY *dest, const EC_KEY *src),
323 int (*set_group)(EC_KEY *key, const EC_GROUP *grp),
324 int (*set_private)(EC_KEY *key, const BIGNUM *priv_key),
325 int (*set_public)(EC_KEY *key, const EC_POINT *pub_key));
326void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth,
327 int (*keygen)(EC_KEY *key));
328void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth,
329 int (*ckey)(unsigned char **out, size_t *out_len, const EC_POINT *pub_key,
330 const EC_KEY *ecdh));
331void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth,
332 int (*sign)(int type, const unsigned char *digest, int digest_len,
333 unsigned char *signature, unsigned int *signature_len,
334 const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey),
335 int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp),
336 ECDSA_SIG *(*sign_sig)(const unsigned char *digest, int digest_len,
337 const BIGNUM *in_kinv, const BIGNUM *in_r, EC_KEY *eckey));
338void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth,
339 int (*verify)(int type, const unsigned char *digest, int digest_len,
340 const unsigned char *signature, int signature_len, EC_KEY *eckey),
341 int (*verify_sig)(const unsigned char *digest, int digest_len,
342 const ECDSA_SIG *sig, EC_KEY *eckey));
343void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth,
344 int (**pinit)(EC_KEY *key),
345 void (**pfinish)(EC_KEY *key),
346 int (**pcopy)(EC_KEY *dest, const EC_KEY *src),
347 int (**pset_group)(EC_KEY *key, const EC_GROUP *grp),
348 int (**pset_private)(EC_KEY *key, const BIGNUM *priv_key),
349 int (**pset_public)(EC_KEY *key, const EC_POINT *pub_key));
350void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth,
351 int (**pkeygen)(EC_KEY *key));
352void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth,
353 int (**pck)(unsigned char **out, size_t *out_len, const EC_POINT *pub_key,
354 const EC_KEY *ecdh));
355void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth,
356 int (**psign)(int type, const unsigned char *digest, int digest_len,
357 unsigned char *signature, unsigned int *signature_len,
358 const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey),
359 int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp),
360 ECDSA_SIG *(**psign_sig)(const unsigned char *digest, int digest_len,
361 const BIGNUM *in_kinv, const BIGNUM *in_r, EC_KEY *eckey));
362void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth,
363 int (**pverify)(int type, const unsigned char *digest, int digest_len,
364 const unsigned char *signature, int signature_len, EC_KEY *eckey),
365 int (**pverify_sig)(const unsigned char *digest, int digest_len,
366 const ECDSA_SIG *sig, EC_KEY *eckey));
367
368EC_KEY *ECParameters_dup(EC_KEY *key);
369
370#define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \
371 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
372 EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \
373 EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL)
374
375#define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \
376 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
377 EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \
378 EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL)
379
380#define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \
381 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
382 EVP_PKEY_OP_DERIVE, \
383 EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL)
384
385#define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \
386 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
387 EVP_PKEY_OP_DERIVE, \
388 EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL)
389
390#define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \
391 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
392 EVP_PKEY_OP_DERIVE, \
393 EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL)
394
395#define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \
396 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
397 EVP_PKEY_OP_DERIVE, \
398 EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL)
399
400#define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \
401 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
402 EVP_PKEY_OP_DERIVE, \
403 EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md))
404
405#define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \
406 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
407 EVP_PKEY_OP_DERIVE, \
408 EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd))
409
410#define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \
411 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
412 EVP_PKEY_OP_DERIVE, \
413 EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL)
414
415#define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \
416 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
417 EVP_PKEY_OP_DERIVE, \
418 EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \
419 (void *)(plen))
420
421#define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \
422 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
423 EVP_PKEY_OP_DERIVE, \
424 EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p))
425
426#define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \
427 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
428 EVP_PKEY_OP_DERIVE, \
429 EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p))
430
431/* SM2 will skip the operation check so no need to pass operation here */
432#define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \
433 EVP_PKEY_CTX_ctrl(ctx, -1, -1, \
434 EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id))
435
436#define EVP_PKEY_CTX_get1_id(ctx, id) \
437 EVP_PKEY_CTX_ctrl(ctx, -1, -1, \
438 EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id))
439
440#define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \
441 EVP_PKEY_CTX_ctrl(ctx, -1, -1, \
442 EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len))
443
444#define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1)
445#define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2)
446#define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3)
447#define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4)
448#define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5)
449#define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6)
450#define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7)
451#define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8)
452#define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9)
453#define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10)
454#define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11)
455#define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12)
456#define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13)
457
458/* KDF types */
459#define EVP_PKEY_ECDH_KDF_NONE 1
460#define EVP_PKEY_ECDH_KDF_X9_63 2
461
462void ERR_load_EC_strings(void);
463
464/* Error codes for the EC functions. */
465
466/* Function codes. */
467#define EC_F_BN_TO_FELEM 224
468#define EC_F_COMPUTE_WNAF 143
469#define EC_F_D2I_ECPARAMETERS 144
470#define EC_F_D2I_ECPKPARAMETERS 145
471#define EC_F_D2I_ECPRIVATEKEY 146
472#define EC_F_DO_EC_KEY_PRINT 221
473#define EC_F_ECKEY_PARAM2TYPE 223
474#define EC_F_ECKEY_PARAM_DECODE 212
475#define EC_F_ECKEY_PRIV_DECODE 213
476#define EC_F_ECKEY_PRIV_ENCODE 214
477#define EC_F_ECKEY_PUB_DECODE 215
478#define EC_F_ECKEY_PUB_ENCODE 216
479#define EC_F_ECKEY_TYPE2PARAM 220
480#define EC_F_ECPARAMETERS_PRINT 147
481#define EC_F_ECPARAMETERS_PRINT_FP 148
482#define EC_F_ECPKPARAMETERS_PRINT 149
483#define EC_F_ECPKPARAMETERS_PRINT_FP 150
484#define EC_F_ECP_NIST_MOD_192 203
485#define EC_F_ECP_NIST_MOD_224 204
486#define EC_F_ECP_NIST_MOD_256 205
487#define EC_F_ECP_NIST_MOD_521 206
488#define EC_F_ECP_NISTZ256_GET_AFFINE 240
489#define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243
490#define EC_F_ECP_NISTZ256_POINTS_MUL 241
491#define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244
492#define EC_F_ECP_NISTZ256_SET_WORDS 245
493#define EC_F_ECP_NISTZ256_WINDOWED_MUL 242
494#define EC_F_EC_ASN1_GROUP2CURVE 153
495#define EC_F_EC_ASN1_GROUP2FIELDID 154
496#define EC_F_EC_ASN1_GROUP2PARAMETERS 155
497#define EC_F_EC_ASN1_GROUP2PKPARAMETERS 156
498#define EC_F_EC_ASN1_PARAMETERS2GROUP 157
499#define EC_F_EC_ASN1_PKPARAMETERS2GROUP 158
500#define EC_F_EC_EX_DATA_SET_DATA 211
501#define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208
502#define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159
503#define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195
504#define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160
505#define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161
506#define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162
507#define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163
508#define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164
509#define EC_F_EC_GFP_MONT_FIELD_DECODE 133
510#define EC_F_EC_GFP_MONT_FIELD_ENCODE 134
511#define EC_F_EC_GFP_MONT_FIELD_MUL 131
512#define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209
513#define EC_F_EC_GFP_MONT_FIELD_SQR 132
514#define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189
515#define EC_F_EC_GFP_MONT_GROUP_SET_CURVE_GFP 135
516#define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225
517#define EC_F_EC_GFP_NISTP224_POINTS_MUL 228
518#define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226
519#define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230
520#define EC_F_EC_GFP_NISTP256_POINTS_MUL 231
521#define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232
522#define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233
523#define EC_F_EC_GFP_NISTP521_POINTS_MUL 234
524#define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235
525#define EC_F_EC_GFP_NIST_FIELD_MUL 200
526#define EC_F_EC_GFP_NIST_FIELD_SQR 201
527#define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202
528#define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165
529#define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166
530#define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP 100
531#define EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR 101
532#define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102
533#define EC_F_EC_GFP_SIMPLE_OCT2POINT 103
534#define EC_F_EC_GFP_SIMPLE_POINT2OCT 104
535#define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137
536#define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167
537#define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP 105
538#define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168
539#define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP 128
540#define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169
541#define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP 129
542#define EC_F_EC_GROUP_CHECK 170
543#define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171
544#define EC_F_EC_GROUP_COPY 106
545#define EC_F_EC_GROUP_GET0_GENERATOR 139
546#define EC_F_EC_GROUP_GET_COFACTOR 140
547#define EC_F_EC_GROUP_GET_CURVE_GF2M 172
548#define EC_F_EC_GROUP_GET_CURVE_GFP 130
549#define EC_F_EC_GROUP_GET_DEGREE 173
550#define EC_F_EC_GROUP_GET_ORDER 141
551#define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193
552#define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194
553#define EC_F_EC_GROUP_NEW 108
554#define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174
555#define EC_F_EC_GROUP_NEW_FROM_DATA 175
556#define EC_F_EC_GROUP_PRECOMPUTE_MULT 142
557#define EC_F_EC_GROUP_SET_CURVE_GF2M 176
558#define EC_F_EC_GROUP_SET_CURVE_GFP 109
559#define EC_F_EC_GROUP_SET_EXTRA_DATA 110
560#define EC_F_EC_GROUP_SET_GENERATOR 111
561#define EC_F_EC_KEY_CHECK_KEY 177
562#define EC_F_EC_KEY_COPY 178
563#define EC_F_EC_KEY_GENERATE_KEY 179
564#define EC_F_EC_KEY_NEW 182
565#define EC_F_EC_KEY_PRINT 180
566#define EC_F_EC_KEY_PRINT_FP 181
567#define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229
568#define EC_F_EC_POINTS_MAKE_AFFINE 136
569#define EC_F_EC_POINT_ADD 112
570#define EC_F_EC_POINT_CMP 113
571#define EC_F_EC_POINT_COPY 114
572#define EC_F_EC_POINT_DBL 115
573#define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183
574#define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116
575#define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117
576#define EC_F_EC_POINT_INVERT 210
577#define EC_F_EC_POINT_IS_AT_INFINITY 118
578#define EC_F_EC_POINT_IS_ON_CURVE 119
579#define EC_F_EC_POINT_MAKE_AFFINE 120
580#define EC_F_EC_POINT_MUL 184
581#define EC_F_EC_POINT_NEW 121
582#define EC_F_EC_POINT_OCT2POINT 122
583#define EC_F_EC_POINT_POINT2OCT 123
584#define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185
585#define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124
586#define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186
587#define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125
588#define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126
589#define EC_F_EC_POINT_SET_TO_INFINITY 127
590#define EC_F_EC_PRE_COMP_DUP 207
591#define EC_F_EC_PRE_COMP_NEW 196
592#define EC_F_EC_WNAF_MUL 187
593#define EC_F_EC_WNAF_PRECOMPUTE_MULT 188
594#define EC_F_I2D_ECPARAMETERS 190
595#define EC_F_I2D_ECPKPARAMETERS 191
596#define EC_F_I2D_ECPRIVATEKEY 192
597#define EC_F_I2O_ECPUBLICKEY 151
598#define EC_F_NISTP224_PRE_COMP_NEW 227
599#define EC_F_NISTP256_PRE_COMP_NEW 236
600#define EC_F_NISTP521_PRE_COMP_NEW 237
601#define EC_F_O2I_ECPUBLICKEY 152
602#define EC_F_OLD_EC_PRIV_DECODE 222
603#define EC_F_PKEY_EC_CTRL 197
604#define EC_F_PKEY_EC_CTRL_STR 198
605#define EC_F_PKEY_EC_DERIVE 217
606#define EC_F_PKEY_EC_KEYGEN 199
607#define EC_F_PKEY_EC_PARAMGEN 219
608#define EC_F_PKEY_EC_SIGN 218
609
610/* Reason codes. */
611#define EC_R_ASN1_ERROR 115
612#define EC_R_ASN1_UNKNOWN_FIELD 116
613#define EC_R_BAD_SIGNATURE 166
614#define EC_R_BIGNUM_OUT_OF_RANGE 144
615#define EC_R_BUFFER_TOO_SMALL 100
616#define EC_R_COORDINATES_OUT_OF_RANGE 146
617#define EC_R_D2I_ECPKPARAMETERS_FAILURE 117
618#define EC_R_DECODE_ERROR 142
619#define EC_R_DISCRIMINANT_IS_ZERO 118
620#define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119
621#define EC_R_FIELD_TOO_LARGE 143
622#define EC_R_GF2M_NOT_SUPPORTED 147
623#define EC_R_GROUP2PKPARAMETERS_FAILURE 120
624#define EC_R_I2D_ECPKPARAMETERS_FAILURE 121
625#define EC_R_INCOMPATIBLE_OBJECTS 101
626#define EC_R_INVALID_ARGUMENT 112
627#define EC_R_INVALID_COMPRESSED_POINT 110
628#define EC_R_INVALID_COMPRESSION_BIT 109
629#define EC_R_INVALID_CURVE 141
630#define EC_R_INVALID_DIGEST 151
631#define EC_R_INVALID_DIGEST_TYPE 138
632#define EC_R_INVALID_ENCODING 102
633#define EC_R_INVALID_FIELD 103
634#define EC_R_INVALID_FORM 104
635#define EC_R_INVALID_GROUP_ORDER 122
636#define EC_R_INVALID_KEY 165
637#define EC_R_INVALID_OUTPUT_LENGTH 171
638#define EC_R_INVALID_PEER_KEY 152
639#define EC_R_INVALID_PENTANOMIAL_BASIS 132
640#define EC_R_INVALID_PRIVATE_KEY 123
641#define EC_R_INVALID_TRINOMIAL_BASIS 137
642#define EC_R_KDF_FAILED 167
643#define EC_R_KDF_PARAMETER_ERROR 148
644#define EC_R_KEY_TRUNCATION 168
645#define EC_R_KEYS_NOT_SET 140
646#define EC_R_MISSING_PARAMETERS 124
647#define EC_R_MISSING_PRIVATE_KEY 125
648#define EC_R_NEED_NEW_SETUP_VALUES 170
649#define EC_R_NOT_A_NIST_PRIME 135
650#define EC_R_NOT_A_SUPPORTED_NIST_PRIME 136
651#define EC_R_NOT_IMPLEMENTED 126
652#define EC_R_NOT_INITIALIZED 111
653#define EC_R_NO_FIELD_MOD 133
654#define EC_R_NO_PARAMETERS_SET 139
655#define EC_R_PASSED_NULL_PARAMETER 134
656#define EC_R_PEER_KEY_ERROR 149
657#define EC_R_PKPARAMETERS2GROUP_FAILURE 127
658#define EC_R_POINT_AT_INFINITY 106
659#define EC_R_POINT_ARITHMETIC_FAILURE 169
660#define EC_R_POINT_IS_NOT_ON_CURVE 107
661#define EC_R_SHARED_INFO_ERROR 150
662#define EC_R_SLOT_FULL 108
663#define EC_R_UNDEFINED_GENERATOR 113
664#define EC_R_UNDEFINED_ORDER 128
665#define EC_R_UNKNOWN_COFACTOR 164
666#define EC_R_UNKNOWN_GROUP 129
667#define EC_R_UNKNOWN_ORDER 114
668#define EC_R_UNSUPPORTED_FIELD 131
669#define EC_R_WRONG_CURVE_PARAMETERS 145
670#define EC_R_WRONG_ORDER 130
671
672#ifdef __cplusplus
673}
674#endif
675#endif