diff options
author | beck <> | 2000-12-15 02:58:47 +0000 |
---|---|---|
committer | beck <> | 2000-12-15 02:58:47 +0000 |
commit | 9200bb13d15da4b2a23e6bc92c20e95b74aa2113 (patch) | |
tree | 5c52d628ec1e34be76e7ef2a4235d248b7c44d24 /src/lib/libcrypto/rsa/rsa_eay.c | |
parent | e131d25072e3d4197ba4b9bcc0d1b27d34d6488d (diff) | |
download | openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.gz openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.bz2 openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.zip |
openssl-engine-0.9.6 merge
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_eay.c')
-rw-r--r-- | src/lib/libcrypto/rsa/rsa_eay.c | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_eay.c b/src/lib/libcrypto/rsa/rsa_eay.c index b7d2460754..8b8a1e279a 100644 --- a/src/lib/libcrypto/rsa/rsa_eay.c +++ b/src/lib/libcrypto/rsa/rsa_eay.c | |||
@@ -61,6 +61,7 @@ | |||
61 | #include <openssl/bn.h> | 61 | #include <openssl/bn.h> |
62 | #include <openssl/rsa.h> | 62 | #include <openssl/rsa.h> |
63 | #include <openssl/rand.h> | 63 | #include <openssl/rand.h> |
64 | #include <openssl/engine.h> | ||
64 | 65 | ||
65 | #ifndef RSA_NULL | 66 | #ifndef RSA_NULL |
66 | 67 | ||
@@ -97,16 +98,18 @@ RSA_METHOD *RSA_PKCS1_SSLeay(void) | |||
97 | static int RSA_eay_public_encrypt(int flen, unsigned char *from, | 98 | static int RSA_eay_public_encrypt(int flen, unsigned char *from, |
98 | unsigned char *to, RSA *rsa, int padding) | 99 | unsigned char *to, RSA *rsa, int padding) |
99 | { | 100 | { |
101 | const RSA_METHOD *meth; | ||
100 | BIGNUM f,ret; | 102 | BIGNUM f,ret; |
101 | int i,j,k,num=0,r= -1; | 103 | int i,j,k,num=0,r= -1; |
102 | unsigned char *buf=NULL; | 104 | unsigned char *buf=NULL; |
103 | BN_CTX *ctx=NULL; | 105 | BN_CTX *ctx=NULL; |
104 | 106 | ||
107 | meth = ENGINE_get_RSA(rsa->engine); | ||
105 | BN_init(&f); | 108 | BN_init(&f); |
106 | BN_init(&ret); | 109 | BN_init(&ret); |
107 | if ((ctx=BN_CTX_new()) == NULL) goto err; | 110 | if ((ctx=BN_CTX_new()) == NULL) goto err; |
108 | num=BN_num_bytes(rsa->n); | 111 | num=BN_num_bytes(rsa->n); |
109 | if ((buf=(unsigned char *)Malloc(num)) == NULL) | 112 | if ((buf=(unsigned char *)OPENSSL_malloc(num)) == NULL) |
110 | { | 113 | { |
111 | RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,ERR_R_MALLOC_FAILURE); | 114 | RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,ERR_R_MALLOC_FAILURE); |
112 | goto err; | 115 | goto err; |
@@ -143,7 +146,7 @@ static int RSA_eay_public_encrypt(int flen, unsigned char *from, | |||
143 | goto err; | 146 | goto err; |
144 | } | 147 | } |
145 | 148 | ||
146 | if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx, | 149 | if (!meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx, |
147 | rsa->_method_mod_n)) goto err; | 150 | rsa->_method_mod_n)) goto err; |
148 | 151 | ||
149 | /* put in leading 0 bytes if the number is less than the | 152 | /* put in leading 0 bytes if the number is less than the |
@@ -161,7 +164,7 @@ err: | |||
161 | if (buf != NULL) | 164 | if (buf != NULL) |
162 | { | 165 | { |
163 | memset(buf,0,num); | 166 | memset(buf,0,num); |
164 | Free(buf); | 167 | OPENSSL_free(buf); |
165 | } | 168 | } |
166 | return(r); | 169 | return(r); |
167 | } | 170 | } |
@@ -169,17 +172,19 @@ err: | |||
169 | static int RSA_eay_private_encrypt(int flen, unsigned char *from, | 172 | static int RSA_eay_private_encrypt(int flen, unsigned char *from, |
170 | unsigned char *to, RSA *rsa, int padding) | 173 | unsigned char *to, RSA *rsa, int padding) |
171 | { | 174 | { |
175 | const RSA_METHOD *meth; | ||
172 | BIGNUM f,ret; | 176 | BIGNUM f,ret; |
173 | int i,j,k,num=0,r= -1; | 177 | int i,j,k,num=0,r= -1; |
174 | unsigned char *buf=NULL; | 178 | unsigned char *buf=NULL; |
175 | BN_CTX *ctx=NULL; | 179 | BN_CTX *ctx=NULL; |
176 | 180 | ||
181 | meth = ENGINE_get_RSA(rsa->engine); | ||
177 | BN_init(&f); | 182 | BN_init(&f); |
178 | BN_init(&ret); | 183 | BN_init(&ret); |
179 | 184 | ||
180 | if ((ctx=BN_CTX_new()) == NULL) goto err; | 185 | if ((ctx=BN_CTX_new()) == NULL) goto err; |
181 | num=BN_num_bytes(rsa->n); | 186 | num=BN_num_bytes(rsa->n); |
182 | if ((buf=(unsigned char *)Malloc(num)) == NULL) | 187 | if ((buf=(unsigned char *)OPENSSL_malloc(num)) == NULL) |
183 | { | 188 | { |
184 | RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,ERR_R_MALLOC_FAILURE); | 189 | RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,ERR_R_MALLOC_FAILURE); |
185 | goto err; | 190 | goto err; |
@@ -213,10 +218,10 @@ static int RSA_eay_private_encrypt(int flen, unsigned char *from, | |||
213 | (rsa->dmp1 != NULL) && | 218 | (rsa->dmp1 != NULL) && |
214 | (rsa->dmq1 != NULL) && | 219 | (rsa->dmq1 != NULL) && |
215 | (rsa->iqmp != NULL)) ) | 220 | (rsa->iqmp != NULL)) ) |
216 | { if (!rsa->meth->rsa_mod_exp(&ret,&f,rsa)) goto err; } | 221 | { if (!meth->rsa_mod_exp(&ret,&f,rsa)) goto err; } |
217 | else | 222 | else |
218 | { | 223 | { |
219 | if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->d,rsa->n,ctx,NULL)) goto err; | 224 | if (!meth->bn_mod_exp(&ret,&f,rsa->d,rsa->n,ctx,NULL)) goto err; |
220 | } | 225 | } |
221 | 226 | ||
222 | if (rsa->flags & RSA_FLAG_BLINDING) | 227 | if (rsa->flags & RSA_FLAG_BLINDING) |
@@ -237,7 +242,7 @@ err: | |||
237 | if (buf != NULL) | 242 | if (buf != NULL) |
238 | { | 243 | { |
239 | memset(buf,0,num); | 244 | memset(buf,0,num); |
240 | Free(buf); | 245 | OPENSSL_free(buf); |
241 | } | 246 | } |
242 | return(r); | 247 | return(r); |
243 | } | 248 | } |
@@ -245,12 +250,14 @@ err: | |||
245 | static int RSA_eay_private_decrypt(int flen, unsigned char *from, | 250 | static int RSA_eay_private_decrypt(int flen, unsigned char *from, |
246 | unsigned char *to, RSA *rsa, int padding) | 251 | unsigned char *to, RSA *rsa, int padding) |
247 | { | 252 | { |
253 | const RSA_METHOD *meth; | ||
248 | BIGNUM f,ret; | 254 | BIGNUM f,ret; |
249 | int j,num=0,r= -1; | 255 | int j,num=0,r= -1; |
250 | unsigned char *p; | 256 | unsigned char *p; |
251 | unsigned char *buf=NULL; | 257 | unsigned char *buf=NULL; |
252 | BN_CTX *ctx=NULL; | 258 | BN_CTX *ctx=NULL; |
253 | 259 | ||
260 | meth = ENGINE_get_RSA(rsa->engine); | ||
254 | BN_init(&f); | 261 | BN_init(&f); |
255 | BN_init(&ret); | 262 | BN_init(&ret); |
256 | ctx=BN_CTX_new(); | 263 | ctx=BN_CTX_new(); |
@@ -258,7 +265,7 @@ static int RSA_eay_private_decrypt(int flen, unsigned char *from, | |||
258 | 265 | ||
259 | num=BN_num_bytes(rsa->n); | 266 | num=BN_num_bytes(rsa->n); |
260 | 267 | ||
261 | if ((buf=(unsigned char *)Malloc(num)) == NULL) | 268 | if ((buf=(unsigned char *)OPENSSL_malloc(num)) == NULL) |
262 | { | 269 | { |
263 | RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,ERR_R_MALLOC_FAILURE); | 270 | RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,ERR_R_MALLOC_FAILURE); |
264 | goto err; | 271 | goto err; |
@@ -287,10 +294,10 @@ static int RSA_eay_private_decrypt(int flen, unsigned char *from, | |||
287 | (rsa->dmp1 != NULL) && | 294 | (rsa->dmp1 != NULL) && |
288 | (rsa->dmq1 != NULL) && | 295 | (rsa->dmq1 != NULL) && |
289 | (rsa->iqmp != NULL)) ) | 296 | (rsa->iqmp != NULL)) ) |
290 | { if (!rsa->meth->rsa_mod_exp(&ret,&f,rsa)) goto err; } | 297 | { if (!meth->rsa_mod_exp(&ret,&f,rsa)) goto err; } |
291 | else | 298 | else |
292 | { | 299 | { |
293 | if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->d,rsa->n,ctx,NULL)) | 300 | if (!meth->bn_mod_exp(&ret,&f,rsa->d,rsa->n,ctx,NULL)) |
294 | goto err; | 301 | goto err; |
295 | } | 302 | } |
296 | 303 | ||
@@ -330,7 +337,7 @@ err: | |||
330 | if (buf != NULL) | 337 | if (buf != NULL) |
331 | { | 338 | { |
332 | memset(buf,0,num); | 339 | memset(buf,0,num); |
333 | Free(buf); | 340 | OPENSSL_free(buf); |
334 | } | 341 | } |
335 | return(r); | 342 | return(r); |
336 | } | 343 | } |
@@ -338,19 +345,21 @@ err: | |||
338 | static int RSA_eay_public_decrypt(int flen, unsigned char *from, | 345 | static int RSA_eay_public_decrypt(int flen, unsigned char *from, |
339 | unsigned char *to, RSA *rsa, int padding) | 346 | unsigned char *to, RSA *rsa, int padding) |
340 | { | 347 | { |
348 | const RSA_METHOD *meth; | ||
341 | BIGNUM f,ret; | 349 | BIGNUM f,ret; |
342 | int i,num=0,r= -1; | 350 | int i,num=0,r= -1; |
343 | unsigned char *p; | 351 | unsigned char *p; |
344 | unsigned char *buf=NULL; | 352 | unsigned char *buf=NULL; |
345 | BN_CTX *ctx=NULL; | 353 | BN_CTX *ctx=NULL; |
346 | 354 | ||
355 | meth = ENGINE_get_RSA(rsa->engine); | ||
347 | BN_init(&f); | 356 | BN_init(&f); |
348 | BN_init(&ret); | 357 | BN_init(&ret); |
349 | ctx=BN_CTX_new(); | 358 | ctx=BN_CTX_new(); |
350 | if (ctx == NULL) goto err; | 359 | if (ctx == NULL) goto err; |
351 | 360 | ||
352 | num=BN_num_bytes(rsa->n); | 361 | num=BN_num_bytes(rsa->n); |
353 | buf=(unsigned char *)Malloc(num); | 362 | buf=(unsigned char *)OPENSSL_malloc(num); |
354 | if (buf == NULL) | 363 | if (buf == NULL) |
355 | { | 364 | { |
356 | RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,ERR_R_MALLOC_FAILURE); | 365 | RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,ERR_R_MALLOC_FAILURE); |
@@ -374,7 +383,7 @@ static int RSA_eay_public_decrypt(int flen, unsigned char *from, | |||
374 | goto err; | 383 | goto err; |
375 | } | 384 | } |
376 | 385 | ||
377 | if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx, | 386 | if (!meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx, |
378 | rsa->_method_mod_n)) goto err; | 387 | rsa->_method_mod_n)) goto err; |
379 | 388 | ||
380 | p=buf; | 389 | p=buf; |
@@ -402,17 +411,19 @@ err: | |||
402 | if (buf != NULL) | 411 | if (buf != NULL) |
403 | { | 412 | { |
404 | memset(buf,0,num); | 413 | memset(buf,0,num); |
405 | Free(buf); | 414 | OPENSSL_free(buf); |
406 | } | 415 | } |
407 | return(r); | 416 | return(r); |
408 | } | 417 | } |
409 | 418 | ||
410 | static int RSA_eay_mod_exp(BIGNUM *r0, BIGNUM *I, RSA *rsa) | 419 | static int RSA_eay_mod_exp(BIGNUM *r0, BIGNUM *I, RSA *rsa) |
411 | { | 420 | { |
421 | const RSA_METHOD *meth; | ||
412 | BIGNUM r1,m1; | 422 | BIGNUM r1,m1; |
413 | int ret=0; | 423 | int ret=0; |
414 | BN_CTX *ctx; | 424 | BN_CTX *ctx; |
415 | 425 | ||
426 | meth = ENGINE_get_RSA(rsa->engine); | ||
416 | if ((ctx=BN_CTX_new()) == NULL) goto err; | 427 | if ((ctx=BN_CTX_new()) == NULL) goto err; |
417 | BN_init(&m1); | 428 | BN_init(&m1); |
418 | BN_init(&r1); | 429 | BN_init(&r1); |
@@ -436,11 +447,11 @@ static int RSA_eay_mod_exp(BIGNUM *r0, BIGNUM *I, RSA *rsa) | |||
436 | } | 447 | } |
437 | 448 | ||
438 | if (!BN_mod(&r1,I,rsa->q,ctx)) goto err; | 449 | if (!BN_mod(&r1,I,rsa->q,ctx)) goto err; |
439 | if (!rsa->meth->bn_mod_exp(&m1,&r1,rsa->dmq1,rsa->q,ctx, | 450 | if (!meth->bn_mod_exp(&m1,&r1,rsa->dmq1,rsa->q,ctx, |
440 | rsa->_method_mod_q)) goto err; | 451 | rsa->_method_mod_q)) goto err; |
441 | 452 | ||
442 | if (!BN_mod(&r1,I,rsa->p,ctx)) goto err; | 453 | if (!BN_mod(&r1,I,rsa->p,ctx)) goto err; |
443 | if (!rsa->meth->bn_mod_exp(r0,&r1,rsa->dmp1,rsa->p,ctx, | 454 | if (!meth->bn_mod_exp(r0,&r1,rsa->dmp1,rsa->p,ctx, |
444 | rsa->_method_mod_p)) goto err; | 455 | rsa->_method_mod_p)) goto err; |
445 | 456 | ||
446 | if (!BN_sub(r0,r0,&m1)) goto err; | 457 | if (!BN_sub(r0,r0,&m1)) goto err; |