summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dh/dh_check.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/dh/dh_check.c')
-rw-r--r--src/lib/libcrypto/dh/dh_check.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/lib/libcrypto/dh/dh_check.c b/src/lib/libcrypto/dh/dh_check.c
index a6010f0a6d..a8227d31ca 100644
--- a/src/lib/libcrypto/dh/dh_check.c
+++ b/src/lib/libcrypto/dh/dh_check.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dh_check.c,v 1.16 2016/07/05 02:54:35 bcook Exp $ */ 1/* $OpenBSD: dh_check.c,v 1.17 2019/01/20 01:56:59 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 *
@@ -74,7 +74,7 @@
74int 74int
75DH_check(const DH *dh, int *ret) 75DH_check(const DH *dh, int *ret)
76{ 76{
77 int ok = 0; 77 int is_prime, ok = 0;
78 BN_CTX *ctx = NULL; 78 BN_CTX *ctx = NULL;
79 BN_ULONG l; 79 BN_ULONG l;
80 BIGNUM *q = NULL; 80 BIGNUM *q = NULL;
@@ -102,16 +102,23 @@ DH_check(const DH *dh, int *ret)
102 } else 102 } else
103 *ret |= DH_UNABLE_TO_CHECK_GENERATOR; 103 *ret |= DH_UNABLE_TO_CHECK_GENERATOR;
104 104
105 if (!BN_is_prime_ex(dh->p, BN_prime_checks, ctx, NULL)) 105 is_prime = BN_is_prime_ex(dh->p, BN_prime_checks, ctx, NULL);
106 if (is_prime < 0)
107 goto err;
108 if (is_prime == 0)
106 *ret |= DH_CHECK_P_NOT_PRIME; 109 *ret |= DH_CHECK_P_NOT_PRIME;
107 else { 110 else {
108 if (!BN_rshift1(q, dh->p)) 111 if (!BN_rshift1(q, dh->p))
109 goto err; 112 goto err;
110 if (!BN_is_prime_ex(q, BN_prime_checks, ctx, NULL)) 113 is_prime = BN_is_prime_ex(q, BN_prime_checks, ctx, NULL);
114 if (is_prime < 0)
115 goto err;
116 if (is_prime == 0)
111 *ret |= DH_CHECK_P_NOT_SAFE_PRIME; 117 *ret |= DH_CHECK_P_NOT_SAFE_PRIME;
112 } 118 }
113 ok = 1; 119 ok = 1;
114err: 120
121 err:
115 BN_CTX_free(ctx); 122 BN_CTX_free(ctx);
116 BN_free(q); 123 BN_free(q);
117 return ok; 124 return ok;