summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authortb <>2023-07-28 09:16:17 +0000
committertb <>2023-07-28 09:16:17 +0000
commite6ec7919f70f22021fc29a98f165fd18d5a7ccd0 (patch)
treea83e66610995e8159b7ddb9a9fef83087d8709a4 /src/lib
parent5fdc6aff8969f405877cb212f681afded1f948e6 (diff)
downloadopenbsd-e6ec7919f70f22021fc29a98f165fd18d5a7ccd0.tar.gz
openbsd-e6ec7919f70f22021fc29a98f165fd18d5a7ccd0.tar.bz2
openbsd-e6ec7919f70f22021fc29a98f165fd18d5a7ccd0.zip
Merge ecdsa.h into ec.h
Move the remaining ECDSA API into ec.h to match OpenSSL 1.1's interface better. In particular, the EC_KEY sign and verify method accessors are moved to the right header. Whether the rest of the ECDSA stuff belongs there is debatable, but that was upstream's choice. ok jsing
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/ec/ec.h51
-rw-r--r--src/lib/libcrypto/ecdsa/ecdsa.h140
-rw-r--r--src/lib/libcrypto/hidden/openssl/ec.h19
-rw-r--r--src/lib/libcrypto/hidden/openssl/ecdsa.h46
4 files changed, 70 insertions, 186 deletions
diff --git a/src/lib/libcrypto/ec/ec.h b/src/lib/libcrypto/ec/ec.h
index f711d55050..aac3537655 100644
--- a/src/lib/libcrypto/ec/ec.h
+++ b/src/lib/libcrypto/ec/ec.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ec.h,v 1.42 2023/07/05 17:10:10 tb Exp $ */ 1/* $OpenBSD: ec.h,v 1.43 2023/07/28 09:16:17 tb Exp $ */
2/* 2/*
3 * Originally written by Bodo Moeller for the OpenSSL project. 3 * Originally written by Bodo Moeller for the OpenSSL project.
4 */ 4 */
@@ -326,6 +326,31 @@ void EC_KEY_set_default_method(const EC_KEY_METHOD *meth);
326const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); 326const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key);
327int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); 327int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth);
328EC_KEY *EC_KEY_new_method(ENGINE *engine); 328EC_KEY *EC_KEY_new_method(ENGINE *engine);
329
330typedef struct ECDSA_SIG_st ECDSA_SIG;
331
332ECDSA_SIG *ECDSA_SIG_new(void);
333void ECDSA_SIG_free(ECDSA_SIG *sig);
334int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp);
335ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len);
336
337const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig);
338const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig);
339void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
340int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s);
341
342int ECDSA_size(const EC_KEY *eckey);
343
344ECDSA_SIG *ECDSA_do_sign(const unsigned char *digest, int digest_len,
345 EC_KEY *eckey);
346int ECDSA_do_verify(const unsigned char *digest, int digest_len,
347 const ECDSA_SIG *sig, EC_KEY *eckey);
348
349int ECDSA_sign(int type, const unsigned char *digest, int digest_len,
350 unsigned char *signature, unsigned int *signature_len, EC_KEY *eckey);
351int ECDSA_verify(int type, const unsigned char *digest, int digest_len,
352 const unsigned char *signature, int signature_len, EC_KEY *eckey);
353
329EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); 354EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth);
330void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); 355void EC_KEY_METHOD_free(EC_KEY_METHOD *meth);
331void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, 356void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth,
@@ -340,6 +365,18 @@ void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth,
340void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, 365void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth,
341 int (*ckey)(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, 366 int (*ckey)(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh,
342 void *(*KDF) (const void *in, size_t inlen, void *out, size_t *outlen))); 367 void *(*KDF) (const void *in, size_t inlen, void *out, size_t *outlen)));
368void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth,
369 int (*sign)(int type, const unsigned char *digest, int digest_len,
370 unsigned char *signature, unsigned int *signature_len,
371 const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey),
372 int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp),
373 ECDSA_SIG *(*sign_sig)(const unsigned char *digest, int digest_len,
374 const BIGNUM *in_kinv, const BIGNUM *in_r, EC_KEY *eckey));
375void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth,
376 int (*verify)(int type, const unsigned char *digest, int digest_len,
377 const unsigned char *signature, int signature_len, EC_KEY *eckey),
378 int (*verify_sig)(const unsigned char *digest, int digest_len,
379 const ECDSA_SIG *sig, EC_KEY *eckey));
343void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth, 380void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth,
344 int (**pinit)(EC_KEY *key), 381 int (**pinit)(EC_KEY *key),
345 void (**pfinish)(EC_KEY *key), 382 void (**pfinish)(EC_KEY *key),
@@ -352,6 +389,18 @@ void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth,
352void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth, 389void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth,
353 int (**pck)(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, 390 int (**pck)(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh,
354 void *(*KDF) (const void *in, size_t inlen, void *out, size_t *outlen))); 391 void *(*KDF) (const void *in, size_t inlen, void *out, size_t *outlen)));
392void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth,
393 int (**psign)(int type, const unsigned char *digest, int digest_len,
394 unsigned char *signature, unsigned int *signature_len,
395 const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey),
396 int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp),
397 ECDSA_SIG *(**psign_sig)(const unsigned char *digest, int digest_len,
398 const BIGNUM *in_kinv, const BIGNUM *in_r, EC_KEY *eckey));
399void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth,
400 int (**pverify)(int type, const unsigned char *digest, int digest_len,
401 const unsigned char *signature, int signature_len, EC_KEY *eckey),
402 int (**pverify_sig)(const unsigned char *digest, int digest_len,
403 const ECDSA_SIG *sig, EC_KEY *eckey));
355 404
356EC_KEY *ECParameters_dup(EC_KEY *key); 405EC_KEY *ECParameters_dup(EC_KEY *key);
357 406
diff --git a/src/lib/libcrypto/ecdsa/ecdsa.h b/src/lib/libcrypto/ecdsa/ecdsa.h
index 4b4a10ced4..9f498eb4a2 100644
--- a/src/lib/libcrypto/ecdsa/ecdsa.h
+++ b/src/lib/libcrypto/ecdsa/ecdsa.h
@@ -1,142 +1,6 @@
1/* $OpenBSD: ecdsa.h,v 1.19 2023/07/28 09:08:31 tb Exp $ */ 1/* $OpenBSD: ecdsa.h,v 1.20 2023/07/28 09:16:17 tb Exp $ */
2/* 2/*
3 * Written by Nils Larsch for the OpenSSL project 3 * Public domain.
4 */ 4 */
5/* ====================================================================
6 * Copyright (c) 2000-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 * licensing@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#ifndef HEADER_ECDSA_H
59#define HEADER_ECDSA_H
60
61#include <openssl/opensslconf.h>
62
63#ifdef OPENSSL_NO_ECDSA
64#error ECDSA is disabled.
65#endif
66 5
67#include <openssl/bn.h>
68#include <openssl/ec.h> 6#include <openssl/ec.h>
69
70#include <openssl/ossl_typ.h>
71
72#ifdef __cplusplus
73extern "C" {
74#endif
75
76typedef struct ECDSA_SIG_st ECDSA_SIG;
77
78/*
79 * If this flag is set, the ECDSA method is FIPS compliant and can be used
80 * in FIPS mode. This is set in the validated module method. If an
81 * application sets this flag in its own methods it is its responsibility
82 * to ensure the result is compliant.
83 */
84
85#define ECDSA_FLAG_FIPS_METHOD 0x1
86
87ECDSA_SIG *ECDSA_SIG_new(void);
88void ECDSA_SIG_free(ECDSA_SIG *sig);
89int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp);
90ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len);
91void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
92
93const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig);
94const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig);
95int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s);
96
97ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len,
98 EC_KEY *eckey);
99int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
100 const ECDSA_SIG *sig, EC_KEY* eckey);
101
102int ECDSA_size(const EC_KEY *eckey);
103
104int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen,
105 unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);
106int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen,
107 const unsigned char *sig, int siglen, EC_KEY *eckey);
108
109/* XXX should be in ec.h, but needs ECDSA_SIG */
110void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth,
111 int (*sign)(int type, const unsigned char *dgst,
112 int dlen, unsigned char *sig, unsigned int *siglen,
113 const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey),
114 int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in,
115 BIGNUM **kinvp, BIGNUM **rp),
116 ECDSA_SIG *(*sign_sig)(const unsigned char *dgst,
117 int dgst_len, const BIGNUM *in_kinv, const BIGNUM *in_r,
118 EC_KEY *eckey));
119void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth,
120 int (*verify)(int type, const unsigned char *dgst, int dgst_len,
121 const unsigned char *sigbuf, int sig_len, EC_KEY *eckey),
122 int (*verify_sig)(const unsigned char *dgst, int dgst_len,
123 const ECDSA_SIG *sig, EC_KEY *eckey));
124void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth,
125 int (**psign)(int type, const unsigned char *dgst,
126 int dlen, unsigned char *sig, unsigned int *siglen,
127 const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey),
128 int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in,
129 BIGNUM **kinvp, BIGNUM **rp),
130 ECDSA_SIG *(**psign_sig)(const unsigned char *dgst,
131 int dgst_len, const BIGNUM *in_kinv, const BIGNUM *in_r,
132 EC_KEY *eckey));
133void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth,
134 int (**pverify)(int type, const unsigned char *dgst, int dgst_len,
135 const unsigned char *sigbuf, int sig_len, EC_KEY *eckey),
136 int (**pverify_sig)(const unsigned char *dgst, int dgst_len,
137 const ECDSA_SIG *sig, EC_KEY *eckey));
138
139#ifdef __cplusplus
140}
141#endif
142#endif
diff --git a/src/lib/libcrypto/hidden/openssl/ec.h b/src/lib/libcrypto/hidden/openssl/ec.h
index 5e4121eac3..d2d65945e5 100644
--- a/src/lib/libcrypto/hidden/openssl/ec.h
+++ b/src/lib/libcrypto/hidden/openssl/ec.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ec.h,v 1.2 2023/07/07 19:37:54 beck Exp $ */ 1/* $OpenBSD: ec.h,v 1.3 2023/07/28 09:16:17 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2023 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2023 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -132,14 +132,31 @@ LCRYPTO_USED(EC_KEY_set_default_method);
132LCRYPTO_USED(EC_KEY_get_method); 132LCRYPTO_USED(EC_KEY_get_method);
133LCRYPTO_USED(EC_KEY_set_method); 133LCRYPTO_USED(EC_KEY_set_method);
134LCRYPTO_USED(EC_KEY_new_method); 134LCRYPTO_USED(EC_KEY_new_method);
135LCRYPTO_USED(ECDSA_SIG_new);
136LCRYPTO_USED(ECDSA_SIG_free);
137LCRYPTO_USED(i2d_ECDSA_SIG);
138LCRYPTO_USED(d2i_ECDSA_SIG);
139LCRYPTO_USED(ECDSA_SIG_get0_r);
140LCRYPTO_USED(ECDSA_SIG_get0_s);
141LCRYPTO_USED(ECDSA_SIG_get0);
142LCRYPTO_USED(ECDSA_SIG_set0);
143LCRYPTO_USED(ECDSA_size);
144LCRYPTO_USED(ECDSA_do_sign);
145LCRYPTO_USED(ECDSA_do_verify);
146LCRYPTO_USED(ECDSA_sign);
147LCRYPTO_USED(ECDSA_verify);
135LCRYPTO_USED(EC_KEY_METHOD_new); 148LCRYPTO_USED(EC_KEY_METHOD_new);
136LCRYPTO_USED(EC_KEY_METHOD_free); 149LCRYPTO_USED(EC_KEY_METHOD_free);
137LCRYPTO_USED(EC_KEY_METHOD_set_init); 150LCRYPTO_USED(EC_KEY_METHOD_set_init);
138LCRYPTO_USED(EC_KEY_METHOD_set_keygen); 151LCRYPTO_USED(EC_KEY_METHOD_set_keygen);
139LCRYPTO_USED(EC_KEY_METHOD_set_compute_key); 152LCRYPTO_USED(EC_KEY_METHOD_set_compute_key);
153LCRYPTO_USED(EC_KEY_METHOD_set_sign);
154LCRYPTO_USED(EC_KEY_METHOD_set_verify);
140LCRYPTO_USED(EC_KEY_METHOD_get_init); 155LCRYPTO_USED(EC_KEY_METHOD_get_init);
141LCRYPTO_USED(EC_KEY_METHOD_get_keygen); 156LCRYPTO_USED(EC_KEY_METHOD_get_keygen);
142LCRYPTO_USED(EC_KEY_METHOD_get_compute_key); 157LCRYPTO_USED(EC_KEY_METHOD_get_compute_key);
158LCRYPTO_USED(EC_KEY_METHOD_get_sign);
159LCRYPTO_USED(EC_KEY_METHOD_get_verify);
143LCRYPTO_USED(ECParameters_dup); 160LCRYPTO_USED(ECParameters_dup);
144LCRYPTO_USED(ERR_load_EC_strings); 161LCRYPTO_USED(ERR_load_EC_strings);
145 162
diff --git a/src/lib/libcrypto/hidden/openssl/ecdsa.h b/src/lib/libcrypto/hidden/openssl/ecdsa.h
deleted file mode 100644
index 5846906be9..0000000000
--- a/src/lib/libcrypto/hidden/openssl/ecdsa.h
+++ /dev/null
@@ -1,46 +0,0 @@
1/* $OpenBSD: ecdsa.h,v 1.5 2023/07/28 09:08:31 tb Exp $ */
2/*
3 * Copyright (c) 2023 Bob Beck <beck@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#ifndef _LIBCRYPTO_ECDSA_H
19#define _LIBCRYPTO_ECDSA_H
20
21#ifndef _MSC_VER
22#include_next <openssl/ecdsa.h>
23#else
24#include "../include/openssl/ecdsa.h"
25#endif
26#include "crypto_namespace.h"
27
28LCRYPTO_USED(ECDSA_SIG_new);
29LCRYPTO_USED(ECDSA_SIG_free);
30LCRYPTO_USED(i2d_ECDSA_SIG);
31LCRYPTO_USED(d2i_ECDSA_SIG);
32LCRYPTO_USED(ECDSA_SIG_get0);
33LCRYPTO_USED(ECDSA_SIG_get0_r);
34LCRYPTO_USED(ECDSA_SIG_get0_s);
35LCRYPTO_USED(ECDSA_SIG_set0);
36LCRYPTO_USED(ECDSA_do_sign);
37LCRYPTO_USED(ECDSA_do_verify);
38LCRYPTO_USED(ECDSA_size);
39LCRYPTO_USED(ECDSA_sign);
40LCRYPTO_USED(ECDSA_verify);
41LCRYPTO_USED(EC_KEY_METHOD_set_sign);
42LCRYPTO_USED(EC_KEY_METHOD_set_verify);
43LCRYPTO_USED(EC_KEY_METHOD_get_sign);
44LCRYPTO_USED(EC_KEY_METHOD_get_verify);
45
46#endif /* _LIBCRYPTO_ECDSA_H */