diff options
Diffstat (limited to 'src/lib/libcrypto/dh/dh_check.c')
-rw-r--r-- | src/lib/libcrypto/dh/dh_check.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/lib/libcrypto/dh/dh_check.c b/src/lib/libcrypto/dh/dh_check.c index a7e9920efb..17debff62d 100644 --- a/src/lib/libcrypto/dh/dh_check.c +++ b/src/lib/libcrypto/dh/dh_check.c | |||
@@ -121,4 +121,26 @@ err: | |||
121 | return(ok); | 121 | return(ok); |
122 | } | 122 | } |
123 | 123 | ||
124 | int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret) | ||
125 | { | ||
126 | int ok=0; | ||
127 | BIGNUM *q=NULL; | ||
128 | |||
129 | *ret=0; | ||
130 | q=BN_new(); | ||
131 | if (q == NULL) goto err; | ||
132 | BN_set_word(q,1); | ||
133 | if (BN_cmp(pub_key,q) <= 0) | ||
134 | *ret|=DH_CHECK_PUBKEY_TOO_SMALL; | ||
135 | BN_copy(q,dh->p); | ||
136 | BN_sub_word(q,1); | ||
137 | if (BN_cmp(pub_key,q) >= 0) | ||
138 | *ret|=DH_CHECK_PUBKEY_TOO_LARGE; | ||
139 | |||
140 | ok = 1; | ||
141 | err: | ||
142 | if (q != NULL) BN_free(q); | ||
143 | return(ok); | ||
144 | } | ||
145 | |||
124 | #endif | 146 | #endif |