indent has problems with comments that are on the right hand side of a line.
[oweals/openssl.git] / crypto / rsa / rsa_eay.c
1 /* crypto/rsa/rsa_eay.c */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3  * All rights reserved.
4  *
5  * This package is an SSL implementation written
6  * by Eric Young (eay@cryptsoft.com).
7  * The implementation was written so as to conform with Netscapes SSL.
8  * 
9  * This library is free for commercial and non-commercial use as long as
10  * the following conditions are aheared to.  The following conditions
11  * apply to all code found in this distribution, be it the RC4, RSA,
12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13  * included with this distribution is covered by the same copyright terms
14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15  * 
16  * Copyright remains Eric Young's, and as such any Copyright notices in
17  * the code are not to be removed.
18  * If this package is used in a product, Eric Young should be given attribution
19  * as the author of the parts of the library used.
20  * This can be in the form of a textual message at program startup or
21  * in documentation (online or textual) provided with the package.
22  * 
23  * Redistribution and use in source and binary forms, with or without
24  * modification, are permitted provided that the following conditions
25  * are met:
26  * 1. Redistributions of source code must retain the copyright
27  *    notice, this list of conditions and the following disclaimer.
28  * 2. Redistributions in binary form must reproduce the above copyright
29  *    notice, this list of conditions and the following disclaimer in the
30  *    documentation and/or other materials provided with the distribution.
31  * 3. All advertising materials mentioning features or use of this software
32  *    must display the following acknowledgement:
33  *    "This product includes cryptographic software written by
34  *     Eric Young (eay@cryptsoft.com)"
35  *    The word 'cryptographic' can be left out if the rouines from the library
36  *    being used are not cryptographic related :-).
37  * 4. If you include any Windows specific code (or a derivative thereof) from 
38  *    the apps directory (application code) you must include an acknowledgement:
39  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40  * 
41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  * 
53  * The licence and distribution terms for any publically available version or
54  * derivative of this code cannot be changed.  i.e. this code cannot simply be
55  * copied and put under another distribution licence
56  * [including the GNU Public Licence.]
57  */
58 /* ====================================================================
59  * Copyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.
60  *
61  * Redistribution and use in source and binary forms, with or without
62  * modification, are permitted provided that the following conditions
63  * are met:
64  *
65  * 1. Redistributions of source code must retain the above copyright
66  *    notice, this list of conditions and the following disclaimer. 
67  *
68  * 2. Redistributions in binary form must reproduce the above copyright
69  *    notice, this list of conditions and the following disclaimer in
70  *    the documentation and/or other materials provided with the
71  *    distribution.
72  *
73  * 3. All advertising materials mentioning features or use of this
74  *    software must display the following acknowledgment:
75  *    "This product includes software developed by the OpenSSL Project
76  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77  *
78  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79  *    endorse or promote products derived from this software without
80  *    prior written permission. For written permission, please contact
81  *    openssl-core@openssl.org.
82  *
83  * 5. Products derived from this software may not be called "OpenSSL"
84  *    nor may "OpenSSL" appear in their names without prior written
85  *    permission of the OpenSSL Project.
86  *
87  * 6. Redistributions of any form whatsoever must retain the following
88  *    acknowledgment:
89  *    "This product includes software developed by the OpenSSL Project
90  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91  *
92  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
96  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103  * OF THE POSSIBILITY OF SUCH DAMAGE.
104  * ====================================================================
105  *
106  * This product includes cryptographic software written by Eric Young
107  * (eay@cryptsoft.com).  This product includes software written by Tim
108  * Hudson (tjh@cryptsoft.com).
109  *
110  */
111
112
113
114 #include "cryptlib.h"
115 #include "internal/bn_int.h"
116 #include <openssl/rsa.h>
117 #include <openssl/rand.h>
118
119 #ifndef RSA_NULL
120
121 static int RSA_eay_public_encrypt(int flen, const unsigned char *from,
122                 unsigned char *to, RSA *rsa,int padding);
123 static int RSA_eay_private_encrypt(int flen, const unsigned char *from,
124                 unsigned char *to, RSA *rsa,int padding);
125 static int RSA_eay_public_decrypt(int flen, const unsigned char *from,
126                 unsigned char *to, RSA *rsa,int padding);
127 static int RSA_eay_private_decrypt(int flen, const unsigned char *from,
128                 unsigned char *to, RSA *rsa,int padding);
129 static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx);
130 static int RSA_eay_init(RSA *rsa);
131 static int RSA_eay_finish(RSA *rsa);
132 static RSA_METHOD rsa_pkcs1_eay_meth={
133         "Eric Young's PKCS#1 RSA",
134         RSA_eay_public_encrypt,
135         RSA_eay_public_decrypt, /* signature verification */
136         RSA_eay_private_encrypt, /* signing */
137         RSA_eay_private_decrypt,
138         RSA_eay_mod_exp,
139         BN_mod_exp_mont, /* XXX probably we should not use Montgomery if  e == 3 */
140         RSA_eay_init,
141         RSA_eay_finish,
142         RSA_FLAG_FIPS_METHOD, /* flags */
143         NULL,
144         0, /* rsa_sign */
145         0, /* rsa_verify */
146         NULL /* rsa_keygen */
147         };
148
149 const RSA_METHOD *RSA_PKCS1_SSLeay(void)
150         {
151         return(&rsa_pkcs1_eay_meth);
152         }
153
154 static int RSA_eay_public_encrypt(int flen, const unsigned char *from,
155              unsigned char *to, RSA *rsa, int padding)
156         {
157         BIGNUM *f,*ret;
158         int i,j,k,num=0,r= -1;
159         unsigned char *buf=NULL;
160         BN_CTX *ctx=NULL;
161
162         if (BN_num_bits(rsa->n) > OPENSSL_RSA_MAX_MODULUS_BITS)
163                 {
164                 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_MODULUS_TOO_LARGE);
165                 return -1;
166                 }
167
168         if (BN_ucmp(rsa->n, rsa->e) <= 0)
169                 {
170                 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_BAD_E_VALUE);
171                 return -1;
172                 }
173
174         /* for large moduli, enforce exponent limit */
175         if (BN_num_bits(rsa->n) > OPENSSL_RSA_SMALL_MODULUS_BITS)
176                 {
177                 if (BN_num_bits(rsa->e) > OPENSSL_RSA_MAX_PUBEXP_BITS)
178                         {
179                         RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_BAD_E_VALUE);
180                         return -1;
181                         }
182                 }
183         
184         if ((ctx=BN_CTX_new()) == NULL) goto err;
185         BN_CTX_start(ctx);
186         f = BN_CTX_get(ctx);
187         ret = BN_CTX_get(ctx);
188         num=BN_num_bytes(rsa->n);
189         buf = OPENSSL_malloc(num);
190         if (!f || !ret || !buf)
191                 {
192                 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,ERR_R_MALLOC_FAILURE);
193                 goto err;
194                 }
195
196         switch (padding)
197                 {
198         case RSA_PKCS1_PADDING:
199                 i=RSA_padding_add_PKCS1_type_2(buf,num,from,flen);
200                 break;
201 #ifndef OPENSSL_NO_SHA
202         case RSA_PKCS1_OAEP_PADDING:
203                 i=RSA_padding_add_PKCS1_OAEP(buf,num,from,flen,NULL,0);
204                 break;
205 #endif
206         case RSA_SSLV23_PADDING:
207                 i=RSA_padding_add_SSLv23(buf,num,from,flen);
208                 break;
209         case RSA_NO_PADDING:
210                 i=RSA_padding_add_none(buf,num,from,flen);
211                 break;
212         default:
213                 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
214                 goto err;
215                 }
216         if (i <= 0) goto err;
217
218         if (BN_bin2bn(buf,num,f) == NULL) goto err;
219         
220         if (BN_ucmp(f, rsa->n) >= 0)
221                 {
222                 /* usually the padding functions would catch this */
223                 RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
224                 goto err;
225                 }
226
227         if (rsa->flags & RSA_FLAG_CACHE_PUBLIC)
228                 if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, CRYPTO_LOCK_RSA, rsa->n, ctx))
229                         goto err;
230
231         if (!rsa->meth->bn_mod_exp(ret,f,rsa->e,rsa->n,ctx,
232                 rsa->_method_mod_n)) goto err;
233
234         /* put in leading 0 bytes if the number is less than the
235          * length of the modulus */
236         j=BN_num_bytes(ret);
237         i=BN_bn2bin(ret,&(to[num-j]));
238         for (k=0; k<(num-i); k++)
239                 to[k]=0;
240
241         r=num;
242 err:
243         if (ctx != NULL)
244                 {
245                 BN_CTX_end(ctx);
246                 BN_CTX_free(ctx);
247                 }
248         if (buf != NULL) 
249                 {
250                 OPENSSL_cleanse(buf,num);
251                 OPENSSL_free(buf);
252                 }
253         return(r);
254         }
255
256 static BN_BLINDING *rsa_get_blinding(RSA *rsa, int *local, BN_CTX *ctx)
257 {
258         BN_BLINDING *ret;
259         int got_write_lock = 0;
260         CRYPTO_THREADID cur;
261
262         CRYPTO_r_lock(CRYPTO_LOCK_RSA);
263
264         if (rsa->blinding == NULL)
265                 {
266                 CRYPTO_r_unlock(CRYPTO_LOCK_RSA);
267                 CRYPTO_w_lock(CRYPTO_LOCK_RSA);
268                 got_write_lock = 1;
269
270                 if (rsa->blinding == NULL)
271                         rsa->blinding = RSA_setup_blinding(rsa, ctx);
272                 }
273
274         ret = rsa->blinding;
275         if (ret == NULL)
276                 goto err;
277
278         CRYPTO_THREADID_current(&cur);
279         if (!CRYPTO_THREADID_cmp(&cur, BN_BLINDING_thread_id(ret)))
280                 {
281                 /* rsa->blinding is ours! */
282
283                 *local = 1;
284                 }
285         else
286                 {
287                 /* resort to rsa->mt_blinding instead */
288
289                 /* instructs rsa_blinding_convert(), rsa_blinding_invert()
290                  * that the BN_BLINDING is shared, meaning that accesses
291                  * require locks, and that the blinding factor must be
292                  * stored outside the BN_BLINDING
293                  */
294                 *local = 0;
295
296                 if (rsa->mt_blinding == NULL)
297                         {
298                         if (!got_write_lock)
299                                 {
300                                 CRYPTO_r_unlock(CRYPTO_LOCK_RSA);
301                                 CRYPTO_w_lock(CRYPTO_LOCK_RSA);
302                                 got_write_lock = 1;
303                                 }
304                         
305                         if (rsa->mt_blinding == NULL)
306                                 rsa->mt_blinding = RSA_setup_blinding(rsa, ctx);
307                         }
308                 ret = rsa->mt_blinding;
309                 }
310
311  err:
312         if (got_write_lock)
313                 CRYPTO_w_unlock(CRYPTO_LOCK_RSA);
314         else
315                 CRYPTO_r_unlock(CRYPTO_LOCK_RSA);
316         return ret;
317 }
318
319 static int rsa_blinding_convert(BN_BLINDING *b, BIGNUM *f, BIGNUM *unblind,
320         BN_CTX *ctx)
321         {
322         if (unblind == NULL)
323                 /* Local blinding: store the unblinding factor
324                  * in BN_BLINDING. */
325                 return BN_BLINDING_convert_ex(f, NULL, b, ctx);
326         else
327                 {
328                 /* Shared blinding: store the unblinding factor
329                  * outside BN_BLINDING. */
330                 int ret;
331                 CRYPTO_w_lock(CRYPTO_LOCK_RSA_BLINDING);
332                 ret = BN_BLINDING_convert_ex(f, unblind, b, ctx);
333                 CRYPTO_w_unlock(CRYPTO_LOCK_RSA_BLINDING);
334                 return ret;
335                 }
336         }
337
338 static int rsa_blinding_invert(BN_BLINDING *b, BIGNUM *f, BIGNUM *unblind,
339         BN_CTX *ctx)
340         {
341         /* For local blinding, unblind is set to NULL, and BN_BLINDING_invert_ex
342          * will use the unblinding factor stored in BN_BLINDING.
343          * If BN_BLINDING is shared between threads, unblind must be non-null:
344          * BN_BLINDING_invert_ex will then use the local unblinding factor,
345          * and will only read the modulus from BN_BLINDING.
346          * In both cases it's safe to access the blinding without a lock.
347          */
348         return BN_BLINDING_invert_ex(f, unblind, b, ctx);
349         }
350
351 /* signing */
352 static int RSA_eay_private_encrypt(int flen, const unsigned char *from,
353              unsigned char *to, RSA *rsa, int padding)
354         {
355         BIGNUM *f, *ret, *res;
356         int i,j,k,num=0,r= -1;
357         unsigned char *buf=NULL;
358         BN_CTX *ctx=NULL;
359         int local_blinding = 0;
360         /* Used only if the blinding structure is shared. A non-NULL unblind
361          * instructs rsa_blinding_convert() and rsa_blinding_invert() to store
362          * the unblinding factor outside the blinding structure. */
363         BIGNUM *unblind = NULL;
364         BN_BLINDING *blinding = NULL;
365
366         if ((ctx=BN_CTX_new()) == NULL) goto err;
367         BN_CTX_start(ctx);
368         f   = BN_CTX_get(ctx);
369         ret = BN_CTX_get(ctx);
370         num = BN_num_bytes(rsa->n);
371         buf = OPENSSL_malloc(num);
372         if(!f || !ret || !buf)
373                 {
374                 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,ERR_R_MALLOC_FAILURE);
375                 goto err;
376                 }
377
378         switch (padding)
379                 {
380         case RSA_PKCS1_PADDING:
381                 i=RSA_padding_add_PKCS1_type_1(buf,num,from,flen);
382                 break;
383         case RSA_X931_PADDING:
384                 i=RSA_padding_add_X931(buf,num,from,flen);
385                 break;
386         case RSA_NO_PADDING:
387                 i=RSA_padding_add_none(buf,num,from,flen);
388                 break;
389         case RSA_SSLV23_PADDING:
390         default:
391                 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
392                 goto err;
393                 }
394         if (i <= 0) goto err;
395
396         if (BN_bin2bn(buf,num,f) == NULL) goto err;
397         
398         if (BN_ucmp(f, rsa->n) >= 0)
399                 {       
400                 /* usually the padding functions would catch this */
401                 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
402                 goto err;
403                 }
404
405         if (!(rsa->flags & RSA_FLAG_NO_BLINDING))
406                 {
407                 blinding = rsa_get_blinding(rsa, &local_blinding, ctx);
408                 if (blinding == NULL)
409                         {
410                         RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT, ERR_R_INTERNAL_ERROR);
411                         goto err;
412                         }
413                 }
414         
415         if (blinding != NULL)
416                 {
417                 if (!local_blinding && ((unblind = BN_CTX_get(ctx)) == NULL))
418                         {
419                         RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,ERR_R_MALLOC_FAILURE);
420                         goto err;
421                         }
422                 if (!rsa_blinding_convert(blinding, f, unblind, ctx))
423                         goto err;
424                 }
425
426         if ( (rsa->flags & RSA_FLAG_EXT_PKEY) ||
427                 ((rsa->p != NULL) &&
428                 (rsa->q != NULL) &&
429                 (rsa->dmp1 != NULL) &&
430                 (rsa->dmq1 != NULL) &&
431                 (rsa->iqmp != NULL)) )
432                 { 
433                 if (!rsa->meth->rsa_mod_exp(ret, f, rsa, ctx)) goto err;
434                 }
435         else
436                 {
437                 BIGNUM *d = NULL, *local_d = NULL;
438                 
439                 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
440                         {
441                         local_d = d = BN_new();
442                         if(!d)
443                                 {
444                                 RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,ERR_R_MALLOC_FAILURE);
445                                 goto err;
446                                 }
447                         BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
448                         }
449                 else
450                         d= rsa->d;
451
452                 if (rsa->flags & RSA_FLAG_CACHE_PUBLIC)
453                         if(!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, CRYPTO_LOCK_RSA, rsa->n, ctx))
454                                 {
455                                 if(local_d) BN_free(local_d);
456                                 goto err;
457                                 }
458
459                 if (!rsa->meth->bn_mod_exp(ret,f,d,rsa->n,ctx,
460                                 rsa->_method_mod_n))
461                         {
462                         if(local_d) BN_free(local_d);
463                         goto err;
464                         }
465                 if(local_d) BN_free(local_d);
466                 }
467
468         if (blinding)
469                 if (!rsa_blinding_invert(blinding, ret, unblind, ctx))
470                         goto err;
471
472         if (padding == RSA_X931_PADDING)
473                 {
474                 BN_sub(f, rsa->n, ret);
475                 if (BN_cmp(ret, f) > 0)
476                         res = f;
477                 else
478                         res = ret;
479                 }
480         else
481                 res = ret;
482
483         /* put in leading 0 bytes if the number is less than the
484          * length of the modulus */
485         j=BN_num_bytes(res);
486         i=BN_bn2bin(res,&(to[num-j]));
487         for (k=0; k<(num-i); k++)
488                 to[k]=0;
489
490         r=num;
491 err:
492         if (ctx != NULL)
493                 {
494                 BN_CTX_end(ctx);
495                 BN_CTX_free(ctx);
496                 }
497         if (buf != NULL)
498                 {
499                 OPENSSL_cleanse(buf,num);
500                 OPENSSL_free(buf);
501                 }
502         return(r);
503         }
504
505 static int RSA_eay_private_decrypt(int flen, const unsigned char *from,
506              unsigned char *to, RSA *rsa, int padding)
507         {
508         BIGNUM *f, *ret;
509         int j,num=0,r= -1;
510         unsigned char *p;
511         unsigned char *buf=NULL;
512         BN_CTX *ctx=NULL;
513         int local_blinding = 0;
514         /* Used only if the blinding structure is shared. A non-NULL unblind
515          * instructs rsa_blinding_convert() and rsa_blinding_invert() to store
516          * the unblinding factor outside the blinding structure. */
517         BIGNUM *unblind = NULL;
518         BN_BLINDING *blinding = NULL;
519
520         if((ctx = BN_CTX_new()) == NULL) goto err;
521         BN_CTX_start(ctx);
522         f   = BN_CTX_get(ctx);
523         ret = BN_CTX_get(ctx);
524         num = BN_num_bytes(rsa->n);
525         buf = OPENSSL_malloc(num);
526         if(!f || !ret || !buf)
527                 {
528                 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,ERR_R_MALLOC_FAILURE);
529                 goto err;
530                 }
531
532         /* This check was for equality but PGP does evil things
533          * and chops off the top '0' bytes */
534         if (flen > num)
535                 {
536                 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_DATA_GREATER_THAN_MOD_LEN);
537                 goto err;
538                 }
539
540         /* make data into a big number */
541         if (BN_bin2bn(from,(int)flen,f) == NULL) goto err;
542
543         if (BN_ucmp(f, rsa->n) >= 0)
544                 {
545                 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
546                 goto err;
547                 }
548
549         if (!(rsa->flags & RSA_FLAG_NO_BLINDING))
550                 {
551                 blinding = rsa_get_blinding(rsa, &local_blinding, ctx);
552                 if (blinding == NULL)
553                         {
554                         RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT, ERR_R_INTERNAL_ERROR);
555                         goto err;
556                         }
557                 }
558         
559         if (blinding != NULL)
560                 {
561                 if (!local_blinding && ((unblind = BN_CTX_get(ctx)) == NULL))
562                         {
563                         RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,ERR_R_MALLOC_FAILURE);
564                         goto err;
565                         }
566                 if (!rsa_blinding_convert(blinding, f, unblind, ctx))
567                         goto err;
568                 }
569
570         /* do the decrypt */
571         if ( (rsa->flags & RSA_FLAG_EXT_PKEY) ||
572                 ((rsa->p != NULL) &&
573                 (rsa->q != NULL) &&
574                 (rsa->dmp1 != NULL) &&
575                 (rsa->dmq1 != NULL) &&
576                 (rsa->iqmp != NULL)) )
577                 {
578                 if (!rsa->meth->rsa_mod_exp(ret, f, rsa, ctx)) goto err;
579                 }
580         else
581                 {
582                 BIGNUM *d = NULL, *local_d = NULL;
583                 
584                 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
585                         {
586                         local_d = d = BN_new();
587                         if(!d)
588                                 {
589                                 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,ERR_R_MALLOC_FAILURE);
590                                 goto err;
591                                 }
592                         BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
593                         }
594                 else
595                         d = rsa->d;
596
597                 if (rsa->flags & RSA_FLAG_CACHE_PUBLIC)
598                         if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, CRYPTO_LOCK_RSA, rsa->n, ctx))
599                                 {
600                                 if(local_d) BN_free(local_d);
601                                 goto err;
602                                 }
603                 if (!rsa->meth->bn_mod_exp(ret,f,d,rsa->n,ctx,
604                                 rsa->_method_mod_n))
605                         {
606                         if(local_d) BN_free(local_d);
607                         goto err;
608                         }
609                 if(local_d) BN_free(local_d);
610                 }
611
612         if (blinding)
613                 if (!rsa_blinding_invert(blinding, ret, unblind, ctx))
614                         goto err;
615
616         p=buf;
617         j=BN_bn2bin(ret,p); /* j is only used with no-padding mode */
618
619         switch (padding)
620                 {
621         case RSA_PKCS1_PADDING:
622                 r=RSA_padding_check_PKCS1_type_2(to,num,buf,j,num);
623                 break;
624 #ifndef OPENSSL_NO_SHA
625         case RSA_PKCS1_OAEP_PADDING:
626                 r=RSA_padding_check_PKCS1_OAEP(to,num,buf,j,num,NULL,0);
627                 break;
628 #endif
629         case RSA_SSLV23_PADDING:
630                 r=RSA_padding_check_SSLv23(to,num,buf,j,num);
631                 break;
632         case RSA_NO_PADDING:
633                 r=RSA_padding_check_none(to,num,buf,j,num);
634                 break;
635         default:
636                 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
637                 goto err;
638                 }
639         if (r < 0)
640                 RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT,RSA_R_PADDING_CHECK_FAILED);
641
642 err:
643         if (ctx != NULL)
644                 {
645                 BN_CTX_end(ctx);
646                 BN_CTX_free(ctx);
647                 }
648         if (buf != NULL)
649                 {
650                 OPENSSL_cleanse(buf,num);
651                 OPENSSL_free(buf);
652                 }
653         return(r);
654         }
655
656 /* signature verification */
657 static int RSA_eay_public_decrypt(int flen, const unsigned char *from,
658              unsigned char *to, RSA *rsa, int padding)
659         {
660         BIGNUM *f,*ret;
661         int i,num=0,r= -1;
662         unsigned char *p;
663         unsigned char *buf=NULL;
664         BN_CTX *ctx=NULL;
665
666         if (BN_num_bits(rsa->n) > OPENSSL_RSA_MAX_MODULUS_BITS)
667                 {
668                 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, RSA_R_MODULUS_TOO_LARGE);
669                 return -1;
670                 }
671
672         if (BN_ucmp(rsa->n, rsa->e) <= 0)
673                 {
674                 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, RSA_R_BAD_E_VALUE);
675                 return -1;
676                 }
677
678         /* for large moduli, enforce exponent limit */
679         if (BN_num_bits(rsa->n) > OPENSSL_RSA_SMALL_MODULUS_BITS)
680                 {
681                 if (BN_num_bits(rsa->e) > OPENSSL_RSA_MAX_PUBEXP_BITS)
682                         {
683                         RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT, RSA_R_BAD_E_VALUE);
684                         return -1;
685                         }
686                 }
687         
688         if((ctx = BN_CTX_new()) == NULL) goto err;
689         BN_CTX_start(ctx);
690         f = BN_CTX_get(ctx);
691         ret = BN_CTX_get(ctx);
692         num=BN_num_bytes(rsa->n);
693         buf = OPENSSL_malloc(num);
694         if(!f || !ret || !buf)
695                 {
696                 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,ERR_R_MALLOC_FAILURE);
697                 goto err;
698                 }
699
700         /* This check was for equality but PGP does evil things
701          * and chops off the top '0' bytes */
702         if (flen > num)
703                 {
704                 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_DATA_GREATER_THAN_MOD_LEN);
705                 goto err;
706                 }
707
708         if (BN_bin2bn(from,flen,f) == NULL) goto err;
709
710         if (BN_ucmp(f, rsa->n) >= 0)
711                 {
712                 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
713                 goto err;
714                 }
715
716         if (rsa->flags & RSA_FLAG_CACHE_PUBLIC)
717                 if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, CRYPTO_LOCK_RSA, rsa->n, ctx))
718                         goto err;
719
720         if (!rsa->meth->bn_mod_exp(ret,f,rsa->e,rsa->n,ctx,
721                 rsa->_method_mod_n)) goto err;
722
723         if ((padding == RSA_X931_PADDING) && ((bn_get_words(ret)[0] & 0xf) != 12))
724                 if (!BN_sub(ret, rsa->n, ret)) goto err;
725
726         p=buf;
727         i=BN_bn2bin(ret,p);
728
729         switch (padding)
730                 {
731         case RSA_PKCS1_PADDING:
732                 r=RSA_padding_check_PKCS1_type_1(to,num,buf,i,num);
733                 break;
734         case RSA_X931_PADDING:
735                 r=RSA_padding_check_X931(to,num,buf,i,num);
736                 break;
737         case RSA_NO_PADDING:
738                 r=RSA_padding_check_none(to,num,buf,i,num);
739                 break;
740         default:
741                 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_UNKNOWN_PADDING_TYPE);
742                 goto err;
743                 }
744         if (r < 0)
745                 RSAerr(RSA_F_RSA_EAY_PUBLIC_DECRYPT,RSA_R_PADDING_CHECK_FAILED);
746
747 err:
748         if (ctx != NULL)
749                 {
750                 BN_CTX_end(ctx);
751                 BN_CTX_free(ctx);
752                 }
753         if (buf != NULL)
754                 {
755                 OPENSSL_cleanse(buf,num);
756                 OPENSSL_free(buf);
757                 }
758         return(r);
759         }
760
761 static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx)
762         {
763         BIGNUM *r1,*m1,*vrfy;
764         BIGNUM *local_dmp1, *local_dmq1, *local_c, *local_r1;
765         BIGNUM *dmp1,*dmq1,*c,*pr1;
766         int ret=0;
767
768
769         local_dmp1 = BN_new();
770         local_dmq1 = BN_new();
771         local_c = BN_new();
772         local_r1 = BN_new();
773         if(!local_dmp1 || !local_dmq1 || !local_c || !local_r1)
774                 goto err;
775
776         BN_CTX_start(ctx);
777         r1 = BN_CTX_get(ctx);
778         m1 = BN_CTX_get(ctx);
779         vrfy = BN_CTX_get(ctx);
780
781         {
782                 BIGNUM *local_p = NULL, *local_q = NULL;
783                 BIGNUM *p = NULL, *q = NULL;
784
785                 /* Make sure BN_mod_inverse in Montgomery intialization uses the
786                  * BN_FLG_CONSTTIME flag (unless RSA_FLAG_NO_CONSTTIME is set)
787                  */
788                 if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
789                         {
790                         local_p = p = BN_new();
791                         if(!p) goto err;
792                         BN_with_flags(p, rsa->p, BN_FLG_CONSTTIME);
793
794                         local_q = q = BN_new();
795                         if(!q)
796                                 {
797                                 BN_free(local_p);
798                                 goto err;
799                                 }
800                         BN_with_flags(q, rsa->q, BN_FLG_CONSTTIME);
801                         }
802                 else
803                         {
804                         p = rsa->p;
805                         q = rsa->q;
806                         }
807
808                 if (rsa->flags & RSA_FLAG_CACHE_PRIVATE)
809                         {
810                         if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_p, CRYPTO_LOCK_RSA, p, ctx) || !BN_MONT_CTX_set_locked(&rsa->_method_mod_q, CRYPTO_LOCK_RSA, q, ctx))
811                                 {
812                                 if(local_p) BN_free(local_p);
813                                 if(local_q) BN_free(local_q);
814                                 goto err;
815                                 }
816                         }
817                 if(local_p) BN_free(local_p);
818                 if(local_q) BN_free(local_q);
819         }
820
821         if (rsa->flags & RSA_FLAG_CACHE_PUBLIC)
822                 if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, CRYPTO_LOCK_RSA, rsa->n, ctx))
823                         goto err;
824
825         /* compute I mod q */
826         if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
827                 {
828                 c = local_c;
829                 BN_with_flags(c, I, BN_FLG_CONSTTIME);
830                 if (!BN_mod(r1,c,rsa->q,ctx)) goto err;
831                 }
832         else
833                 {
834                 if (!BN_mod(r1,I,rsa->q,ctx)) goto err;
835                 }
836
837         /* compute r1^dmq1 mod q */
838         if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
839                 {
840                 dmq1 = local_dmq1;
841                 BN_with_flags(dmq1, rsa->dmq1, BN_FLG_CONSTTIME);
842                 }
843         else
844                 dmq1 = rsa->dmq1;
845         if (!rsa->meth->bn_mod_exp(m1,r1,dmq1,rsa->q,ctx,
846                 rsa->_method_mod_q)) goto err;
847
848         /* compute I mod p */
849         if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
850                 {
851                 c = local_c;
852                 BN_with_flags(c, I, BN_FLG_CONSTTIME);
853                 if (!BN_mod(r1,c,rsa->p,ctx)) goto err;
854                 }
855         else
856                 {
857                 if (!BN_mod(r1,I,rsa->p,ctx)) goto err;
858                 }
859
860         /* compute r1^dmp1 mod p */
861         if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
862                 {
863                 dmp1 = local_dmp1;
864                 BN_with_flags(dmp1, rsa->dmp1, BN_FLG_CONSTTIME);
865                 }
866         else
867                 dmp1 = rsa->dmp1;
868         if (!rsa->meth->bn_mod_exp(r0,r1,dmp1,rsa->p,ctx,
869                 rsa->_method_mod_p)) goto err;
870
871         if (!BN_sub(r0,r0,m1)) goto err;
872         /* This will help stop the size of r0 increasing, which does
873          * affect the multiply if it optimised for a power of 2 size */
874         if (BN_is_negative(r0))
875                 if (!BN_add(r0,r0,rsa->p)) goto err;
876
877         if (!BN_mul(r1,r0,rsa->iqmp,ctx)) goto err;
878
879         /* Turn BN_FLG_CONSTTIME flag on before division operation */
880         if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
881                 {
882                 pr1 = local_r1;
883                 BN_with_flags(pr1, r1, BN_FLG_CONSTTIME);
884                 }
885         else
886                 pr1 = r1;
887         if (!BN_mod(r0,pr1,rsa->p,ctx)) goto err;
888
889         /* If p < q it is occasionally possible for the correction of
890          * adding 'p' if r0 is negative above to leave the result still
891          * negative. This can break the private key operations: the following
892          * second correction should *always* correct this rare occurrence.
893          * This will *never* happen with OpenSSL generated keys because
894          * they ensure p > q [steve]
895          */
896         if (BN_is_negative(r0))
897                 if (!BN_add(r0,r0,rsa->p)) goto err;
898         if (!BN_mul(r1,r0,rsa->q,ctx)) goto err;
899         if (!BN_add(r0,r1,m1)) goto err;
900
901         if (rsa->e && rsa->n)
902                 {
903                 if (!rsa->meth->bn_mod_exp(vrfy,r0,rsa->e,rsa->n,ctx,rsa->_method_mod_n)) goto err;
904                 /* If 'I' was greater than (or equal to) rsa->n, the operation
905                  * will be equivalent to using 'I mod n'. However, the result of
906                  * the verify will *always* be less than 'n' so we don't check
907                  * for absolute equality, just congruency. */
908                 if (!BN_sub(vrfy, vrfy, I)) goto err;
909                 if (!BN_mod(vrfy, vrfy, rsa->n, ctx)) goto err;
910                 if (BN_is_negative(vrfy))
911                         if (!BN_add(vrfy, vrfy, rsa->n)) goto err;
912                 if (!BN_is_zero(vrfy))
913                         {
914                         /* 'I' and 'vrfy' aren't congruent mod n. Don't leak
915                          * miscalculated CRT output, just do a raw (slower)
916                          * mod_exp and return that instead. */
917
918                         BIGNUM *local_d = NULL;
919                         BIGNUM *d = NULL;
920                 
921                         if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
922                                 {
923                                 local_d = d = BN_new();
924                                 if(!d) goto err;
925                                 BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
926                                 }
927                         else
928                                 d = rsa->d;
929                         if (!rsa->meth->bn_mod_exp(r0,I,d,rsa->n,ctx,
930                                                    rsa->_method_mod_n))
931                                 {
932                                 if(local_d) BN_free(local_d);
933                                 goto err;
934                                 }
935
936                         if(local_d) BN_free(local_d);
937                         }
938                 }
939         ret=1;
940 err:
941         if(local_dmp1) BN_free(local_dmp1);
942         if(local_dmq1) BN_free(local_dmq1);
943         if(local_c) BN_free(local_c);
944         if(local_r1) BN_free(local_r1);
945         BN_CTX_end(ctx);
946         return(ret);
947         }
948
949 static int RSA_eay_init(RSA *rsa)
950         {
951         rsa->flags|=RSA_FLAG_CACHE_PUBLIC|RSA_FLAG_CACHE_PRIVATE;
952         return(1);
953         }
954
955 static int RSA_eay_finish(RSA *rsa)
956         {
957         if (rsa->_method_mod_n != NULL)
958                 BN_MONT_CTX_free(rsa->_method_mod_n);
959         if (rsa->_method_mod_p != NULL)
960                 BN_MONT_CTX_free(rsa->_method_mod_p);
961         if (rsa->_method_mod_q != NULL)
962                 BN_MONT_CTX_free(rsa->_method_mod_q);
963         return(1);
964         }
965
966 #endif