1/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2 * All rights reserved.
3 *
4 * This package is an SSL implementation written
5 * by Eric Young (eay@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@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@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@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 <assert.h>
60#include <limits.h>
61#include <string.h>
62
63#include <openssl/bn.h>
64#include <openssl/err.h>
65#include <openssl/mem.h>
66#include <openssl/thread.h>
67#include <openssl/type_check.h>
68
69#include "internal.h"
70#include "../bn/internal.h"
71#include "../../internal.h"
72#include "../delocate.h"
73
74
75static int check_modulus_and_exponent_sizes(const RSA *rsa) {
76  unsigned rsa_bits = BN_num_bits(rsa->n);
77
78  if (rsa_bits > 16 * 1024) {
79    OPENSSL_PUT_ERROR(RSA, RSA_R_MODULUS_TOO_LARGE);
80    return 0;
81  }
82
83  // Mitigate DoS attacks by limiting the exponent size. 33 bits was chosen as
84  // the limit based on the recommendations in [1] and [2]. Windows CryptoAPI
85  // doesn't support values larger than 32 bits [3], so it is unlikely that
86  // exponents larger than 32 bits are being used for anything Windows commonly
87  // does.
88  //
89  // [1] https://www.imperialviolet.org/2012/03/16/rsae.html
90  // [2] https://www.imperialviolet.org/2012/03/17/rsados.html
91  // [3] https://msdn.microsoft.com/en-us/library/aa387685(VS.85).aspx
92  static const unsigned kMaxExponentBits = 33;
93
94  if (BN_num_bits(rsa->e) > kMaxExponentBits) {
95    OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE);
96    return 0;
97  }
98
99  // Verify |n > e|. Comparing |rsa_bits| to |kMaxExponentBits| is a small
100  // shortcut to comparing |n| and |e| directly. In reality, |kMaxExponentBits|
101  // is much smaller than the minimum RSA key size that any application should
102  // accept.
103  if (rsa_bits <= kMaxExponentBits) {
104    OPENSSL_PUT_ERROR(RSA, RSA_R_KEY_SIZE_TOO_SMALL);
105    return 0;
106  }
107  assert(BN_ucmp(rsa->n, rsa->e) > 0);
108
109  return 1;
110}
111
112size_t rsa_default_size(const RSA *rsa) {
113  return BN_num_bytes(rsa->n);
114}
115
116int RSA_encrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
117                const uint8_t *in, size_t in_len, int padding) {
118  if (rsa->n == NULL || rsa->e == NULL) {
119    OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
120    return 0;
121  }
122
123  const unsigned rsa_size = RSA_size(rsa);
124  BIGNUM *f, *result;
125  uint8_t *buf = NULL;
126  BN_CTX *ctx = NULL;
127  int i, ret = 0;
128
129  if (max_out < rsa_size) {
130    OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
131    return 0;
132  }
133
134  if (!check_modulus_and_exponent_sizes(rsa)) {
135    return 0;
136  }
137
138  ctx = BN_CTX_new();
139  if (ctx == NULL) {
140    goto err;
141  }
142
143  BN_CTX_start(ctx);
144  f = BN_CTX_get(ctx);
145  result = BN_CTX_get(ctx);
146  buf = OPENSSL_malloc(rsa_size);
147  if (!f || !result || !buf) {
148    OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
149    goto err;
150  }
151
152  switch (padding) {
153    case RSA_PKCS1_PADDING:
154      i = RSA_padding_add_PKCS1_type_2(buf, rsa_size, in, in_len);
155      break;
156    case RSA_PKCS1_OAEP_PADDING:
157      // Use the default parameters: SHA-1 for both hashes and no label.
158      i = RSA_padding_add_PKCS1_OAEP_mgf1(buf, rsa_size, in, in_len,
159                                          NULL, 0, NULL, NULL);
160      break;
161    case RSA_NO_PADDING:
162      i = RSA_padding_add_none(buf, rsa_size, in, in_len);
163      break;
164    default:
165      OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
166      goto err;
167  }
168
169  if (i <= 0) {
170    goto err;
171  }
172
173  if (BN_bin2bn(buf, rsa_size, f) == NULL) {
174    goto err;
175  }
176
177  if (BN_ucmp(f, rsa->n) >= 0) {
178    // usually the padding functions would catch this
179    OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE);
180    goto err;
181  }
182
183  if (!BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx) ||
184      !BN_mod_exp_mont(result, f, rsa->e, rsa->n, ctx, rsa->mont_n)) {
185    goto err;
186  }
187
188  // put in leading 0 bytes if the number is less than the length of the
189  // modulus
190  if (!BN_bn2bin_padded(out, rsa_size, result)) {
191    OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
192    goto err;
193  }
194
195  *out_len = rsa_size;
196  ret = 1;
197
198err:
199  if (ctx != NULL) {
200    BN_CTX_end(ctx);
201    BN_CTX_free(ctx);
202  }
203  OPENSSL_free(buf);
204
205  return ret;
206}
207
208// MAX_BLINDINGS_PER_RSA defines the maximum number of cached BN_BLINDINGs per
209// RSA*. Then this limit is exceeded, BN_BLINDING objects will be created and
210// destroyed as needed.
211#define MAX_BLINDINGS_PER_RSA 1024
212
213// rsa_blinding_get returns a BN_BLINDING to use with |rsa|. It does this by
214// allocating one of the cached BN_BLINDING objects in |rsa->blindings|. If
215// none are free, the cache will be extended by a extra element and the new
216// BN_BLINDING is returned.
217//
218// On success, the index of the assigned BN_BLINDING is written to
219// |*index_used| and must be passed to |rsa_blinding_release| when finished.
220static BN_BLINDING *rsa_blinding_get(RSA *rsa, unsigned *index_used,
221                                     BN_CTX *ctx) {
222  assert(ctx != NULL);
223  assert(rsa->mont_n != NULL);
224
225  BN_BLINDING *ret = NULL;
226  BN_BLINDING **new_blindings;
227  uint8_t *new_blindings_inuse;
228  char overflow = 0;
229
230  CRYPTO_MUTEX_lock_write(&rsa->lock);
231
232  unsigned i;
233  for (i = 0; i < rsa->num_blindings; i++) {
234    if (rsa->blindings_inuse[i] == 0) {
235      rsa->blindings_inuse[i] = 1;
236      ret = rsa->blindings[i];
237      *index_used = i;
238      break;
239    }
240  }
241
242  if (ret != NULL) {
243    CRYPTO_MUTEX_unlock_write(&rsa->lock);
244    return ret;
245  }
246
247  overflow = rsa->num_blindings >= MAX_BLINDINGS_PER_RSA;
248
249  // We didn't find a free BN_BLINDING to use so increase the length of
250  // the arrays by one and use the newly created element.
251
252  CRYPTO_MUTEX_unlock_write(&rsa->lock);
253  ret = BN_BLINDING_new();
254  if (ret == NULL) {
255    return NULL;
256  }
257
258  if (overflow) {
259    // We cannot add any more cached BN_BLINDINGs so we use |ret|
260    // and mark it for destruction in |rsa_blinding_release|.
261    *index_used = MAX_BLINDINGS_PER_RSA;
262    return ret;
263  }
264
265  CRYPTO_MUTEX_lock_write(&rsa->lock);
266
267  new_blindings =
268      OPENSSL_malloc(sizeof(BN_BLINDING *) * (rsa->num_blindings + 1));
269  if (new_blindings == NULL) {
270    goto err1;
271  }
272  OPENSSL_memcpy(new_blindings, rsa->blindings,
273         sizeof(BN_BLINDING *) * rsa->num_blindings);
274  new_blindings[rsa->num_blindings] = ret;
275
276  new_blindings_inuse = OPENSSL_malloc(rsa->num_blindings + 1);
277  if (new_blindings_inuse == NULL) {
278    goto err2;
279  }
280  OPENSSL_memcpy(new_blindings_inuse, rsa->blindings_inuse, rsa->num_blindings);
281  new_blindings_inuse[rsa->num_blindings] = 1;
282  *index_used = rsa->num_blindings;
283
284  OPENSSL_free(rsa->blindings);
285  rsa->blindings = new_blindings;
286  OPENSSL_free(rsa->blindings_inuse);
287  rsa->blindings_inuse = new_blindings_inuse;
288  rsa->num_blindings++;
289
290  CRYPTO_MUTEX_unlock_write(&rsa->lock);
291  return ret;
292
293err2:
294  OPENSSL_free(new_blindings);
295
296err1:
297  CRYPTO_MUTEX_unlock_write(&rsa->lock);
298  BN_BLINDING_free(ret);
299  return NULL;
300}
301
302// rsa_blinding_release marks the cached BN_BLINDING at the given index as free
303// for other threads to use.
304static void rsa_blinding_release(RSA *rsa, BN_BLINDING *blinding,
305                                 unsigned blinding_index) {
306  if (blinding_index == MAX_BLINDINGS_PER_RSA) {
307    // This blinding wasn't cached.
308    BN_BLINDING_free(blinding);
309    return;
310  }
311
312  CRYPTO_MUTEX_lock_write(&rsa->lock);
313  rsa->blindings_inuse[blinding_index] = 0;
314  CRYPTO_MUTEX_unlock_write(&rsa->lock);
315}
316
317// signing
318int rsa_default_sign_raw(RSA *rsa, size_t *out_len, uint8_t *out,
319                         size_t max_out, const uint8_t *in, size_t in_len,
320                         int padding) {
321  const unsigned rsa_size = RSA_size(rsa);
322  uint8_t *buf = NULL;
323  int i, ret = 0;
324
325  if (max_out < rsa_size) {
326    OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
327    return 0;
328  }
329
330  buf = OPENSSL_malloc(rsa_size);
331  if (buf == NULL) {
332    OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
333    goto err;
334  }
335
336  switch (padding) {
337    case RSA_PKCS1_PADDING:
338      i = RSA_padding_add_PKCS1_type_1(buf, rsa_size, in, in_len);
339      break;
340    case RSA_NO_PADDING:
341      i = RSA_padding_add_none(buf, rsa_size, in, in_len);
342      break;
343    default:
344      OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
345      goto err;
346  }
347
348  if (i <= 0) {
349    goto err;
350  }
351
352  if (!RSA_private_transform(rsa, out, buf, rsa_size)) {
353    goto err;
354  }
355
356  *out_len = rsa_size;
357  ret = 1;
358
359err:
360  OPENSSL_free(buf);
361
362  return ret;
363}
364
365int rsa_default_decrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
366                        const uint8_t *in, size_t in_len, int padding) {
367  const unsigned rsa_size = RSA_size(rsa);
368  uint8_t *buf = NULL;
369  int ret = 0;
370
371  if (max_out < rsa_size) {
372    OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
373    return 0;
374  }
375
376  if (padding == RSA_NO_PADDING) {
377    buf = out;
378  } else {
379    // Allocate a temporary buffer to hold the padded plaintext.
380    buf = OPENSSL_malloc(rsa_size);
381    if (buf == NULL) {
382      OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
383      goto err;
384    }
385  }
386
387  if (in_len != rsa_size) {
388    OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_LEN_NOT_EQUAL_TO_MOD_LEN);
389    goto err;
390  }
391
392  if (!RSA_private_transform(rsa, buf, in, rsa_size)) {
393    goto err;
394  }
395
396  switch (padding) {
397    case RSA_PKCS1_PADDING:
398      ret =
399          RSA_padding_check_PKCS1_type_2(out, out_len, rsa_size, buf, rsa_size);
400      break;
401    case RSA_PKCS1_OAEP_PADDING:
402      // Use the default parameters: SHA-1 for both hashes and no label.
403      ret = RSA_padding_check_PKCS1_OAEP_mgf1(out, out_len, rsa_size, buf,
404                                              rsa_size, NULL, 0, NULL, NULL);
405      break;
406    case RSA_NO_PADDING:
407      *out_len = rsa_size;
408      ret = 1;
409      break;
410    default:
411      OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
412      goto err;
413  }
414
415  if (!ret) {
416    OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED);
417  }
418
419err:
420  if (padding != RSA_NO_PADDING) {
421    OPENSSL_free(buf);
422  }
423
424  return ret;
425}
426
427static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx);
428
429int RSA_verify_raw(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
430                   const uint8_t *in, size_t in_len, int padding) {
431  if (rsa->n == NULL || rsa->e == NULL) {
432    OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
433    return 0;
434  }
435
436  const unsigned rsa_size = RSA_size(rsa);
437  BIGNUM *f, *result;
438
439  if (max_out < rsa_size) {
440    OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
441    return 0;
442  }
443
444  if (in_len != rsa_size) {
445    OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_LEN_NOT_EQUAL_TO_MOD_LEN);
446    return 0;
447  }
448
449  if (!check_modulus_and_exponent_sizes(rsa)) {
450    return 0;
451  }
452
453  BN_CTX *ctx = BN_CTX_new();
454  if (ctx == NULL) {
455    return 0;
456  }
457
458  int ret = 0;
459  uint8_t *buf = NULL;
460
461  BN_CTX_start(ctx);
462  f = BN_CTX_get(ctx);
463  result = BN_CTX_get(ctx);
464  if (f == NULL || result == NULL) {
465    OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
466    goto err;
467  }
468
469  if (padding == RSA_NO_PADDING) {
470    buf = out;
471  } else {
472    // Allocate a temporary buffer to hold the padded plaintext.
473    buf = OPENSSL_malloc(rsa_size);
474    if (buf == NULL) {
475      OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
476      goto err;
477    }
478  }
479
480  if (BN_bin2bn(in, in_len, f) == NULL) {
481    goto err;
482  }
483
484  if (BN_ucmp(f, rsa->n) >= 0) {
485    OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE);
486    goto err;
487  }
488
489  if (!BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx) ||
490      !BN_mod_exp_mont(result, f, rsa->e, rsa->n, ctx, rsa->mont_n)) {
491    goto err;
492  }
493
494  if (!BN_bn2bin_padded(buf, rsa_size, result)) {
495    OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
496    goto err;
497  }
498
499  switch (padding) {
500    case RSA_PKCS1_PADDING:
501      ret =
502          RSA_padding_check_PKCS1_type_1(out, out_len, rsa_size, buf, rsa_size);
503      break;
504    case RSA_NO_PADDING:
505      ret = 1;
506      *out_len = rsa_size;
507      break;
508    default:
509      OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
510      goto err;
511  }
512
513  if (!ret) {
514    OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED);
515    goto err;
516  }
517
518err:
519  BN_CTX_end(ctx);
520  BN_CTX_free(ctx);
521  if (buf != out) {
522    OPENSSL_free(buf);
523  }
524  return ret;
525}
526
527int rsa_default_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in,
528                                  size_t len) {
529  if (rsa->n == NULL || rsa->d == NULL) {
530    OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
531    return 0;
532  }
533
534  BIGNUM *f, *result;
535  BN_CTX *ctx = NULL;
536  unsigned blinding_index = 0;
537  BN_BLINDING *blinding = NULL;
538  int ret = 0;
539
540  ctx = BN_CTX_new();
541  if (ctx == NULL) {
542    goto err;
543  }
544  BN_CTX_start(ctx);
545  f = BN_CTX_get(ctx);
546  result = BN_CTX_get(ctx);
547
548  if (f == NULL || result == NULL) {
549    OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
550    goto err;
551  }
552
553  if (BN_bin2bn(in, len, f) == NULL) {
554    goto err;
555  }
556
557  if (BN_ucmp(f, rsa->n) >= 0) {
558    // Usually the padding functions would catch this.
559    OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE);
560    goto err;
561  }
562
563  if (!BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx)) {
564    OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
565    goto err;
566  }
567
568  const int do_blinding = (rsa->flags & RSA_FLAG_NO_BLINDING) == 0;
569
570  if (rsa->e == NULL && do_blinding) {
571    // We cannot do blinding or verification without |e|, and continuing without
572    // those countermeasures is dangerous. However, the Java/Android RSA API
573    // requires support for keys where only |d| and |n| (and not |e|) are known.
574    // The callers that require that bad behavior set |RSA_FLAG_NO_BLINDING|.
575    OPENSSL_PUT_ERROR(RSA, RSA_R_NO_PUBLIC_EXPONENT);
576    goto err;
577  }
578
579  if (do_blinding) {
580    blinding = rsa_blinding_get(rsa, &blinding_index, ctx);
581    if (blinding == NULL) {
582      OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
583      goto err;
584    }
585    if (!BN_BLINDING_convert(f, blinding, rsa->e, rsa->mont_n, ctx)) {
586      goto err;
587    }
588  }
589
590  if (rsa->p != NULL && rsa->q != NULL && rsa->e != NULL && rsa->dmp1 != NULL &&
591      rsa->dmq1 != NULL && rsa->iqmp != NULL) {
592    if (!mod_exp(result, f, rsa, ctx)) {
593      goto err;
594    }
595  } else if (!BN_mod_exp_mont_consttime(result, f, rsa->d, rsa->n, ctx,
596                                        rsa->mont_n)) {
597    goto err;
598  }
599
600  // Verify the result to protect against fault attacks as described in the
601  // 1997 paper "On the Importance of Checking Cryptographic Protocols for
602  // Faults" by Dan Boneh, Richard A. DeMillo, and Richard J. Lipton. Some
603  // implementations do this only when the CRT is used, but we do it in all
604  // cases. Section 6 of the aforementioned paper describes an attack that
605  // works when the CRT isn't used. That attack is much less likely to succeed
606  // than the CRT attack, but there have likely been improvements since 1997.
607  //
608  // This check is cheap assuming |e| is small; it almost always is.
609  if (rsa->e != NULL) {
610    BIGNUM *vrfy = BN_CTX_get(ctx);
611    if (vrfy == NULL ||
612        !BN_mod_exp_mont(vrfy, result, rsa->e, rsa->n, ctx, rsa->mont_n) ||
613        !BN_equal_consttime(vrfy, f)) {
614      OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
615      goto err;
616    }
617
618  }
619
620  if (do_blinding &&
621      !BN_BLINDING_invert(result, blinding, rsa->mont_n, ctx)) {
622    goto err;
623  }
624
625  if (!BN_bn2bin_padded(out, len, result)) {
626    OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
627    goto err;
628  }
629
630  ret = 1;
631
632err:
633  if (ctx != NULL) {
634    BN_CTX_end(ctx);
635    BN_CTX_free(ctx);
636  }
637  if (blinding != NULL) {
638    rsa_blinding_release(rsa, blinding, blinding_index);
639  }
640
641  return ret;
642}
643
644// mod_montgomery sets |r| to |I| mod |p|. |I| must already be fully reduced
645// modulo |p| times |q|. It returns one on success and zero on error.
646static int mod_montgomery(BIGNUM *r, const BIGNUM *I, const BIGNUM *p,
647                          const BN_MONT_CTX *mont_p, const BIGNUM *q,
648                          BN_CTX *ctx) {
649  // Reducing in constant-time with Montgomery reduction requires I <= p * R. We
650  // have I < p * q, so this follows if q < R. In particular, this always holds
651  // if p and q are the same size, which is true for any RSA keys we or anyone
652  // sane generates. For other keys, we fall back to |BN_mod|.
653  if (!bn_less_than_montgomery_R(q, mont_p)) {
654    return BN_mod(r, I, p, ctx);
655  }
656
657  if (// Reduce mod p with Montgomery reduction. This computes I * R^-1 mod p.
658      !BN_from_montgomery(r, I, mont_p, ctx) ||
659      // Multiply by R^2 and do another Montgomery reduction to compute
660      // I * R^-1 * R^2 * R^-1 = I mod p.
661      !BN_to_montgomery(r, r, mont_p, ctx)) {
662    return 0;
663  }
664
665  // By precomputing R^3 mod p (normally |BN_MONT_CTX| only uses R^2 mod p) and
666  // adjusting the API for |BN_mod_exp_mont_consttime|, we could instead compute
667  // I * R mod p here and save a reduction per prime. But this would require
668  // changing the RSAZ code and may not be worth it.
669  return 1;
670}
671
672static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) {
673  assert(ctx != NULL);
674
675  assert(rsa->n != NULL);
676  assert(rsa->e != NULL);
677  assert(rsa->d != NULL);
678  assert(rsa->p != NULL);
679  assert(rsa->q != NULL);
680  assert(rsa->dmp1 != NULL);
681  assert(rsa->dmq1 != NULL);
682  assert(rsa->iqmp != NULL);
683
684  BIGNUM *r1, *m1, *vrfy;
685  int ret = 0;
686
687  BN_CTX_start(ctx);
688  r1 = BN_CTX_get(ctx);
689  m1 = BN_CTX_get(ctx);
690  vrfy = BN_CTX_get(ctx);
691  if (r1 == NULL ||
692      m1 == NULL ||
693      vrfy == NULL) {
694    goto err;
695  }
696
697  if (!BN_MONT_CTX_set_locked(&rsa->mont_p, &rsa->lock, rsa->p, ctx) ||
698      !BN_MONT_CTX_set_locked(&rsa->mont_q, &rsa->lock, rsa->q, ctx)) {
699    goto err;
700  }
701
702  if (!BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx)) {
703    goto err;
704  }
705
706  // This is a pre-condition for |mod_montgomery|. It was already checked by the
707  // caller.
708  assert(BN_ucmp(I, rsa->n) < 0);
709
710  // compute I mod q
711  if (!mod_montgomery(r1, I, rsa->q, rsa->mont_q, rsa->p, ctx)) {
712    goto err;
713  }
714
715  // compute r1^dmq1 mod q
716  if (!BN_mod_exp_mont_consttime(m1, r1, rsa->dmq1, rsa->q, ctx, rsa->mont_q)) {
717    goto err;
718  }
719
720  // compute I mod p
721  if (!mod_montgomery(r1, I, rsa->p, rsa->mont_p, rsa->q, ctx)) {
722    goto err;
723  }
724
725  // compute r1^dmp1 mod p
726  if (!BN_mod_exp_mont_consttime(r0, r1, rsa->dmp1, rsa->p, ctx, rsa->mont_p)) {
727    goto err;
728  }
729
730  // TODO(davidben): The code below is not constant-time, even ignoring
731  // |bn_correct_top|. To fix this:
732  //
733  // 1. Canonicalize keys on p > q. (p > q for keys we generate, but not ones we
734  //    import.) We have exposed structs, but we can generalize the
735  //    |BN_MONT_CTX_set_locked| trick to do a one-time canonicalization of the
736  //    private key where we optionally swap p and q (re-computing iqmp if
737  //    necessary) and fill in mont_*. This removes the p < q case below.
738  //
739  // 2. Compute r0 - m1 (mod p) in constant-time. With (1) done, this is just a
740  //    constant-time modular subtraction. It should be doable with
741  //    |bn_sub_words| and a select on the borrow bit.
742  //
743  // 3. When computing mont_*, additionally compute iqmp_mont, iqmp in
744  //    Montgomery form. The |BN_mul| and |BN_mod| pair can then be replaced
745  //    with |BN_mod_mul_montgomery|.
746
747  if (!BN_sub(r0, r0, m1)) {
748    goto err;
749  }
750  // This will help stop the size of r0 increasing, which does
751  // affect the multiply if it optimised for a power of 2 size
752  if (BN_is_negative(r0)) {
753    if (!BN_add(r0, r0, rsa->p)) {
754      goto err;
755    }
756  }
757
758  if (!BN_mul(r1, r0, rsa->iqmp, ctx)) {
759    goto err;
760  }
761
762  if (!BN_mod(r0, r1, rsa->p, ctx)) {
763    goto err;
764  }
765
766  // If p < q it is occasionally possible for the correction of
767  // adding 'p' if r0 is negative above to leave the result still
768  // negative. This can break the private key operations: the following
769  // second correction should *always* correct this rare occurrence.
770  // This will *never* happen with OpenSSL generated keys because
771  // they ensure p > q [steve]
772  if (BN_is_negative(r0)) {
773    if (!BN_add(r0, r0, rsa->p)) {
774      goto err;
775    }
776  }
777  if (!BN_mul(r1, r0, rsa->q, ctx)) {
778    goto err;
779  }
780  if (!BN_add(r0, r1, m1)) {
781    goto err;
782  }
783
784  ret = 1;
785
786err:
787  BN_CTX_end(ctx);
788  return ret;
789}
790
791static int ensure_bignum(BIGNUM **out) {
792  if (*out == NULL) {
793    *out = BN_new();
794  }
795  return *out != NULL;
796}
797
798// kBoringSSLRSASqrtTwo is the BIGNUM representation of ⌊2¹⁵³⁵×√2⌋. This is
799// chosen to give enough precision for 3072-bit RSA, the largest key size FIPS
800// specifies. Key sizes beyond this will round up.
801//
802// To verify this number, check that n² < 2³⁰⁷¹ < (n+1)², where n is value
803// represented here. Note the components are listed in little-endian order. Here
804// is some sample Python code to check:
805//
806//   >>> TOBN = lambda a, b: a << 32 | b
807//   >>> l = [ <paste the contents of kSqrtTwo> ]
808//   >>> n = sum(a * 2**(64*i) for i, a in enumerate(l))
809//   >>> n**2 < 2**3071 < (n+1)**2
810//   True
811const BN_ULONG kBoringSSLRSASqrtTwo[] = {
812    TOBN(0xdea06241, 0xf7aa81c2), TOBN(0xf6a1be3f, 0xca221307),
813    TOBN(0x332a5e9f, 0x7bda1ebf), TOBN(0x0104dc01, 0xfe32352f),
814    TOBN(0xb8cf341b, 0x6f8236c7), TOBN(0x4264dabc, 0xd528b651),
815    TOBN(0xf4d3a02c, 0xebc93e0c), TOBN(0x81394ab6, 0xd8fd0efd),
816    TOBN(0xeaa4a089, 0x9040ca4a), TOBN(0xf52f120f, 0x836e582e),
817    TOBN(0xcb2a6343, 0x31f3c84d), TOBN(0xc6d5a8a3, 0x8bb7e9dc),
818    TOBN(0x460abc72, 0x2f7c4e33), TOBN(0xcab1bc91, 0x1688458a),
819    TOBN(0x53059c60, 0x11bc337b), TOBN(0xd2202e87, 0x42af1f4e),
820    TOBN(0x78048736, 0x3dfa2768), TOBN(0x0f74a85e, 0x439c7b4a),
821    TOBN(0xa8b1fe6f, 0xdc83db39), TOBN(0x4afc8304, 0x3ab8a2c3),
822    TOBN(0xed17ac85, 0x83339915), TOBN(0x1d6f60ba, 0x893ba84c),
823    TOBN(0x597d89b3, 0x754abe9f), TOBN(0xb504f333, 0xf9de6484),
824};
825const size_t kBoringSSLRSASqrtTwoLen = OPENSSL_ARRAY_SIZE(kBoringSSLRSASqrtTwo);
826
827int rsa_greater_than_pow2(const BIGNUM *b, int n) {
828  if (BN_is_negative(b) || n == INT_MAX) {
829    return 0;
830  }
831
832  int b_bits = BN_num_bits(b);
833  return b_bits > n + 1 || (b_bits == n + 1 && !BN_is_pow2(b));
834}
835
836// generate_prime sets |out| to a prime with length |bits| such that |out|-1 is
837// relatively prime to |e|. If |p| is non-NULL, |out| will also not be close to
838// |p|.
839static int generate_prime(BIGNUM *out, int bits, const BIGNUM *e,
840                          const BIGNUM *p, const BIGNUM *sqrt2, BN_CTX *ctx,
841                          BN_GENCB *cb) {
842  if (bits < 128 || (bits % BN_BITS2) != 0) {
843    OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
844    return 0;
845  }
846
847  // See FIPS 186-4 appendix B.3.3, steps 4 and 5. Note |bits| here is nlen/2.
848
849  // Use the limit from steps 4.7 and 5.8 for most values of |e|. When |e| is 3,
850  // the 186-4 limit is too low, so we use a higher one. Note this case is not
851  // reachable from |RSA_generate_key_fips|.
852  if (bits >= INT_MAX/32) {
853    OPENSSL_PUT_ERROR(RSA, RSA_R_MODULUS_TOO_LARGE);
854    return 0;
855  }
856  int limit = BN_is_word(e, 3) ? bits * 32 : bits * 5;
857
858  int ret = 0, tries = 0, rand_tries = 0;
859  BN_CTX_start(ctx);
860  BIGNUM *tmp = BN_CTX_get(ctx);
861  if (tmp == NULL) {
862    goto err;
863  }
864
865  for (;;) {
866    // Generate a random number of length |bits| where the bottom bit is set
867    // (steps 4.2, 4.3, 5.2 and 5.3) and the top bit is set (implied by the
868    // bound checked below in steps 4.4 and 5.5).
869    if (!BN_rand(out, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD) ||
870        !BN_GENCB_call(cb, BN_GENCB_GENERATED, rand_tries++)) {
871      goto err;
872    }
873
874    if (p != NULL) {
875      // If |p| and |out| are too close, try again (step 5.4).
876      if (!BN_sub(tmp, out, p)) {
877        goto err;
878      }
879      BN_set_negative(tmp, 0);
880      if (!rsa_greater_than_pow2(tmp, bits - 100)) {
881        continue;
882      }
883    }
884
885    // If out < 2^(bits-1)×√2, try again (steps 4.4 and 5.5). This is equivalent
886    // to out <= ⌊2^(bits-1)×√2⌋, or out <= sqrt2 for FIPS key sizes.
887    //
888    // For larger keys, the comparison is approximate, leaning towards
889    // retrying. That is, we reject a negligible fraction of primes that are
890    // within the FIPS bound, but we will never accept a prime outside the
891    // bound, ensuring the resulting RSA key is the right size.
892    if (!BN_less_than_consttime(sqrt2, out)) {
893      continue;
894    }
895
896    // Check gcd(out-1, e) is one (steps 4.5 and 5.6).
897    if (!BN_sub(tmp, out, BN_value_one()) ||
898        !BN_gcd(tmp, tmp, e, ctx)) {
899      goto err;
900    }
901    if (BN_is_one(tmp)) {
902      // Test |out| for primality (steps 4.5.1 and 5.6.1).
903      int is_probable_prime;
904      if (!BN_primality_test(&is_probable_prime, out, BN_prime_checks, ctx, 1,
905                             cb)) {
906        goto err;
907      }
908      if (is_probable_prime) {
909        ret = 1;
910        goto err;
911      }
912    }
913
914    // If we've tried too many times to find a prime, abort (steps 4.7 and
915    // 5.8).
916    tries++;
917    if (tries >= limit) {
918      OPENSSL_PUT_ERROR(RSA, RSA_R_TOO_MANY_ITERATIONS);
919      goto err;
920    }
921    if (!BN_GENCB_call(cb, 2, tries)) {
922      goto err;
923    }
924  }
925
926err:
927  BN_CTX_end(ctx);
928  return ret;
929}
930
931int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) {
932  // See FIPS 186-4 appendix B.3. This function implements a generalized version
933  // of the FIPS algorithm. |RSA_generate_key_fips| performs additional checks
934  // for FIPS-compliant key generation.
935
936  // Always generate RSA keys which are a multiple of 128 bits. Round |bits|
937  // down as needed.
938  bits &= ~127;
939
940  // Reject excessively small keys.
941  if (bits < 256) {
942    OPENSSL_PUT_ERROR(RSA, RSA_R_KEY_SIZE_TOO_SMALL);
943    return 0;
944  }
945
946  int ret = 0;
947  BN_CTX *ctx = BN_CTX_new();
948  if (ctx == NULL) {
949    goto bn_err;
950  }
951  BN_CTX_start(ctx);
952  BIGNUM *totient = BN_CTX_get(ctx);
953  BIGNUM *pm1 = BN_CTX_get(ctx);
954  BIGNUM *qm1 = BN_CTX_get(ctx);
955  BIGNUM *gcd = BN_CTX_get(ctx);
956  BIGNUM *sqrt2 = BN_CTX_get(ctx);
957  if (totient == NULL || pm1 == NULL || qm1 == NULL || gcd == NULL ||
958      sqrt2 == NULL) {
959    goto bn_err;
960  }
961
962  // We need the RSA components non-NULL.
963  if (!ensure_bignum(&rsa->n) ||
964      !ensure_bignum(&rsa->d) ||
965      !ensure_bignum(&rsa->e) ||
966      !ensure_bignum(&rsa->p) ||
967      !ensure_bignum(&rsa->q) ||
968      !ensure_bignum(&rsa->dmp1) ||
969      !ensure_bignum(&rsa->dmq1) ||
970      !ensure_bignum(&rsa->iqmp)) {
971    goto bn_err;
972  }
973
974  if (!BN_copy(rsa->e, e_value)) {
975    goto bn_err;
976  }
977
978  int prime_bits = bits / 2;
979
980  // Compute sqrt2 >= ⌊2^(prime_bits-1)×√2⌋.
981  if (!bn_set_words(sqrt2, kBoringSSLRSASqrtTwo, kBoringSSLRSASqrtTwoLen)) {
982    goto bn_err;
983  }
984  int sqrt2_bits = kBoringSSLRSASqrtTwoLen * BN_BITS2;
985  assert(sqrt2_bits == (int)BN_num_bits(sqrt2));
986  if (sqrt2_bits > prime_bits) {
987    // For key sizes up to 3072 (prime_bits = 1536), this is exactly
988    // ⌊2^(prime_bits-1)×√2⌋.
989    if (!BN_rshift(sqrt2, sqrt2, sqrt2_bits - prime_bits)) {
990      goto bn_err;
991    }
992  } else if (prime_bits > sqrt2_bits) {
993    // For key sizes beyond 3072, this is approximate. We err towards retrying
994    // to ensure our key is the right size and round up.
995    if (!BN_add_word(sqrt2, 1) ||
996        !BN_lshift(sqrt2, sqrt2, prime_bits - sqrt2_bits)) {
997      goto bn_err;
998    }
999  }
1000  assert(prime_bits == (int)BN_num_bits(sqrt2));
1001
1002  do {
1003    // Generate p and q, each of size |prime_bits|, using the steps outlined in
1004    // appendix FIPS 186-4 appendix B.3.3.
1005    if (!generate_prime(rsa->p, prime_bits, rsa->e, NULL, sqrt2, ctx, cb) ||
1006        !BN_GENCB_call(cb, 3, 0) ||
1007        !generate_prime(rsa->q, prime_bits, rsa->e, rsa->p, sqrt2, ctx, cb) ||
1008        !BN_GENCB_call(cb, 3, 1)) {
1009      goto bn_err;
1010    }
1011
1012    if (BN_cmp(rsa->p, rsa->q) < 0) {
1013      BIGNUM *tmp = rsa->p;
1014      rsa->p = rsa->q;
1015      rsa->q = tmp;
1016    }
1017
1018    // Calculate d = e^(-1) (mod lcm(p-1, q-1)), per FIPS 186-4. This differs
1019    // from typical RSA implementations which use (p-1)*(q-1).
1020    //
1021    // Note this means the size of d might reveal information about p-1 and
1022    // q-1. However, we do operations with Chinese Remainder Theorem, so we only
1023    // use d (mod p-1) and d (mod q-1) as exponents. Using a minimal totient
1024    // does not affect those two values.
1025    if (!BN_sub(pm1, rsa->p, BN_value_one()) ||
1026        !BN_sub(qm1, rsa->q, BN_value_one()) ||
1027        !BN_mul(totient, pm1, qm1, ctx) ||
1028        !BN_gcd(gcd, pm1, qm1, ctx) ||
1029        !BN_div(totient, NULL, totient, gcd, ctx) ||
1030        !BN_mod_inverse(rsa->d, rsa->e, totient, ctx)) {
1031      goto bn_err;
1032    }
1033
1034    // Check that |rsa->d| > 2^|prime_bits| and try again if it fails. See
1035    // appendix B.3.1's guidance on values for d.
1036  } while (!rsa_greater_than_pow2(rsa->d, prime_bits));
1037
1038  if (// Calculate n.
1039      !BN_mul(rsa->n, rsa->p, rsa->q, ctx) ||
1040      // Calculate d mod (p-1).
1041      !BN_mod(rsa->dmp1, rsa->d, pm1, ctx) ||
1042      // Calculate d mod (q-1)
1043      !BN_mod(rsa->dmq1, rsa->d, qm1, ctx)) {
1044    goto bn_err;
1045  }
1046
1047  // Sanity-check that |rsa->n| has the specified size. This is implied by
1048  // |generate_prime|'s bounds.
1049  if (BN_num_bits(rsa->n) != (unsigned)bits) {
1050    OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
1051    goto err;
1052  }
1053
1054  // Calculate inverse of q mod p. Note that although RSA key generation is far
1055  // from constant-time, |bn_mod_inverse_secret_prime| uses the same modular
1056  // exponentation logic as in RSA private key operations and, if the RSAZ-1024
1057  // code is enabled, will be optimized for common RSA prime sizes.
1058  if (!BN_MONT_CTX_set_locked(&rsa->mont_p, &rsa->lock, rsa->p, ctx) ||
1059      !bn_mod_inverse_secret_prime(rsa->iqmp, rsa->q, rsa->p, ctx,
1060                                   rsa->mont_p)) {
1061    goto bn_err;
1062  }
1063
1064  // The key generation process is complex and thus error-prone. It could be
1065  // disastrous to generate and then use a bad key so double-check that the key
1066  // makes sense.
1067  if (!RSA_check_key(rsa)) {
1068    OPENSSL_PUT_ERROR(RSA, RSA_R_INTERNAL_ERROR);
1069    goto err;
1070  }
1071
1072  ret = 1;
1073
1074bn_err:
1075  if (!ret) {
1076    OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
1077  }
1078err:
1079  if (ctx != NULL) {
1080    BN_CTX_end(ctx);
1081    BN_CTX_free(ctx);
1082  }
1083  return ret;
1084}
1085
1086int RSA_generate_key_fips(RSA *rsa, int bits, BN_GENCB *cb) {
1087  // FIPS 186-4 allows 2048-bit and 3072-bit RSA keys (1024-bit and 1536-bit
1088  // primes, respectively) with the prime generation method we use.
1089  if (bits != 2048 && bits != 3072) {
1090    OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_RSA_PARAMETERS);
1091    return 0;
1092  }
1093
1094  BIGNUM *e = BN_new();
1095  int ret = e != NULL &&
1096            BN_set_word(e, RSA_F4) &&
1097            RSA_generate_key_ex(rsa, bits, e, cb) &&
1098            RSA_check_fips(rsa);
1099  BN_free(e);
1100  return ret;
1101}
1102
1103DEFINE_METHOD_FUNCTION(RSA_METHOD, RSA_default_method) {
1104  // All of the methods are NULL to make it easier for the compiler/linker to
1105  // drop unused functions. The wrapper functions will select the appropriate
1106  // |rsa_default_*| implementation.
1107  OPENSSL_memset(out, 0, sizeof(RSA_METHOD));
1108  out->common.is_static = 1;
1109}
1110