Home | History | Annotate | Download | only in rsa
      1 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com)
      2  * All rights reserved.
      3  *
      4  * This package is an SSL implementation written
      5  * by Eric Young (eay (at) cryptsoft.com).
      6  * The implementation was written so as to conform with Netscapes SSL.
      7  *
      8  * This library is free for commercial and non-commercial use as long as
      9  * the following conditions are aheared to.  The following conditions
     10  * apply to all code found in this distribution, be it the RC4, RSA,
     11  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
     12  * included with this distribution is covered by the same copyright terms
     13  * except that the holder is Tim Hudson (tjh (at) cryptsoft.com).
     14  *
     15  * Copyright remains Eric Young's, and as such any Copyright notices in
     16  * the code are not to be removed.
     17  * If this package is used in a product, Eric Young should be given attribution
     18  * as the author of the parts of the library used.
     19  * This can be in the form of a textual message at program startup or
     20  * in documentation (online or textual) provided with the package.
     21  *
     22  * Redistribution and use in source and binary forms, with or without
     23  * modification, are permitted provided that the following conditions
     24  * are met:
     25  * 1. Redistributions of source code must retain the copyright
     26  *    notice, this list of conditions and the following disclaimer.
     27  * 2. Redistributions in binary form must reproduce the above copyright
     28  *    notice, this list of conditions and the following disclaimer in the
     29  *    documentation and/or other materials provided with the distribution.
     30  * 3. All advertising materials mentioning features or use of this software
     31  *    must display the following acknowledgement:
     32  *    "This product includes cryptographic software written by
     33  *     Eric Young (eay (at) cryptsoft.com)"
     34  *    The word 'cryptographic' can be left out if the rouines from the library
     35  *    being used are not cryptographic related :-).
     36  * 4. If you include any Windows specific code (or a derivative thereof) from
     37  *    the apps directory (application code) you must include an acknowledgement:
     38  *    "This product includes software written by Tim Hudson (tjh (at) cryptsoft.com)"
     39  *
     40  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
     41  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     42  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     43  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     44  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     45  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     46  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     47  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     48  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     49  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     50  * SUCH DAMAGE.
     51  *
     52  * The licence and distribution terms for any publically available version or
     53  * derivative of this code cannot be changed.  i.e. this code cannot simply be
     54  * copied and put under another distribution licence
     55  * [including the GNU Public Licence.] */
     56 
     57 #include <openssl/rsa.h>
     58 
     59 #include <string.h>
     60 
     61 #include <openssl/bn.h>
     62 #include <openssl/err.h>
     63 #include <openssl/mem.h>
     64 #include <openssl/thread.h>
     65 
     66 #include "internal.h"
     67 #include "../internal.h"
     68 
     69 
     70 #define OPENSSL_RSA_MAX_MODULUS_BITS 16384
     71 #define OPENSSL_RSA_SMALL_MODULUS_BITS 3072
     72 #define OPENSSL_RSA_MAX_PUBEXP_BITS \
     73   64 /* exponent limit enforced for "large" modulus only */
     74 
     75 
     76 size_t rsa_default_size(const RSA *rsa) {
     77   return BN_num_bytes(rsa->n);
     78 }
     79 
     80 int rsa_default_encrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
     81                         const uint8_t *in, size_t in_len, int padding) {
     82   const unsigned rsa_size = RSA_size(rsa);
     83   BIGNUM *f, *result;
     84   uint8_t *buf = NULL;
     85   BN_CTX *ctx = NULL;
     86   int i, ret = 0;
     87 
     88   if (rsa_size > OPENSSL_RSA_MAX_MODULUS_BITS) {
     89     OPENSSL_PUT_ERROR(RSA, RSA_R_MODULUS_TOO_LARGE);
     90     return 0;
     91   }
     92 
     93   if (max_out < rsa_size) {
     94     OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
     95     return 0;
     96   }
     97 
     98   if (BN_ucmp(rsa->n, rsa->e) <= 0) {
     99     OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE);
    100     return 0;
    101   }
    102 
    103   /* for large moduli, enforce exponent limit */
    104   if (BN_num_bits(rsa->n) > OPENSSL_RSA_SMALL_MODULUS_BITS &&
    105       BN_num_bits(rsa->e) > OPENSSL_RSA_MAX_PUBEXP_BITS) {
    106     OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE);
    107     return 0;
    108   }
    109 
    110   ctx = BN_CTX_new();
    111   if (ctx == NULL) {
    112     goto err;
    113   }
    114 
    115   BN_CTX_start(ctx);
    116   f = BN_CTX_get(ctx);
    117   result = BN_CTX_get(ctx);
    118   buf = OPENSSL_malloc(rsa_size);
    119   if (!f || !result || !buf) {
    120     OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
    121     goto err;
    122   }
    123 
    124   switch (padding) {
    125     case RSA_PKCS1_PADDING:
    126       i = RSA_padding_add_PKCS1_type_2(buf, rsa_size, in, in_len);
    127       break;
    128     case RSA_PKCS1_OAEP_PADDING:
    129       /* Use the default parameters: SHA-1 for both hashes and no label. */
    130       i = RSA_padding_add_PKCS1_OAEP_mgf1(buf, rsa_size, in, in_len,
    131                                           NULL, 0, NULL, NULL);
    132       break;
    133     case RSA_NO_PADDING:
    134       i = RSA_padding_add_none(buf, rsa_size, in, in_len);
    135       break;
    136     default:
    137       OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
    138       goto err;
    139   }
    140 
    141   if (i <= 0) {
    142     goto err;
    143   }
    144 
    145   if (BN_bin2bn(buf, rsa_size, f) == NULL) {
    146     goto err;
    147   }
    148 
    149   if (BN_ucmp(f, rsa->n) >= 0) {
    150     /* usually the padding functions would catch this */
    151     OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
    152     goto err;
    153   }
    154 
    155   if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) {
    156     if (BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx) == NULL) {
    157       goto err;
    158     }
    159   }
    160 
    161   if (!rsa->meth->bn_mod_exp(result, f, rsa->e, rsa->n, ctx, rsa->mont_n)) {
    162     goto err;
    163   }
    164 
    165   /* put in leading 0 bytes if the number is less than the length of the
    166    * modulus */
    167   if (!BN_bn2bin_padded(out, rsa_size, result)) {
    168     OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
    169     goto err;
    170   }
    171 
    172   *out_len = rsa_size;
    173   ret = 1;
    174 
    175 err:
    176   if (ctx != NULL) {
    177     BN_CTX_end(ctx);
    178     BN_CTX_free(ctx);
    179   }
    180   if (buf != NULL) {
    181     OPENSSL_cleanse(buf, rsa_size);
    182     OPENSSL_free(buf);
    183   }
    184 
    185   return ret;
    186 }
    187 
    188 /* MAX_BLINDINGS_PER_RSA defines the maximum number of cached BN_BLINDINGs per
    189  * RSA*. Then this limit is exceeded, BN_BLINDING objects will be created and
    190  * destroyed as needed. */
    191 #define MAX_BLINDINGS_PER_RSA 1024
    192 
    193 /* rsa_blinding_get returns a BN_BLINDING to use with |rsa|. It does this by
    194  * allocating one of the cached BN_BLINDING objects in |rsa->blindings|. If
    195  * none are free, the cache will be extended by a extra element and the new
    196  * BN_BLINDING is returned.
    197  *
    198  * On success, the index of the assigned BN_BLINDING is written to
    199  * |*index_used| and must be passed to |rsa_blinding_release| when finished. */
    200 static BN_BLINDING *rsa_blinding_get(RSA *rsa, unsigned *index_used,
    201                                      BN_CTX *ctx) {
    202   BN_BLINDING *ret = NULL;
    203   BN_BLINDING **new_blindings;
    204   uint8_t *new_blindings_inuse;
    205   char overflow = 0;
    206 
    207   CRYPTO_MUTEX_lock_write(&rsa->lock);
    208 
    209   unsigned i;
    210   for (i = 0; i < rsa->num_blindings; i++) {
    211     if (rsa->blindings_inuse[i] == 0) {
    212       rsa->blindings_inuse[i] = 1;
    213       ret = rsa->blindings[i];
    214       *index_used = i;
    215       break;
    216     }
    217   }
    218 
    219   if (ret != NULL) {
    220     CRYPTO_MUTEX_unlock(&rsa->lock);
    221     return ret;
    222   }
    223 
    224   overflow = rsa->num_blindings >= MAX_BLINDINGS_PER_RSA;
    225 
    226   /* We didn't find a free BN_BLINDING to use so increase the length of
    227    * the arrays by one and use the newly created element. */
    228 
    229   CRYPTO_MUTEX_unlock(&rsa->lock);
    230   ret = rsa_setup_blinding(rsa, ctx);
    231   if (ret == NULL) {
    232     return NULL;
    233   }
    234 
    235   if (overflow) {
    236     /* We cannot add any more cached BN_BLINDINGs so we use |ret|
    237      * and mark it for destruction in |rsa_blinding_release|. */
    238     *index_used = MAX_BLINDINGS_PER_RSA;
    239     return ret;
    240   }
    241 
    242   CRYPTO_MUTEX_lock_write(&rsa->lock);
    243 
    244   new_blindings =
    245       OPENSSL_malloc(sizeof(BN_BLINDING *) * (rsa->num_blindings + 1));
    246   if (new_blindings == NULL) {
    247     goto err1;
    248   }
    249   memcpy(new_blindings, rsa->blindings,
    250          sizeof(BN_BLINDING *) * rsa->num_blindings);
    251   new_blindings[rsa->num_blindings] = ret;
    252 
    253   new_blindings_inuse = OPENSSL_malloc(rsa->num_blindings + 1);
    254   if (new_blindings_inuse == NULL) {
    255     goto err2;
    256   }
    257   memcpy(new_blindings_inuse, rsa->blindings_inuse, rsa->num_blindings);
    258   new_blindings_inuse[rsa->num_blindings] = 1;
    259   *index_used = rsa->num_blindings;
    260 
    261   OPENSSL_free(rsa->blindings);
    262   rsa->blindings = new_blindings;
    263   OPENSSL_free(rsa->blindings_inuse);
    264   rsa->blindings_inuse = new_blindings_inuse;
    265   rsa->num_blindings++;
    266 
    267   CRYPTO_MUTEX_unlock(&rsa->lock);
    268   return ret;
    269 
    270 err2:
    271   OPENSSL_free(new_blindings);
    272 
    273 err1:
    274   CRYPTO_MUTEX_unlock(&rsa->lock);
    275   BN_BLINDING_free(ret);
    276   return NULL;
    277 }
    278 
    279 /* rsa_blinding_release marks the cached BN_BLINDING at the given index as free
    280  * for other threads to use. */
    281 static void rsa_blinding_release(RSA *rsa, BN_BLINDING *blinding,
    282                                  unsigned blinding_index) {
    283   if (blinding_index == MAX_BLINDINGS_PER_RSA) {
    284     /* This blinding wasn't cached. */
    285     BN_BLINDING_free(blinding);
    286     return;
    287   }
    288 
    289   CRYPTO_MUTEX_lock_write(&rsa->lock);
    290   rsa->blindings_inuse[blinding_index] = 0;
    291   CRYPTO_MUTEX_unlock(&rsa->lock);
    292 }
    293 
    294 /* signing */
    295 int rsa_default_sign_raw(RSA *rsa, size_t *out_len, uint8_t *out,
    296                          size_t max_out, const uint8_t *in, size_t in_len,
    297                          int padding) {
    298   const unsigned rsa_size = RSA_size(rsa);
    299   uint8_t *buf = NULL;
    300   int i, ret = 0;
    301 
    302   if (max_out < rsa_size) {
    303     OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
    304     return 0;
    305   }
    306 
    307   buf = OPENSSL_malloc(rsa_size);
    308   if (buf == NULL) {
    309     OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
    310     goto err;
    311   }
    312 
    313   switch (padding) {
    314     case RSA_PKCS1_PADDING:
    315       i = RSA_padding_add_PKCS1_type_1(buf, rsa_size, in, in_len);
    316       break;
    317     case RSA_NO_PADDING:
    318       i = RSA_padding_add_none(buf, rsa_size, in, in_len);
    319       break;
    320     default:
    321       OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
    322       goto err;
    323   }
    324 
    325   if (i <= 0) {
    326     goto err;
    327   }
    328 
    329   if (!RSA_private_transform(rsa, out, buf, rsa_size)) {
    330     goto err;
    331   }
    332 
    333   *out_len = rsa_size;
    334   ret = 1;
    335 
    336 err:
    337   if (buf != NULL) {
    338     OPENSSL_cleanse(buf, rsa_size);
    339     OPENSSL_free(buf);
    340   }
    341 
    342   return ret;
    343 }
    344 
    345 int rsa_default_decrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
    346                         const uint8_t *in, size_t in_len, int padding) {
    347   const unsigned rsa_size = RSA_size(rsa);
    348   int r = -1;
    349   uint8_t *buf = NULL;
    350   int ret = 0;
    351 
    352   if (max_out < rsa_size) {
    353     OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
    354     return 0;
    355   }
    356 
    357   if (padding == RSA_NO_PADDING) {
    358     buf = out;
    359   } else {
    360     /* Allocate a temporary buffer to hold the padded plaintext. */
    361     buf = OPENSSL_malloc(rsa_size);
    362     if (buf == NULL) {
    363       OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
    364       goto err;
    365     }
    366   }
    367 
    368   if (in_len != rsa_size) {
    369     OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_LEN_NOT_EQUAL_TO_MOD_LEN);
    370     goto err;
    371   }
    372 
    373   if (!RSA_private_transform(rsa, buf, in, rsa_size)) {
    374     goto err;
    375   }
    376 
    377   switch (padding) {
    378     case RSA_PKCS1_PADDING:
    379       r = RSA_padding_check_PKCS1_type_2(out, rsa_size, buf, rsa_size);
    380       break;
    381     case RSA_PKCS1_OAEP_PADDING:
    382       /* Use the default parameters: SHA-1 for both hashes and no label. */
    383       r = RSA_padding_check_PKCS1_OAEP_mgf1(out, rsa_size, buf, rsa_size,
    384                                             NULL, 0, NULL, NULL);
    385       break;
    386     case RSA_NO_PADDING:
    387       r = rsa_size;
    388       break;
    389     default:
    390       OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
    391       goto err;
    392   }
    393 
    394   if (r < 0) {
    395     OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED);
    396   } else {
    397     *out_len = r;
    398     ret = 1;
    399   }
    400 
    401 err:
    402   if (padding != RSA_NO_PADDING && buf != NULL) {
    403     OPENSSL_cleanse(buf, rsa_size);
    404     OPENSSL_free(buf);
    405   }
    406 
    407   return ret;
    408 }
    409 
    410 int rsa_default_verify_raw(RSA *rsa, size_t *out_len, uint8_t *out,
    411                            size_t max_out, const uint8_t *in, size_t in_len,
    412                            int padding) {
    413   const unsigned rsa_size = RSA_size(rsa);
    414   BIGNUM *f, *result;
    415   int ret = 0;
    416   int r = -1;
    417   uint8_t *buf = NULL;
    418   BN_CTX *ctx = NULL;
    419 
    420   if (BN_num_bits(rsa->n) > OPENSSL_RSA_MAX_MODULUS_BITS) {
    421     OPENSSL_PUT_ERROR(RSA, RSA_R_MODULUS_TOO_LARGE);
    422     return 0;
    423   }
    424 
    425   if (BN_ucmp(rsa->n, rsa->e) <= 0) {
    426     OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE);
    427     return 0;
    428   }
    429 
    430   if (max_out < rsa_size) {
    431     OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
    432     return 0;
    433   }
    434 
    435   /* for large moduli, enforce exponent limit */
    436   if (BN_num_bits(rsa->n) > OPENSSL_RSA_SMALL_MODULUS_BITS &&
    437       BN_num_bits(rsa->e) > OPENSSL_RSA_MAX_PUBEXP_BITS) {
    438     OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE);
    439     return 0;
    440   }
    441 
    442   ctx = BN_CTX_new();
    443   if (ctx == NULL) {
    444     goto err;
    445   }
    446 
    447   BN_CTX_start(ctx);
    448   f = BN_CTX_get(ctx);
    449   result = BN_CTX_get(ctx);
    450   if (padding == RSA_NO_PADDING) {
    451     buf = out;
    452   } else {
    453     /* Allocate a temporary buffer to hold the padded plaintext. */
    454     buf = OPENSSL_malloc(rsa_size);
    455     if (buf == NULL) {
    456       OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
    457       goto err;
    458     }
    459   }
    460   if (!f || !result) {
    461     OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
    462     goto err;
    463   }
    464 
    465   if (in_len != rsa_size) {
    466     OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_LEN_NOT_EQUAL_TO_MOD_LEN);
    467     goto err;
    468   }
    469 
    470   if (BN_bin2bn(in, in_len, f) == NULL) {
    471     goto err;
    472   }
    473 
    474   if (BN_ucmp(f, rsa->n) >= 0) {
    475     OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
    476     goto err;
    477   }
    478 
    479   if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) {
    480     if (BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx) == NULL) {
    481       goto err;
    482     }
    483   }
    484 
    485   if (!rsa->meth->bn_mod_exp(result, f, rsa->e, rsa->n, ctx, rsa->mont_n)) {
    486     goto err;
    487   }
    488 
    489   if (!BN_bn2bin_padded(buf, rsa_size, result)) {
    490     OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
    491     goto err;
    492   }
    493 
    494   switch (padding) {
    495     case RSA_PKCS1_PADDING:
    496       r = RSA_padding_check_PKCS1_type_1(out, rsa_size, buf, rsa_size);
    497       break;
    498     case RSA_NO_PADDING:
    499       r = rsa_size;
    500       break;
    501     default:
    502       OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
    503       goto err;
    504   }
    505 
    506   if (r < 0) {
    507     OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED);
    508   } else {
    509     *out_len = r;
    510     ret = 1;
    511   }
    512 
    513 err:
    514   if (ctx != NULL) {
    515     BN_CTX_end(ctx);
    516     BN_CTX_free(ctx);
    517   }
    518   if (padding != RSA_NO_PADDING && buf != NULL) {
    519     OPENSSL_cleanse(buf, rsa_size);
    520     OPENSSL_free(buf);
    521   }
    522   return ret;
    523 }
    524 
    525 int rsa_default_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in,
    526                                   size_t len) {
    527   BIGNUM *f, *result;
    528   BN_CTX *ctx = NULL;
    529   unsigned blinding_index = 0;
    530   BN_BLINDING *blinding = NULL;
    531   int ret = 0;
    532 
    533   ctx = BN_CTX_new();
    534   if (ctx == NULL) {
    535     goto err;
    536   }
    537   BN_CTX_start(ctx);
    538   f = BN_CTX_get(ctx);
    539   result = BN_CTX_get(ctx);
    540 
    541   if (f == NULL || result == NULL) {
    542     OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
    543     goto err;
    544   }
    545 
    546   if (BN_bin2bn(in, len, f) == NULL) {
    547     goto err;
    548   }
    549 
    550   if (BN_ucmp(f, rsa->n) >= 0) {
    551     /* Usually the padding functions would catch this. */
    552     OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
    553     goto err;
    554   }
    555 
    556   if (!(rsa->flags & RSA_FLAG_NO_BLINDING)) {
    557     blinding = rsa_blinding_get(rsa, &blinding_index, ctx);
    558     if (blinding == NULL) {
    559       OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
    560       goto err;
    561     }
    562     if (!BN_BLINDING_convert_ex(f, NULL, blinding, ctx)) {
    563       goto err;
    564     }
    565   }
    566 
    567   if ((rsa->flags & RSA_FLAG_EXT_PKEY) ||
    568       ((rsa->p != NULL) && (rsa->q != NULL) && (rsa->dmp1 != NULL) &&
    569        (rsa->dmq1 != NULL) && (rsa->iqmp != NULL))) {
    570     if (!rsa->meth->mod_exp(result, f, rsa, ctx)) {
    571       goto err;
    572     }
    573   } else {
    574     BIGNUM local_d;
    575     BIGNUM *d = NULL;
    576 
    577     BN_init(&local_d);
    578     d = &local_d;
    579     BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
    580 
    581     if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) {
    582       if (BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx) ==
    583           NULL) {
    584         goto err;
    585       }
    586     }
    587 
    588     if (!rsa->meth->bn_mod_exp(result, f, d, rsa->n, ctx, rsa->mont_n)) {
    589       goto err;
    590     }
    591   }
    592 
    593   if (blinding) {
    594     if (!BN_BLINDING_invert_ex(result, NULL, blinding, ctx)) {
    595       goto err;
    596     }
    597   }
    598 
    599   if (!BN_bn2bin_padded(out, len, result)) {
    600     OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
    601     goto err;
    602   }
    603 
    604   ret = 1;
    605 
    606 err:
    607   if (ctx != NULL) {
    608     BN_CTX_end(ctx);
    609     BN_CTX_free(ctx);
    610   }
    611   if (blinding != NULL) {
    612     rsa_blinding_release(rsa, blinding, blinding_index);
    613   }
    614 
    615   return ret;
    616 }
    617 
    618 static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) {
    619   BIGNUM *r1, *m1, *vrfy;
    620   BIGNUM local_dmp1, local_dmq1, local_c, local_r1;
    621   BIGNUM *dmp1, *dmq1, *c, *pr1;
    622   int ret = 0;
    623   size_t i, num_additional_primes = 0;
    624 
    625   if (rsa->additional_primes != NULL) {
    626     num_additional_primes = sk_RSA_additional_prime_num(rsa->additional_primes);
    627   }
    628 
    629   BN_CTX_start(ctx);
    630   r1 = BN_CTX_get(ctx);
    631   m1 = BN_CTX_get(ctx);
    632   vrfy = BN_CTX_get(ctx);
    633 
    634   {
    635     BIGNUM local_p, local_q;
    636     BIGNUM *p = NULL, *q = NULL;
    637 
    638     /* Make sure BN_mod_inverse in Montgomery intialization uses the
    639      * BN_FLG_CONSTTIME flag. */
    640     BN_init(&local_p);
    641     p = &local_p;
    642     BN_with_flags(p, rsa->p, BN_FLG_CONSTTIME);
    643 
    644     BN_init(&local_q);
    645     q = &local_q;
    646     BN_with_flags(q, rsa->q, BN_FLG_CONSTTIME);
    647 
    648     if (rsa->flags & RSA_FLAG_CACHE_PRIVATE) {
    649       if (BN_MONT_CTX_set_locked(&rsa->mont_p, &rsa->lock, p, ctx) == NULL) {
    650         goto err;
    651       }
    652       if (BN_MONT_CTX_set_locked(&rsa->mont_q, &rsa->lock, q, ctx) == NULL) {
    653         goto err;
    654       }
    655     }
    656   }
    657 
    658   if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) {
    659     if (BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx) == NULL) {
    660       goto err;
    661     }
    662   }
    663 
    664   /* compute I mod q */
    665   c = &local_c;
    666   BN_with_flags(c, I, BN_FLG_CONSTTIME);
    667   if (!BN_mod(r1, c, rsa->q, ctx)) {
    668     goto err;
    669   }
    670 
    671   /* compute r1^dmq1 mod q */
    672   dmq1 = &local_dmq1;
    673   BN_with_flags(dmq1, rsa->dmq1, BN_FLG_CONSTTIME);
    674   if (!rsa->meth->bn_mod_exp(m1, r1, dmq1, rsa->q, ctx, rsa->mont_q)) {
    675     goto err;
    676   }
    677 
    678   /* compute I mod p */
    679   c = &local_c;
    680   BN_with_flags(c, I, BN_FLG_CONSTTIME);
    681   if (!BN_mod(r1, c, rsa->p, ctx)) {
    682     goto err;
    683   }
    684 
    685   /* compute r1^dmp1 mod p */
    686   dmp1 = &local_dmp1;
    687   BN_with_flags(dmp1, rsa->dmp1, BN_FLG_CONSTTIME);
    688   if (!rsa->meth->bn_mod_exp(r0, r1, dmp1, rsa->p, ctx, rsa->mont_p)) {
    689     goto err;
    690   }
    691 
    692   if (!BN_sub(r0, r0, m1)) {
    693     goto err;
    694   }
    695   /* This will help stop the size of r0 increasing, which does
    696    * affect the multiply if it optimised for a power of 2 size */
    697   if (BN_is_negative(r0)) {
    698     if (!BN_add(r0, r0, rsa->p)) {
    699       goto err;
    700     }
    701   }
    702 
    703   if (!BN_mul(r1, r0, rsa->iqmp, ctx)) {
    704     goto err;
    705   }
    706 
    707   /* Turn BN_FLG_CONSTTIME flag on before division operation */
    708   pr1 = &local_r1;
    709   BN_with_flags(pr1, r1, BN_FLG_CONSTTIME);
    710 
    711   if (!BN_mod(r0, pr1, rsa->p, ctx)) {
    712     goto err;
    713   }
    714 
    715   /* If p < q it is occasionally possible for the correction of
    716    * adding 'p' if r0 is negative above to leave the result still
    717    * negative. This can break the private key operations: the following
    718    * second correction should *always* correct this rare occurrence.
    719    * This will *never* happen with OpenSSL generated keys because
    720    * they ensure p > q [steve] */
    721   if (BN_is_negative(r0)) {
    722     if (!BN_add(r0, r0, rsa->p)) {
    723       goto err;
    724     }
    725   }
    726   if (!BN_mul(r1, r0, rsa->q, ctx)) {
    727     goto err;
    728   }
    729   if (!BN_add(r0, r1, m1)) {
    730     goto err;
    731   }
    732 
    733   for (i = 0; i < num_additional_primes; i++) {
    734     /* multi-prime RSA. */
    735     BIGNUM local_exp, local_prime;
    736     BIGNUM *exp = &local_exp, *prime = &local_prime;
    737     RSA_additional_prime *ap =
    738         sk_RSA_additional_prime_value(rsa->additional_primes, i);
    739 
    740     BN_with_flags(exp, ap->exp, BN_FLG_CONSTTIME);
    741     BN_with_flags(prime, ap->prime, BN_FLG_CONSTTIME);
    742 
    743     /* c will already point to a BIGNUM with the correct flags. */
    744     if (!BN_mod(r1, c, prime, ctx)) {
    745       goto err;
    746     }
    747 
    748     if ((rsa->flags & RSA_FLAG_CACHE_PRIVATE) &&
    749         !BN_MONT_CTX_set_locked(&ap->mont, &rsa->lock, prime, ctx)) {
    750       goto err;
    751     }
    752 
    753     if (!rsa->meth->bn_mod_exp(m1, r1, exp, prime, ctx, ap->mont)) {
    754       goto err;
    755     }
    756 
    757     BN_set_flags(m1, BN_FLG_CONSTTIME);
    758 
    759     if (!BN_sub(m1, m1, r0) ||
    760         !BN_mul(m1, m1, ap->coeff, ctx) ||
    761         !BN_mod(m1, m1, prime, ctx) ||
    762         (BN_is_negative(m1) && !BN_add(m1, m1, prime)) ||
    763         !BN_mul(m1, m1, ap->r, ctx) ||
    764         !BN_add(r0, r0, m1)) {
    765       goto err;
    766     }
    767   }
    768 
    769   if (rsa->e && rsa->n) {
    770     if (!rsa->meth->bn_mod_exp(vrfy, r0, rsa->e, rsa->n, ctx, rsa->mont_n)) {
    771       goto err;
    772     }
    773     /* If 'I' was greater than (or equal to) rsa->n, the operation
    774      * will be equivalent to using 'I mod n'. However, the result of
    775      * the verify will *always* be less than 'n' so we don't check
    776      * for absolute equality, just congruency. */
    777     if (!BN_sub(vrfy, vrfy, I)) {
    778       goto err;
    779     }
    780     if (!BN_mod(vrfy, vrfy, rsa->n, ctx)) {
    781       goto err;
    782     }
    783     if (BN_is_negative(vrfy)) {
    784       if (!BN_add(vrfy, vrfy, rsa->n)) {
    785         goto err;
    786       }
    787     }
    788     if (!BN_is_zero(vrfy)) {
    789       /* 'I' and 'vrfy' aren't congruent mod n. Don't leak
    790        * miscalculated CRT output, just do a raw (slower)
    791        * mod_exp and return that instead. */
    792 
    793       BIGNUM local_d;
    794       BIGNUM *d = NULL;
    795 
    796       d = &local_d;
    797       BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
    798       if (!rsa->meth->bn_mod_exp(r0, I, d, rsa->n, ctx, rsa->mont_n)) {
    799         goto err;
    800       }
    801     }
    802   }
    803   ret = 1;
    804 
    805 err:
    806   BN_CTX_end(ctx);
    807   return ret;
    808 }
    809 
    810 int rsa_default_multi_prime_keygen(RSA *rsa, int bits, int num_primes,
    811                                    BIGNUM *e_value, BN_GENCB *cb) {
    812   BIGNUM *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *tmp;
    813   BIGNUM local_r0, local_d, local_p;
    814   BIGNUM *pr0, *d, *p;
    815   int prime_bits, ok = -1, n = 0, i, j;
    816   BN_CTX *ctx = NULL;
    817   STACK_OF(RSA_additional_prime) *additional_primes = NULL;
    818 
    819   if (num_primes < 2) {
    820     ok = 0; /* we set our own err */
    821     OPENSSL_PUT_ERROR(RSA, RSA_R_MUST_HAVE_AT_LEAST_TWO_PRIMES);
    822     goto err;
    823   }
    824 
    825   ctx = BN_CTX_new();
    826   if (ctx == NULL) {
    827     goto err;
    828   }
    829   BN_CTX_start(ctx);
    830   r0 = BN_CTX_get(ctx);
    831   r1 = BN_CTX_get(ctx);
    832   r2 = BN_CTX_get(ctx);
    833   r3 = BN_CTX_get(ctx);
    834   if (r0 == NULL || r1 == NULL || r2 == NULL || r3 == NULL) {
    835     goto err;
    836   }
    837 
    838   if (num_primes > 2) {
    839     additional_primes = sk_RSA_additional_prime_new_null();
    840     if (additional_primes == NULL) {
    841       goto err;
    842     }
    843   }
    844 
    845   for (i = 2; i < num_primes; i++) {
    846     RSA_additional_prime *ap = OPENSSL_malloc(sizeof(RSA_additional_prime));
    847     if (ap == NULL) {
    848       goto err;
    849     }
    850     memset(ap, 0, sizeof(RSA_additional_prime));
    851     ap->prime = BN_new();
    852     ap->exp = BN_new();
    853     ap->coeff = BN_new();
    854     ap->r = BN_new();
    855     if (ap->prime == NULL ||
    856         ap->exp == NULL ||
    857         ap->coeff == NULL ||
    858         ap->r == NULL ||
    859         !sk_RSA_additional_prime_push(additional_primes, ap)) {
    860       RSA_additional_prime_free(ap);
    861       goto err;
    862     }
    863   }
    864 
    865   /* We need the RSA components non-NULL */
    866   if (!rsa->n && ((rsa->n = BN_new()) == NULL)) {
    867     goto err;
    868   }
    869   if (!rsa->d && ((rsa->d = BN_new()) == NULL)) {
    870     goto err;
    871   }
    872   if (!rsa->e && ((rsa->e = BN_new()) == NULL)) {
    873     goto err;
    874   }
    875   if (!rsa->p && ((rsa->p = BN_new()) == NULL)) {
    876     goto err;
    877   }
    878   if (!rsa->q && ((rsa->q = BN_new()) == NULL)) {
    879     goto err;
    880   }
    881   if (!rsa->dmp1 && ((rsa->dmp1 = BN_new()) == NULL)) {
    882     goto err;
    883   }
    884   if (!rsa->dmq1 && ((rsa->dmq1 = BN_new()) == NULL)) {
    885     goto err;
    886   }
    887   if (!rsa->iqmp && ((rsa->iqmp = BN_new()) == NULL)) {
    888     goto err;
    889   }
    890 
    891   if (!BN_copy(rsa->e, e_value)) {
    892     goto err;
    893   }
    894 
    895   /* generate p and q */
    896   prime_bits = (bits + (num_primes - 1)) / num_primes;
    897   for (;;) {
    898     if (!BN_generate_prime_ex(rsa->p, prime_bits, 0, NULL, NULL, cb) ||
    899         !BN_sub(r2, rsa->p, BN_value_one()) ||
    900         !BN_gcd(r1, r2, rsa->e, ctx)) {
    901       goto err;
    902     }
    903     if (BN_is_one(r1)) {
    904       break;
    905     }
    906     if (!BN_GENCB_call(cb, 2, n++)) {
    907       goto err;
    908     }
    909   }
    910   if (!BN_GENCB_call(cb, 3, 0)) {
    911     goto err;
    912   }
    913   prime_bits = ((bits - prime_bits) + (num_primes - 2)) / (num_primes - 1);
    914   for (;;) {
    915     /* When generating ridiculously small keys, we can get stuck
    916      * continually regenerating the same prime values. Check for
    917      * this and bail if it happens 3 times. */
    918     unsigned int degenerate = 0;
    919     do {
    920       if (!BN_generate_prime_ex(rsa->q, prime_bits, 0, NULL, NULL, cb)) {
    921         goto err;
    922       }
    923     } while ((BN_cmp(rsa->p, rsa->q) == 0) && (++degenerate < 3));
    924     if (degenerate == 3) {
    925       ok = 0; /* we set our own err */
    926       OPENSSL_PUT_ERROR(RSA, RSA_R_KEY_SIZE_TOO_SMALL);
    927       goto err;
    928     }
    929     if (!BN_sub(r2, rsa->q, BN_value_one()) ||
    930         !BN_gcd(r1, r2, rsa->e, ctx)) {
    931       goto err;
    932     }
    933     if (BN_is_one(r1)) {
    934       break;
    935     }
    936     if (!BN_GENCB_call(cb, 2, n++)) {
    937       goto err;
    938     }
    939   }
    940 
    941   if (!BN_GENCB_call(cb, 3, 1) ||
    942       !BN_mul(rsa->n, rsa->p, rsa->q, ctx)) {
    943     goto err;
    944   }
    945 
    946   for (i = 2; i < num_primes; i++) {
    947     RSA_additional_prime *ap =
    948         sk_RSA_additional_prime_value(additional_primes, i - 2);
    949     prime_bits = ((bits - BN_num_bits(rsa->n)) + (num_primes - (i + 1))) /
    950                  (num_primes - i);
    951 
    952     for (;;) {
    953       if (!BN_generate_prime_ex(ap->prime, prime_bits, 0, NULL, NULL, cb)) {
    954         goto err;
    955       }
    956       if (BN_cmp(rsa->p, ap->prime) == 0 ||
    957           BN_cmp(rsa->q, ap->prime) == 0) {
    958         continue;
    959       }
    960 
    961       for (j = 0; j < i - 2; j++) {
    962         if (BN_cmp(sk_RSA_additional_prime_value(additional_primes, j)->prime,
    963                    ap->prime) == 0) {
    964           break;
    965         }
    966       }
    967       if (j != i - 2) {
    968         continue;
    969       }
    970 
    971       if (!BN_sub(r2, ap->prime, BN_value_one()) ||
    972           !BN_gcd(r1, r2, rsa->e, ctx)) {
    973         goto err;
    974       }
    975 
    976       if (!BN_is_one(r1)) {
    977         continue;
    978       }
    979       if (i != num_primes - 1) {
    980         break;
    981       }
    982 
    983       /* For the last prime we'll check that it makes n large enough. In the
    984        * two prime case this isn't a problem because we generate primes with
    985        * the top two bits set and so the product is always of the expected
    986        * size. In the multi prime case, this doesn't follow. */
    987       if (!BN_mul(r1, rsa->n, ap->prime, ctx)) {
    988         goto err;
    989       }
    990       if (BN_num_bits(r1) == (unsigned) bits) {
    991         break;
    992       }
    993 
    994       if (!BN_GENCB_call(cb, 2, n++)) {
    995         goto err;
    996       }
    997     }
    998 
    999     /* ap->r is is the product of all the primes prior to the current one
   1000      * (including p and q). */
   1001     if (!BN_copy(ap->r, rsa->n)) {
   1002       goto err;
   1003     }
   1004     if (i == num_primes - 1) {
   1005       /* In the case of the last prime, we calculated n as |r1| in the loop
   1006        * above. */
   1007       if (!BN_copy(rsa->n, r1)) {
   1008         goto err;
   1009       }
   1010     } else if (!BN_mul(rsa->n, rsa->n, ap->prime, ctx)) {
   1011       goto err;
   1012     }
   1013 
   1014     if (!BN_GENCB_call(cb, 3, 1)) {
   1015       goto err;
   1016     }
   1017   }
   1018 
   1019   if (BN_cmp(rsa->p, rsa->q) < 0) {
   1020     tmp = rsa->p;
   1021     rsa->p = rsa->q;
   1022     rsa->q = tmp;
   1023   }
   1024 
   1025   /* calculate d */
   1026   if (!BN_sub(r1, rsa->p, BN_value_one())) {
   1027     goto err; /* p-1 */
   1028   }
   1029   if (!BN_sub(r2, rsa->q, BN_value_one())) {
   1030     goto err; /* q-1 */
   1031   }
   1032   if (!BN_mul(r0, r1, r2, ctx)) {
   1033     goto err; /* (p-1)(q-1) */
   1034   }
   1035   for (i = 2; i < num_primes; i++) {
   1036     RSA_additional_prime *ap =
   1037         sk_RSA_additional_prime_value(additional_primes, i - 2);
   1038     if (!BN_sub(r3, ap->prime, BN_value_one()) ||
   1039         !BN_mul(r0, r0, r3, ctx)) {
   1040       goto err;
   1041     }
   1042   }
   1043   pr0 = &local_r0;
   1044   BN_with_flags(pr0, r0, BN_FLG_CONSTTIME);
   1045   if (!BN_mod_inverse(rsa->d, rsa->e, pr0, ctx)) {
   1046     goto err; /* d */
   1047   }
   1048 
   1049   /* set up d for correct BN_FLG_CONSTTIME flag */
   1050   d = &local_d;
   1051   BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
   1052 
   1053   /* calculate d mod (p-1) */
   1054   if (!BN_mod(rsa->dmp1, d, r1, ctx)) {
   1055     goto err;
   1056   }
   1057 
   1058   /* calculate d mod (q-1) */
   1059   if (!BN_mod(rsa->dmq1, d, r2, ctx)) {
   1060     goto err;
   1061   }
   1062 
   1063   /* calculate inverse of q mod p */
   1064   p = &local_p;
   1065   BN_with_flags(p, rsa->p, BN_FLG_CONSTTIME);
   1066 
   1067   if (!BN_mod_inverse(rsa->iqmp, rsa->q, p, ctx)) {
   1068     goto err;
   1069   }
   1070 
   1071   for (i = 2; i < num_primes; i++) {
   1072     RSA_additional_prime *ap =
   1073         sk_RSA_additional_prime_value(additional_primes, i - 2);
   1074     if (!BN_sub(ap->exp, ap->prime, BN_value_one()) ||
   1075         !BN_mod(ap->exp, rsa->d, ap->exp, ctx) ||
   1076         !BN_mod_inverse(ap->coeff, ap->r, ap->prime, ctx)) {
   1077       goto err;
   1078     }
   1079   }
   1080 
   1081   ok = 1;
   1082   rsa->additional_primes = additional_primes;
   1083   additional_primes = NULL;
   1084 
   1085 err:
   1086   if (ok == -1) {
   1087     OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
   1088     ok = 0;
   1089   }
   1090   if (ctx != NULL) {
   1091     BN_CTX_end(ctx);
   1092     BN_CTX_free(ctx);
   1093   }
   1094   sk_RSA_additional_prime_pop_free(additional_primes,
   1095                                    RSA_additional_prime_free);
   1096   return ok;
   1097 }
   1098 
   1099 int rsa_default_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) {
   1100   return rsa_default_multi_prime_keygen(rsa, bits, 2 /* num primes */, e_value,
   1101                                         cb);
   1102 }
   1103 
   1104 /* Many of these methods are NULL to more easily drop unused functions. The
   1105  * wrapper functions will select the appropriate |rsa_default_*| for all
   1106  * methods. */
   1107 const RSA_METHOD RSA_default_method = {
   1108   {
   1109     0 /* references */,
   1110     1 /* is_static */,
   1111   },
   1112   NULL /* app_data */,
   1113 
   1114   NULL /* init */,
   1115   NULL /* finish (defaults to rsa_default_finish) */,
   1116 
   1117   NULL /* size (defaults to rsa_default_size) */,
   1118 
   1119   NULL /* sign */,
   1120   NULL /* verify */,
   1121 
   1122   NULL /* encrypt (defaults to rsa_default_encrypt) */,
   1123   NULL /* sign_raw (defaults to rsa_default_sign_raw) */,
   1124   NULL /* decrypt (defaults to rsa_default_decrypt) */,
   1125   NULL /* verify_raw (defaults to rsa_default_verify_raw) */,
   1126 
   1127   NULL /* private_transform (defaults to rsa_default_private_transform) */,
   1128 
   1129   mod_exp,
   1130   BN_mod_exp_mont /* bn_mod_exp */,
   1131 
   1132   RSA_FLAG_CACHE_PUBLIC | RSA_FLAG_CACHE_PRIVATE,
   1133 
   1134   NULL /* keygen (defaults to rsa_default_keygen) */,
   1135   NULL /* multi_prime_keygen (defaults to rsa_default_multi_prime_keygen) */,
   1136 
   1137   NULL /* supports_digest */,
   1138 };
   1139