diff options
author | beck <> | 2002-05-15 02:29:21 +0000 |
---|---|---|
committer | beck <> | 2002-05-15 02:29:21 +0000 |
commit | b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9 (patch) | |
tree | fa27cf82a1250b64ed3bf5f4a18c7354d470bbcc /src/lib/libcrypto/bn/bn_exp2.c | |
parent | e471e1ea98d673597b182ea85f29e30c97cd08b5 (diff) | |
download | openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.gz openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.bz2 openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.zip |
OpenSSL 0.9.7 stable 2002 05 08 merge
Diffstat (limited to 'src/lib/libcrypto/bn/bn_exp2.c')
-rw-r--r-- | src/lib/libcrypto/bn/bn_exp2.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/lib/libcrypto/bn/bn_exp2.c b/src/lib/libcrypto/bn/bn_exp2.c index 29029f4c72..73ccd58a83 100644 --- a/src/lib/libcrypto/bn/bn_exp2.c +++ b/src/lib/libcrypto/bn/bn_exp2.c | |||
@@ -115,13 +115,14 @@ | |||
115 | 115 | ||
116 | #define TABLE_SIZE 32 | 116 | #define TABLE_SIZE 32 |
117 | 117 | ||
118 | int BN_mod_exp2_mont(BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, BIGNUM *a2, | 118 | int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1, |
119 | BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont) | 119 | const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, |
120 | BN_CTX *ctx, BN_MONT_CTX *in_mont) | ||
120 | { | 121 | { |
121 | int i,j,bits,b,bits1,bits2,ret=0,wpos1,wpos2,window1,window2,wvalue1,wvalue2; | 122 | int i,j,bits,b,bits1,bits2,ret=0,wpos1,wpos2,window1,window2,wvalue1,wvalue2; |
122 | int r_is_one=1,ts1=0,ts2=0; | 123 | int r_is_one=1,ts1=0,ts2=0; |
123 | BIGNUM *d,*r; | 124 | BIGNUM *d,*r; |
124 | BIGNUM *a_mod_m; | 125 | const BIGNUM *a_mod_m; |
125 | BIGNUM val1[TABLE_SIZE], val2[TABLE_SIZE]; | 126 | BIGNUM val1[TABLE_SIZE], val2[TABLE_SIZE]; |
126 | BN_MONT_CTX *mont=NULL; | 127 | BN_MONT_CTX *mont=NULL; |
127 | 128 | ||
@@ -140,9 +141,10 @@ int BN_mod_exp2_mont(BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, BIGNUM *a2, | |||
140 | bits2=BN_num_bits(p2); | 141 | bits2=BN_num_bits(p2); |
141 | if ((bits1 == 0) && (bits2 == 0)) | 142 | if ((bits1 == 0) && (bits2 == 0)) |
142 | { | 143 | { |
143 | BN_one(rr); | 144 | ret = BN_one(rr); |
144 | return(1); | 145 | return ret; |
145 | } | 146 | } |
147 | |||
146 | bits=(bits1 > bits2)?bits1:bits2; | 148 | bits=(bits1 > bits2)?bits1:bits2; |
147 | 149 | ||
148 | BN_CTX_start(ctx); | 150 | BN_CTX_start(ctx); |
@@ -166,7 +168,7 @@ int BN_mod_exp2_mont(BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, BIGNUM *a2, | |||
166 | */ | 168 | */ |
167 | BN_init(&val1[0]); | 169 | BN_init(&val1[0]); |
168 | ts1=1; | 170 | ts1=1; |
169 | if (BN_ucmp(a1,m) >= 0) | 171 | if (a1->neg || BN_ucmp(a1,m) >= 0) |
170 | { | 172 | { |
171 | if (!BN_mod(&(val1[0]),a1,m,ctx)) | 173 | if (!BN_mod(&(val1[0]),a1,m,ctx)) |
172 | goto err; | 174 | goto err; |
@@ -174,6 +176,12 @@ int BN_mod_exp2_mont(BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, BIGNUM *a2, | |||
174 | } | 176 | } |
175 | else | 177 | else |
176 | a_mod_m = a1; | 178 | a_mod_m = a1; |
179 | if (BN_is_zero(a_mod_m)) | ||
180 | { | ||
181 | ret = BN_zero(rr); | ||
182 | goto err; | ||
183 | } | ||
184 | |||
177 | if (!BN_to_montgomery(&(val1[0]),a_mod_m,mont,ctx)) goto err; | 185 | if (!BN_to_montgomery(&(val1[0]),a_mod_m,mont,ctx)) goto err; |
178 | if (window1 > 1) | 186 | if (window1 > 1) |
179 | { | 187 | { |
@@ -195,7 +203,7 @@ int BN_mod_exp2_mont(BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, BIGNUM *a2, | |||
195 | */ | 203 | */ |
196 | BN_init(&val2[0]); | 204 | BN_init(&val2[0]); |
197 | ts2=1; | 205 | ts2=1; |
198 | if (BN_ucmp(a2,m) >= 0) | 206 | if (a2->neg || BN_ucmp(a2,m) >= 0) |
199 | { | 207 | { |
200 | if (!BN_mod(&(val2[0]),a2,m,ctx)) | 208 | if (!BN_mod(&(val2[0]),a2,m,ctx)) |
201 | goto err; | 209 | goto err; |
@@ -203,6 +211,11 @@ int BN_mod_exp2_mont(BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, BIGNUM *a2, | |||
203 | } | 211 | } |
204 | else | 212 | else |
205 | a_mod_m = a2; | 213 | a_mod_m = a2; |
214 | if (BN_is_zero(a_mod_m)) | ||
215 | { | ||
216 | ret = BN_zero(rr); | ||
217 | goto err; | ||
218 | } | ||
206 | if (!BN_to_montgomery(&(val2[0]),a_mod_m,mont,ctx)) goto err; | 219 | if (!BN_to_montgomery(&(val2[0]),a_mod_m,mont,ctx)) goto err; |
207 | if (window2 > 1) | 220 | if (window2 > 1) |
208 | { | 221 | { |