diff options
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_gen.c | 31 | ||||
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_key.c | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_local.h | 13 | ||||
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_ossl.c | 25 |
4 files changed, 21 insertions, 53 deletions
diff --git a/src/lib/libcrypto/dsa/dsa_gen.c b/src/lib/libcrypto/dsa/dsa_gen.c index 8b966871b4..dc04eba032 100644 --- a/src/lib/libcrypto/dsa/dsa_gen.c +++ b/src/lib/libcrypto/dsa/dsa_gen.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: dsa_gen.c,v 1.31 2024/03/02 09:33:14 tb Exp $ */ | 1 | /* $OpenBSD: dsa_gen.c,v 1.32 2024/05/11 06:43:50 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -75,24 +75,19 @@ int | |||
75 | DSA_generate_parameters_ex(DSA *ret, int bits, const unsigned char *seed_in, | 75 | DSA_generate_parameters_ex(DSA *ret, int bits, const unsigned char *seed_in, |
76 | int seed_len, int *counter_ret, unsigned long *h_ret, BN_GENCB *cb) | 76 | int seed_len, int *counter_ret, unsigned long *h_ret, BN_GENCB *cb) |
77 | { | 77 | { |
78 | if (ret->meth->dsa_paramgen) | 78 | const EVP_MD *evpmd; |
79 | return ret->meth->dsa_paramgen(ret, bits, seed_in, seed_len, | 79 | size_t qbits; |
80 | counter_ret, h_ret, cb); | 80 | |
81 | else { | 81 | if (bits >= 2048) { |
82 | const EVP_MD *evpmd; | 82 | qbits = 256; |
83 | size_t qbits; | 83 | evpmd = EVP_sha256(); |
84 | 84 | } else { | |
85 | if (bits >= 2048) { | 85 | qbits = 160; |
86 | qbits = 256; | 86 | evpmd = EVP_sha1(); |
87 | evpmd = EVP_sha256(); | ||
88 | } else { | ||
89 | qbits = 160; | ||
90 | evpmd = EVP_sha1(); | ||
91 | } | ||
92 | |||
93 | return dsa_builtin_paramgen(ret, bits, qbits, evpmd, seed_in, | ||
94 | seed_len, NULL, counter_ret, h_ret, cb); | ||
95 | } | 87 | } |
88 | |||
89 | return dsa_builtin_paramgen(ret, bits, qbits, evpmd, seed_in, seed_len, | ||
90 | NULL, counter_ret, h_ret, cb); | ||
96 | } | 91 | } |
97 | LCRYPTO_ALIAS(DSA_generate_parameters_ex); | 92 | LCRYPTO_ALIAS(DSA_generate_parameters_ex); |
98 | 93 | ||
diff --git a/src/lib/libcrypto/dsa/dsa_key.c b/src/lib/libcrypto/dsa/dsa_key.c index 46ec9cfce9..5fbedcf705 100644 --- a/src/lib/libcrypto/dsa/dsa_key.c +++ b/src/lib/libcrypto/dsa/dsa_key.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: dsa_key.c,v 1.36 2024/05/10 04:53:55 tb Exp $ */ | 1 | /* $OpenBSD: dsa_key.c,v 1.37 2024/05/11 06:43:50 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -76,9 +76,6 @@ DSA_generate_key(DSA *dsa) | |||
76 | BN_CTX *ctx = NULL; | 76 | BN_CTX *ctx = NULL; |
77 | int ok = 0; | 77 | int ok = 0; |
78 | 78 | ||
79 | if (dsa->meth->dsa_keygen != NULL) | ||
80 | return dsa->meth->dsa_keygen(dsa); | ||
81 | |||
82 | if ((priv_key = BN_new()) == NULL) | 79 | if ((priv_key = BN_new()) == NULL) |
83 | goto err; | 80 | goto err; |
84 | if ((pub_key = BN_new()) == NULL) | 81 | if ((pub_key = BN_new()) == NULL) |
diff --git a/src/lib/libcrypto/dsa/dsa_local.h b/src/lib/libcrypto/dsa/dsa_local.h index 3e688b8ce6..46248f0edf 100644 --- a/src/lib/libcrypto/dsa/dsa_local.h +++ b/src/lib/libcrypto/dsa/dsa_local.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: dsa_local.h,v 1.3 2023/11/29 21:35:57 tb Exp $ */ | 1 | /* $OpenBSD: dsa_local.h,v 1.4 2024/05/11 06:43:50 tb Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 2007 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 2007 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
@@ -69,20 +69,9 @@ struct dsa_method { | |||
69 | BIGNUM **rp); | 69 | BIGNUM **rp); |
70 | int (*dsa_do_verify)(const unsigned char *dgst, int dgst_len, | 70 | int (*dsa_do_verify)(const unsigned char *dgst, int dgst_len, |
71 | DSA_SIG *sig, DSA *dsa); | 71 | DSA_SIG *sig, DSA *dsa); |
72 | int (*dsa_mod_exp)(DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, | ||
73 | BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, | ||
74 | BN_MONT_CTX *in_mont); | ||
75 | int (*bn_mod_exp)(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, | ||
76 | const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); /* Can be null */ | ||
77 | int (*init)(DSA *dsa); | 72 | int (*init)(DSA *dsa); |
78 | int (*finish)(DSA *dsa); | 73 | int (*finish)(DSA *dsa); |
79 | int flags; | 74 | int flags; |
80 | char *app_data; | ||
81 | /* If this is non-NULL, it is used to generate DSA parameters */ | ||
82 | int (*dsa_paramgen)(DSA *dsa, int bits, const unsigned char *seed, | ||
83 | int seed_len, int *counter_ret, unsigned long *h_ret, BN_GENCB *cb); | ||
84 | /* If this is non-NULL, it is used to generate DSA keys */ | ||
85 | int (*dsa_keygen)(DSA *dsa); | ||
86 | } /* DSA_METHOD */; | 75 | } /* DSA_METHOD */; |
87 | 76 | ||
88 | struct dsa_st { | 77 | struct dsa_st { |
diff --git a/src/lib/libcrypto/dsa/dsa_ossl.c b/src/lib/libcrypto/dsa/dsa_ossl.c index 943d038796..c53c8b9001 100644 --- a/src/lib/libcrypto/dsa/dsa_ossl.c +++ b/src/lib/libcrypto/dsa/dsa_ossl.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: dsa_ossl.c,v 1.55 2024/05/09 20:57:49 tb Exp $ */ | 1 | /* $OpenBSD: dsa_ossl.c,v 1.56 2024/05/11 06:43:50 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -268,15 +268,8 @@ dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp) | |||
268 | !bn_copy(k, BN_num_bits(l) > q_bits ? l : m)) | 268 | !bn_copy(k, BN_num_bits(l) > q_bits ? l : m)) |
269 | goto err; | 269 | goto err; |
270 | 270 | ||
271 | if (dsa->meth->bn_mod_exp != NULL) { | 271 | if (!BN_mod_exp_mont_ct(r, dsa->g, k, dsa->p, ctx, dsa->method_mont_p)) |
272 | if (!dsa->meth->bn_mod_exp(dsa, r, dsa->g, k, dsa->p, ctx, | 272 | goto err; |
273 | dsa->method_mont_p)) | ||
274 | goto err; | ||
275 | } else { | ||
276 | if (!BN_mod_exp_mont_ct(r, dsa->g, k, dsa->p, ctx, | ||
277 | dsa->method_mont_p)) | ||
278 | goto err; | ||
279 | } | ||
280 | 273 | ||
281 | if (!BN_mod_ct(r, r, dsa->q, ctx)) | 274 | if (!BN_mod_ct(r, r, dsa->q, ctx)) |
282 | goto err; | 275 | goto err; |
@@ -372,15 +365,9 @@ dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, DSA *dsa) | |||
372 | goto err; | 365 | goto err; |
373 | } | 366 | } |
374 | 367 | ||
375 | if (dsa->meth->dsa_mod_exp != NULL) { | 368 | if (!BN_mod_exp2_mont(t1, dsa->g, u1, dsa->pub_key, u2, dsa->p, |
376 | if (!dsa->meth->dsa_mod_exp(dsa, t1, dsa->g, u1, dsa->pub_key, | 369 | ctx, mont)) |
377 | u2, dsa->p, ctx, mont)) | 370 | goto err; |
378 | goto err; | ||
379 | } else { | ||
380 | if (!BN_mod_exp2_mont(t1, dsa->g, u1, dsa->pub_key, u2, | ||
381 | dsa->p, ctx, mont)) | ||
382 | goto err; | ||
383 | } | ||
384 | 371 | ||
385 | /* let u1 = u1 mod q */ | 372 | /* let u1 = u1 mod q */ |
386 | if (!BN_mod_ct(u1, t1, dsa->q, ctx)) | 373 | if (!BN_mod_ct(u1, t1, dsa->q, ctx)) |