Coverage Report

Created: 2026-02-14 06:34

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/boringssl/crypto/fipsmodule/bn/prime.cc.inc
Line
Count
Source
1
// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     https://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#include <openssl/bn.h>
16
17
#include <iterator>
18
19
#include <openssl/err.h>
20
#include <openssl/mem.h>
21
22
#include "../../internal.h"
23
#include "../../mem_internal.h"
24
#include "internal.h"
25
26
27
using namespace bssl;
28
29
// kPrimes contains the first 1024 primes.
30
static const uint16_t kPrimes[] = {
31
    2,    3,    5,    7,    11,   13,   17,   19,   23,   29,   31,   37,
32
    41,   43,   47,   53,   59,   61,   67,   71,   73,   79,   83,   89,
33
    97,   101,  103,  107,  109,  113,  127,  131,  137,  139,  149,  151,
34
    157,  163,  167,  173,  179,  181,  191,  193,  197,  199,  211,  223,
35
    227,  229,  233,  239,  241,  251,  257,  263,  269,  271,  277,  281,
36
    283,  293,  307,  311,  313,  317,  331,  337,  347,  349,  353,  359,
37
    367,  373,  379,  383,  389,  397,  401,  409,  419,  421,  431,  433,
38
    439,  443,  449,  457,  461,  463,  467,  479,  487,  491,  499,  503,
39
    509,  521,  523,  541,  547,  557,  563,  569,  571,  577,  587,  593,
40
    599,  601,  607,  613,  617,  619,  631,  641,  643,  647,  653,  659,
41
    661,  673,  677,  683,  691,  701,  709,  719,  727,  733,  739,  743,
42
    751,  757,  761,  769,  773,  787,  797,  809,  811,  821,  823,  827,
43
    829,  839,  853,  857,  859,  863,  877,  881,  883,  887,  907,  911,
44
    919,  929,  937,  941,  947,  953,  967,  971,  977,  983,  991,  997,
45
    1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069,
46
    1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163,
47
    1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249,
48
    1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321,
49
    1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439,
50
    1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511,
51
    1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601,
52
    1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693,
53
    1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783,
54
    1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877,
55
    1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987,
56
    1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069,
57
    2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143,
58
    2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267,
59
    2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347,
60
    2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423,
61
    2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543,
62
    2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657,
63
    2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713,
64
    2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801,
65
    2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903,
66
    2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011,
67
    3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119,
68
    3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221,
69
    3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323,
70
    3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413,
71
    3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527,
72
    3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607,
73
    3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697,
74
    3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797,
75
    3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907,
76
    3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003,
77
    4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093,
78
    4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211,
79
    4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283,
80
    4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409,
81
    4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513,
82
    4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621,
83
    4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721,
84
    4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813,
85
    4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937,
86
    4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011,
87
    5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113,
88
    5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233,
89
    5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351,
90
    5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443,
91
    5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531,
92
    5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653,
93
    5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743,
94
    5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849,
95
    5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939,
96
    5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073,
97
    6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173,
98
    6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271,
99
    6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359,
100
    6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473,
101
    6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581,
102
    6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701,
103
    6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803,
104
    6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907,
105
    6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997,
106
    7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121,
107
    7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229,
108
    7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349,
109
    7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487,
110
    7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561,
111
    7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669,
112
    7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757,
113
    7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879,
114
    7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009,
115
    8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111,
116
    8117, 8123, 8147, 8161,
117
};
118
119
// BN_prime_checks_for_size returns the number of Miller-Rabin iterations
120
// necessary for generating a 'bits'-bit candidate prime.
121
//
122
//
123
// This table is generated using the algorithm of FIPS PUB 186-5
124
// Digital Signature Standard (DSS), section C.1, page 72.
125
// (https://doi.org/10.6028/NIST.FIPS.186-5).
126
// The following magma script was used to generate the output:
127
// securitybits:=125;
128
// k:=1024;
129
// for t:=1 to 65 do
130
//   for M:=3 to Floor(2*Sqrt(k-1)-1) do
131
//     S:=0;
132
//     // Sum over m
133
//     for m:=3 to M do
134
//       s:=0;
135
//       // Sum over j
136
//       for j:=2 to m do
137
//         s+:=(RealField(32)!2)^-(j+(k-1)/j);
138
//       end for;
139
//       S+:=2^(m-(m-1)*t)*s;
140
//     end for;
141
//     A:=2^(k-2-M*t);
142
//     B:=8*(Pi(RealField(32))^2-6)/3*2^(k-2)*S;
143
//     pkt:=2.00743*Log(2)*k*2^-k*(A+B);
144
//     seclevel:=Floor(-Log(2,pkt));
145
//     if seclevel ge securitybits then
146
//       printf "k: %5o, security: %o bits  (t: %o, M: %o)\n",k,seclevel,t,M;
147
//       break;
148
//     end if;
149
//   end for;
150
//   if seclevel ge securitybits then break; end if;
151
// end for;
152
//
153
// It can be run online at: http://magma.maths.usyd.edu.au/calc
154
// And will output:
155
// k:  1024, security: 129 bits  (t: 6, M: 23)
156
// k is the number of bits of the prime, securitybits is the level we want to
157
// reach.
158
// prime length | RSA key size | # MR tests | security level
159
// -------------+--------------|------------+---------------
160
//  (b) >= 6394 |     >= 12788 |          3 |        256 bit
161
//  (b) >= 3747 |     >=  7494 |          3 |        192 bit
162
//  (b) >= 1345 |     >=  2690 |          4 |        128 bit
163
//  (b) >= 1080 |     >=  2160 |          5 |        128 bit
164
//  (b) >=  852 |     >=  1704 |          5 |        112 bit
165
//  (b) >=  476 |     >=   952 |          5 |         80 bit
166
//  (b) >=  400 |     >=   800 |          6 |         80 bit
167
//  (b) >=  347 |     >=   694 |          7 |         80 bit
168
//  (b) >=  308 |     >=   616 |          8 |         80 bit
169
//  (b) >=   55 |     >=   110 |         27 |         64 bit
170
//  (b) >=    6 |     >=    12 |         34 |         64 bit
171
0
static int BN_prime_checks_for_size(int bits) {
172
0
  if (bits >= 3747) {
173
0
    return 3;
174
0
  }
175
0
  if (bits >= 1345) {
176
0
    return 4;
177
0
  }
178
0
  if (bits >= 476) {
179
0
    return 5;
180
0
  }
181
0
  if (bits >= 400) {
182
0
    return 6;
183
0
  }
184
0
  if (bits >= 347) {
185
0
    return 7;
186
0
  }
187
0
  if (bits >= 308) {
188
0
    return 8;
189
0
  }
190
0
  if (bits >= 55) {
191
0
    return 27;
192
0
  }
193
0
  return 34;
194
0
}
195
196
// num_trial_division_primes returns the number of primes to try with trial
197
// division before using more expensive checks. For larger numbers, the value
198
// of excluding a candidate with trial division is larger.
199
0
static size_t num_trial_division_primes(const BIGNUM *n) {
200
0
  if (n->width * BN_BITS2 > 1024) {
201
0
    return std::size(kPrimes);
202
0
  }
203
0
  return std::size(kPrimes) / 2;
204
0
}
205
206
// BN_PRIME_CHECKS_BLINDED is the iteration count for blinding the constant-time
207
// primality test. See |BN_primality_test| for details. This number is selected
208
// so that, for a candidate N-bit RSA prime, picking |BN_PRIME_CHECKS_BLINDED|
209
// random N-bit numbers will have at least |BN_prime_checks_for_size(N)| values
210
// in range with high probability.
211
//
212
// The following Python script computes the blinding factor needed for the
213
// corresponding iteration count.
214
/*
215
import math
216
217
# We choose candidate RSA primes between sqrt(2)/2 * 2^N and 2^N and select
218
# witnesses by generating random N-bit numbers. Thus the probability of
219
# selecting one in range is at least sqrt(2)/2.
220
p = math.sqrt(2) / 2
221
222
# Target around 2^-8 probability of the blinding being insufficient given that
223
# key generation is a one-time, noisy operation.
224
epsilon = 2**-8
225
226
def choose(a, b):
227
  r = 1
228
  for i in xrange(b):
229
    r *= a - i
230
    r /= (i + 1)
231
  return r
232
233
def failure_rate(min_uniform, iterations):
234
  """ Returns the probability that, for |iterations| candidate witnesses, fewer
235
      than |min_uniform| of them will be uniform. """
236
  prob = 0.0
237
  for i in xrange(min_uniform):
238
    prob += (choose(iterations, i) *
239
             p**i * (1-p)**(iterations - i))
240
  return prob
241
242
for min_uniform in (3, 4, 5, 6, 8, 13, 19, 28):
243
  # Find the smallest number of iterations under the target failure rate.
244
  iterations = min_uniform
245
  while True:
246
    prob = failure_rate(min_uniform, iterations)
247
    if prob < epsilon:
248
      print min_uniform, iterations, prob
249
      break
250
    iterations += 1
251
252
Output:
253
  3 9 0.00368894873911
254
  4 11 0.00363319494662
255
  5 13 0.00336215573898
256
  6 15 0.00300145783158
257
  8 19 0.00225214119331
258
  13 27 0.00385610026955
259
  19 38 0.0021410539126
260
  28 52 0.00325405801769
261
262
16 iterations suffices for 400-bit primes and larger (6 uniform samples needed),
263
which is already well below the minimum acceptable key size for RSA.
264
*/
265
0
#define BN_PRIME_CHECKS_BLINDED 16
266
267
static int probable_prime(BIGNUM *rnd, int bits);
268
static int probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add,
269
                             const BIGNUM *rem, BN_CTX *ctx);
270
static int probable_prime_dh_safe(BIGNUM *rnd, int bits, const BIGNUM *add,
271
                                  const BIGNUM *rem, BN_CTX *ctx);
272
273
0
BN_GENCB *BN_GENCB_new() { return NewZeroed<BN_GENCB>(); }
274
275
0
void BN_GENCB_free(BN_GENCB *callback) { Delete(callback); }
276
277
void BN_GENCB_set(BN_GENCB *callback,
278
0
                  int (*f)(int event, int n, struct bn_gencb_st *), void *arg) {
279
0
  callback->callback = f;
280
0
  callback->arg = arg;
281
0
}
282
283
0
int BN_GENCB_call(BN_GENCB *callback, int event, int n) {
284
0
  if (!callback) {
285
0
    return 1;
286
0
  }
287
288
0
  return callback->callback(event, n, callback);
289
0
}
290
291
0
void *BN_GENCB_get_arg(const BN_GENCB *callback) { return callback->arg; }
292
293
int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add,
294
0
                         const BIGNUM *rem, BN_GENCB *cb) {
295
0
  BIGNUM *t;
296
0
  int i, j, c1 = 0;
297
0
  int checks = BN_prime_checks_for_size(bits);
298
299
0
  if (bits < 2) {
300
    // There are no prime numbers this small.
301
0
    OPENSSL_PUT_ERROR(BN, BN_R_BITS_TOO_SMALL);
302
0
    return 0;
303
0
  } else if (bits == 2 && safe) {
304
    // The smallest safe prime (7) is three bits.
305
0
    OPENSSL_PUT_ERROR(BN, BN_R_BITS_TOO_SMALL);
306
0
    return 0;
307
0
  }
308
309
0
  UniquePtr<BN_CTX> ctx(BN_CTX_new());
310
0
  if (ctx == nullptr) {
311
0
    return 0;
312
0
  }
313
0
  BN_CTXScope scope(ctx.get());
314
0
  t = BN_CTX_get(ctx.get());
315
0
  if (!t) {
316
0
    return 0;
317
0
  }
318
319
0
loop:
320
  // make a random number and set the top and bottom bits
321
0
  if (add == nullptr) {
322
0
    if (!probable_prime(ret, bits)) {
323
0
      return 0;
324
0
    }
325
0
  } else {
326
0
    if (safe) {
327
0
      if (!probable_prime_dh_safe(ret, bits, add, rem, ctx.get())) {
328
0
        return 0;
329
0
      }
330
0
    } else {
331
0
      if (!probable_prime_dh(ret, bits, add, rem, ctx.get())) {
332
0
        return 0;
333
0
      }
334
0
    }
335
0
  }
336
337
0
  if (!BN_GENCB_call(cb, BN_GENCB_GENERATED, c1++)) {
338
    // aborted
339
0
    return 0;
340
0
  }
341
342
0
  if (!safe) {
343
0
    i = BN_is_prime_fasttest_ex(ret, checks, ctx.get(), 0, cb);
344
0
    if (i == -1) {
345
0
      return 0;
346
0
    } else if (i == 0) {
347
0
      goto loop;
348
0
    }
349
0
  } else {
350
    // for "safe prime" generation, check that (p-1)/2 is prime. Since a prime
351
    // is odd, We just need to divide by 2
352
0
    if (!BN_rshift1(t, ret)) {
353
0
      return 0;
354
0
    }
355
356
    // Interleave |ret| and |t|'s primality tests to avoid paying the full
357
    // iteration count on |ret| only to quickly discover |t| is composite.
358
    //
359
    // TODO(davidben): This doesn't quite work because an iteration count of 1
360
    // still runs the blinding mechanism.
361
0
    for (i = 0; i < checks; i++) {
362
0
      j = BN_is_prime_fasttest_ex(ret, 1, ctx.get(), 0, nullptr);
363
0
      if (j == -1) {
364
0
        return 0;
365
0
      } else if (j == 0) {
366
0
        goto loop;
367
0
      }
368
369
0
      j = BN_is_prime_fasttest_ex(t, 1, ctx.get(), 0, nullptr);
370
0
      if (j == -1) {
371
0
        return 0;
372
0
      } else if (j == 0) {
373
0
        goto loop;
374
0
      }
375
376
0
      if (!BN_GENCB_call(cb, BN_GENCB_PRIME_TEST, i)) {
377
0
        return 0;
378
0
      }
379
      // We have a safe prime test pass
380
0
    }
381
0
  }
382
383
  // we have a prime :-)
384
0
  return 1;
385
0
}
386
387
0
static int bn_trial_division(uint16_t *out, const BIGNUM *bn) {
388
0
  const size_t num_primes = num_trial_division_primes(bn);
389
0
  for (size_t i = 1; i < num_primes; i++) {
390
    // During RSA key generation, |bn| may be secret, but only if |bn| was
391
    // prime, so it is safe to leak failed trial divisions.
392
0
    if (constant_time_declassify_int(bn_mod_u16_consttime(bn, kPrimes[i]) ==
393
0
                                     0)) {
394
0
      *out = kPrimes[i];
395
0
      return 1;
396
0
    }
397
0
  }
398
0
  return 0;
399
0
}
400
401
0
int bssl::bn_odd_number_is_obviously_composite(const BIGNUM *bn) {
402
0
  uint16_t prime;
403
0
  return bn_trial_division(&prime, bn) && !BN_is_word(bn, prime);
404
0
}
405
406
int bssl::bn_miller_rabin_init(BN_MILLER_RABIN *miller_rabin,
407
0
                               const BN_MONT_CTX *mont, BN_CTX *ctx) {
408
  // This function corresponds to steps 1 through 3 of FIPS 186-5, B.3.1.
409
0
  const BIGNUM *w = &mont->N;
410
  // Note we do not call |BN_CTX_start| in this function. We intentionally
411
  // allocate values in the containing scope so they outlive this function.
412
0
  miller_rabin->w1 = BN_CTX_get(ctx);
413
0
  miller_rabin->m = BN_CTX_get(ctx);
414
0
  miller_rabin->one_mont = BN_CTX_get(ctx);
415
0
  miller_rabin->w1_mont = BN_CTX_get(ctx);
416
0
  if (miller_rabin->w1 == nullptr ||        //
417
0
      miller_rabin->m == nullptr ||         //
418
0
      miller_rabin->one_mont == nullptr ||  //
419
0
      miller_rabin->w1_mont == nullptr) {
420
0
    return 0;
421
0
  }
422
423
  // See FIPS 186-5, B.3.1, steps 1 through 3.
424
0
  if (!bn_usub_consttime(miller_rabin->w1, w, BN_value_one())) {
425
0
    return 0;
426
0
  }
427
0
  miller_rabin->a = BN_count_low_zero_bits(miller_rabin->w1);
428
0
  if (!bn_rshift_secret_shift(miller_rabin->m, miller_rabin->w1,
429
0
                              miller_rabin->a, ctx)) {
430
0
    return 0;
431
0
  }
432
0
  miller_rabin->w_bits = BN_num_bits(w);
433
434
  // Precompute some values in Montgomery form.
435
0
  if (!bn_one_to_montgomery(miller_rabin->one_mont, mont, ctx) ||
436
      // w - 1 is -1 mod w, so we can compute it in the Montgomery domain, -R,
437
      // with a subtraction. (|one_mont| cannot be zero.)
438
0
      !bn_usub_consttime(miller_rabin->w1_mont, w, miller_rabin->one_mont)) {
439
0
    return 0;
440
0
  }
441
442
0
  return 1;
443
0
}
444
445
int bssl::bn_miller_rabin_iteration(const BN_MILLER_RABIN *miller_rabin,
446
                                    int *out_is_possibly_prime, const BIGNUM *b,
447
0
                                    const BN_MONT_CTX *mont, BN_CTX *ctx) {
448
  // This function corresponds to steps 4.3 through 4.5 of FIPS 186-5, B.3.1.
449
0
  BN_CTXScope scope(ctx);
450
451
  // Step 4.3. We use Montgomery-encoding for better performance and to avoid
452
  // timing leaks.
453
0
  const BIGNUM *w = &mont->N;
454
0
  BIGNUM *z = BN_CTX_get(ctx);
455
0
  crypto_word_t is_possibly_prime;
456
0
  if (z == nullptr ||
457
0
      !BN_mod_exp_mont_consttime(z, b, miller_rabin->m, w, ctx, mont) ||
458
0
      !BN_to_montgomery(z, z, mont, ctx)) {
459
0
    return 0;
460
0
  }
461
462
  // is_possibly_prime is all ones if we have determined |b| is not a composite
463
  // witness for |w|. This is equivalent to going to step 4.7 in the original
464
  // algorithm. To avoid timing leaks, we run the algorithm to the end for prime
465
  // inputs.
466
0
  is_possibly_prime = 0;
467
468
  // Step 4.4. If z = 1 or z = w-1, b is not a composite witness and w is still
469
  // possibly prime.
470
0
  is_possibly_prime = BN_equal_consttime(z, miller_rabin->one_mont) |
471
0
                      BN_equal_consttime(z, miller_rabin->w1_mont);
472
0
  is_possibly_prime = 0 - is_possibly_prime;  // Make it all zeros or all ones.
473
474
  // Step 4.5.
475
  //
476
  // To avoid leaking |a|, we run the loop to |w_bits| and mask off all
477
  // iterations once |j| = |a|.
478
0
  for (int j = 1; j < miller_rabin->w_bits; j++) {
479
0
    if (constant_time_declassify_w(constant_time_eq_int(j, miller_rabin->a) &
480
0
                                   ~is_possibly_prime)) {
481
      // If the loop is done and we haven't seen z = 1 or z = w-1 yet, the
482
      // value is composite and we can break in variable time.
483
0
      break;
484
0
    }
485
486
    // Step 4.5.1.
487
0
    if (!BN_mod_mul_montgomery(z, z, z, mont, ctx)) {
488
0
      return 0;
489
0
    }
490
491
    // Step 4.5.2. If z = w-1 and the loop is not done, this is not a composite
492
    // witness.
493
0
    crypto_word_t z_is_w1_mont = BN_equal_consttime(z, miller_rabin->w1_mont);
494
0
    z_is_w1_mont = 0 - z_is_w1_mont;    // Make it all zeros or all ones.
495
0
    is_possibly_prime |= z_is_w1_mont;  // Go to step 4.7 if |z_is_w1_mont|.
496
497
    // Step 4.5.3. If z = 1 and the loop is not done, the previous value of z
498
    // was not -1. There are no non-trivial square roots of 1 modulo a prime, so
499
    // w is composite and we may exit in variable time.
500
0
    if (constant_time_declassify_w(
501
0
            BN_equal_consttime(z, miller_rabin->one_mont) &
502
0
            ~is_possibly_prime)) {
503
0
      break;
504
0
    }
505
0
  }
506
507
0
  *out_is_possibly_prime = constant_time_declassify_w(is_possibly_prime) & 1;
508
0
  return 1;
509
0
}
510
511
int BN_primality_test(int *out_is_probably_prime, const BIGNUM *w, int checks,
512
0
                      BN_CTX *ctx, int do_trial_division, BN_GENCB *cb) {
513
  // This function's secrecy and performance requirements come from RSA key
514
  // generation. We generate RSA keys by selecting two large, secret primes with
515
  // rejection sampling.
516
  //
517
  // We thus treat |w| as secret if turns out to be a large prime. However, if
518
  // |w| is composite, we treat this and |w| itself as public. (Conversely, if
519
  // |w| is prime, that it is prime is public. Only the value is secret.) This
520
  // is fine for RSA key generation, but note it is important that we use
521
  // rejection sampling, with each candidate prime chosen independently. This
522
  // would not work for, e.g., an algorithm which looked for primes in
523
  // consecutive integers. These assumptions allow us to discard composites
524
  // quickly. We additionally treat |w| as public when it is a small prime to
525
  // simplify trial decryption and some edge cases.
526
  //
527
  // One RSA key generation will call this function on exactly two primes and
528
  // many more composites. The overall cost is a combination of several factors:
529
  //
530
  // 1. Checking if |w| is divisible by a small prime is much faster than
531
  //    learning it is composite by Miller-Rabin (see below for details on that
532
  //    cost). Trial division by p saves 1/p of Miller-Rabin calls, so this is
533
  //    worthwhile until p exceeds the ratio of the two costs.
534
  //
535
  // 2. For a random (i.e. non-adversarial) candidate large prime and candidate
536
  //    witness, the probability of false witness is very low. (This is why FIPS
537
  //    186-5 only requires a few iterations.) Thus composites not discarded by
538
  //    trial decryption, in practice, cost one Miller-Rabin iteration. Only the
539
  //    two actual primes cost the full iteration count.
540
  //
541
  // 3. A Miller-Rabin iteration is a modular exponentiation plus |a| additional
542
  //    modular squares, where |a| is the number of factors of two in |w-1|. |a|
543
  //    is likely small (the distribution falls exponentially), but it is also
544
  //    potentially secret, so we loop up to its log(w) upper bound when |w| is
545
  //    prime. When |w| is composite, we break early, so only two calls pay this
546
  //    cost. (Note that all calls pay the modular exponentiation which is,
547
  //    itself, log(w) modular multiplications and squares.)
548
  //
549
  // 4. While there are only two prime calls, they multiplicatively pay the full
550
  //    costs of (2) and (3).
551
  //
552
  // 5. After the primes are chosen, RSA keys derive some values from the
553
  //    primes, but this cost is negligible in comparison.
554
555
0
  *out_is_probably_prime = 0;
556
557
0
  if (BN_cmp(w, BN_value_one()) <= 0) {
558
0
    return 1;
559
0
  }
560
561
0
  if (!BN_is_odd(w)) {
562
    // The only even prime is two.
563
0
    *out_is_probably_prime = BN_is_word(w, 2);
564
0
    return 1;
565
0
  }
566
567
  // Miller-Rabin does not work for three.
568
0
  if (BN_is_word(w, 3)) {
569
0
    *out_is_probably_prime = 1;
570
0
    return 1;
571
0
  }
572
573
0
  if (do_trial_division) {
574
    // Perform additional trial division checks to discard small primes.
575
0
    uint16_t prime;
576
0
    if (bn_trial_division(&prime, w)) {
577
0
      *out_is_probably_prime = BN_is_word(w, prime);
578
0
      return 1;
579
0
    }
580
0
    if (!BN_GENCB_call(cb, BN_GENCB_PRIME_TEST, -1)) {
581
0
      return 0;
582
0
    }
583
0
  }
584
585
0
  if (checks == BN_prime_checks_for_generation) {
586
0
    checks = BN_prime_checks_for_size(BN_num_bits(w));
587
0
  }
588
589
0
  UniquePtr<BN_CTX> new_ctx;
590
0
  if (ctx == nullptr) {
591
0
    new_ctx.reset(BN_CTX_new());
592
0
    if (new_ctx == nullptr) {
593
0
      return 0;
594
0
    }
595
0
    ctx = new_ctx.get();
596
0
  }
597
598
  // See B.3.1 from FIPS 186-5.
599
0
  BN_CTXScope scope(ctx);
600
0
  BIGNUM *b = BN_CTX_get(ctx);
601
0
  UniquePtr<BN_MONT_CTX> mont(BN_MONT_CTX_new_consttime(w, ctx));
602
0
  BN_MILLER_RABIN miller_rabin;
603
0
  crypto_word_t uniform_iterations = 0;
604
0
  if (b == nullptr || mont == nullptr ||
605
      // Steps 1-3.
606
0
      !bn_miller_rabin_init(&miller_rabin, mont.get(), ctx)) {
607
0
    return 0;
608
0
  }
609
610
  // The following loop performs in inner iteration of the Miller-Rabin
611
  // Primality test (Step 4).
612
  //
613
  // The algorithm as specified in FIPS 186-5 leaks information on |w|, the RSA
614
  // private key. Instead, we run through each iteration unconditionally,
615
  // performing modular multiplications, masking off any effects to behave
616
  // equivalently to the specified algorithm.
617
  //
618
  // We also blind the number of values of |b| we try. Steps 4.1–4.2 say to
619
  // discard out-of-range values. To avoid leaking information on |w|, we use
620
  // |bn_rand_secret_range| which, rather than discarding bad values, adjusts
621
  // them to be in range. Though not uniformly selected, these adjusted values
622
  // are still usable as Miller-Rabin checks.
623
  //
624
  // Miller-Rabin is already probabilistic, so we could reach the desired
625
  // confidence levels by just suitably increasing the iteration count. However,
626
  // to align with FIPS 186-5, we use a more pessimal analysis: we do not count
627
  // the non-uniform values towards the iteration count. As a result, this
628
  // function is more complex and has more timing risk than necessary.
629
  //
630
  // We count both total iterations and uniform ones and iterate until we've
631
  // reached at least |BN_PRIME_CHECKS_BLINDED| and |iterations|, respectively.
632
  // If the latter is large enough, it will be the limiting factor with high
633
  // probability and we won't leak information.
634
  //
635
  // Note this blinding does not impact most calls when picking primes because
636
  // composites are rejected early. Only the two secret primes see extra work.
637
638
  // Using |constant_time_lt_w| seems to prevent the compiler from optimizing
639
  // this into two jumps.
640
0
  for (int i = 1; constant_time_declassify_w(
641
0
           (i <= BN_PRIME_CHECKS_BLINDED) |
642
0
           constant_time_lt_w(uniform_iterations, checks));
643
0
       i++) {
644
    // Step 4.1-4.2
645
0
    int is_uniform;
646
0
    if (!bn_rand_secret_range(b, &is_uniform, 2, miller_rabin.w1)) {
647
0
      return 0;
648
0
    }
649
0
    uniform_iterations += is_uniform;
650
651
    // Steps 4.3-4.5
652
0
    int is_possibly_prime = 0;
653
0
    if (!bn_miller_rabin_iteration(&miller_rabin, &is_possibly_prime, b,
654
0
                                   mont.get(), ctx)) {
655
0
      return 0;
656
0
    }
657
658
0
    if (!is_possibly_prime) {
659
      // Step 4.6. We did not see z = w-1 before z = 1, so w must be composite.
660
0
      *out_is_probably_prime = 0;
661
0
      return 1;
662
0
    }
663
664
    // Step 4.7
665
0
    if (!BN_GENCB_call(cb, BN_GENCB_PRIME_TEST, i - 1)) {
666
0
      return 0;
667
0
    }
668
0
  }
669
670
0
  declassify_assert(uniform_iterations >= (crypto_word_t)checks);
671
0
  *out_is_probably_prime = 1;
672
0
  return 1;
673
0
}
674
675
int BN_is_prime_ex(const BIGNUM *candidate, int checks, BN_CTX *ctx,
676
0
                   BN_GENCB *cb) {
677
0
  return BN_is_prime_fasttest_ex(candidate, checks, ctx, 0, cb);
678
0
}
679
680
int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx,
681
0
                            int do_trial_division, BN_GENCB *cb) {
682
0
  int is_probably_prime;
683
0
  if (!BN_primality_test(&is_probably_prime, a, checks, ctx, do_trial_division,
684
0
                         cb)) {
685
0
    return -1;
686
0
  }
687
0
  return is_probably_prime;
688
0
}
689
690
int BN_enhanced_miller_rabin_primality_test(
691
    enum bn_primality_result_t *out_result, const BIGNUM *w, int checks,
692
0
    BN_CTX *ctx, BN_GENCB *cb) {
693
  // Enhanced Miller-Rabin is only valid on odd integers greater than 3.
694
0
  if (!BN_is_odd(w) || BN_cmp_word(w, 3) <= 0) {
695
0
    OPENSSL_PUT_ERROR(BN, BN_R_INVALID_INPUT);
696
0
    return 0;
697
0
  }
698
699
0
  if (checks == BN_prime_checks_for_generation) {
700
0
    checks = BN_prime_checks_for_size(BN_num_bits(w));
701
0
  }
702
703
0
  BN_CTXScope scope(ctx);
704
0
  BIGNUM *w1 = BN_CTX_get(ctx);
705
0
  if (w1 == nullptr || !BN_copy(w1, w) || !BN_sub_word(w1, 1)) {
706
0
    return 0;
707
0
  }
708
709
  // Write w1 as m*2^a (Steps 1 and 2).
710
0
  int a = 0;
711
0
  while (!BN_is_bit_set(w1, a)) {
712
0
    a++;
713
0
  }
714
0
  BIGNUM *m = BN_CTX_get(ctx);
715
0
  if (m == nullptr || !BN_rshift(m, w1, a)) {
716
0
    return 0;
717
0
  }
718
719
0
  BIGNUM *b = BN_CTX_get(ctx);
720
0
  BIGNUM *g = BN_CTX_get(ctx);
721
0
  BIGNUM *z = BN_CTX_get(ctx);
722
0
  BIGNUM *x = BN_CTX_get(ctx);
723
0
  BIGNUM *x1 = BN_CTX_get(ctx);
724
0
  if (b == nullptr || g == nullptr || z == nullptr || x == nullptr ||
725
0
      x1 == nullptr) {
726
0
    return 0;
727
0
  }
728
729
  // Montgomery setup for computations mod w
730
0
  UniquePtr<BN_MONT_CTX> mont(BN_MONT_CTX_new_for_modulus(w, ctx));
731
0
  if (mont == nullptr) {
732
0
    return 0;
733
0
  }
734
735
  // The following loop performs in inner iteration of the Enhanced Miller-Rabin
736
  // Primality test (Step 4).
737
0
  for (int i = 1; i <= checks; i++) {
738
    // Step 4.1-4.2
739
0
    if (!BN_rand_range_ex(b, 2, w1)) {
740
0
      return 0;
741
0
    }
742
743
    // Step 4.3-4.4
744
0
    if (!BN_gcd(g, b, w, ctx)) {
745
0
      return 0;
746
0
    }
747
0
    if (BN_cmp_word(g, 1) > 0) {
748
0
      *out_result = bn_composite;
749
0
      return 1;
750
0
    }
751
752
    // Step 4.5
753
0
    if (!BN_mod_exp_mont(z, b, m, w, ctx, mont.get())) {
754
0
      return 0;
755
0
    }
756
757
    // Step 4.6
758
0
    if (BN_is_one(z) || BN_cmp(z, w1) == 0) {
759
0
      goto loop;
760
0
    }
761
762
    // Step 4.7
763
0
    for (int j = 1; j < a; j++) {
764
0
      if (!BN_copy(x, z) || !BN_mod_mul(z, x, x, w, ctx)) {
765
0
        return 0;
766
0
      }
767
0
      if (BN_cmp(z, w1) == 0) {
768
0
        goto loop;
769
0
      }
770
0
      if (BN_is_one(z)) {
771
0
        goto composite;
772
0
      }
773
0
    }
774
775
    // Step 4.8-4.9
776
0
    if (!BN_copy(x, z) || !BN_mod_mul(z, x, x, w, ctx)) {
777
0
      return 0;
778
0
    }
779
780
    // Step 4.10-4.11
781
0
    if (!BN_is_one(z) && !BN_copy(x, z)) {
782
0
      return 0;
783
0
    }
784
785
0
  composite:
786
    // Step 4.12-4.14
787
0
    if (!BN_copy(x1, x) || !BN_sub_word(x1, 1) || !BN_gcd(g, x1, w, ctx)) {
788
0
      return 0;
789
0
    }
790
0
    if (BN_cmp_word(g, 1) > 0) {
791
0
      *out_result = bn_composite;
792
0
    } else {
793
0
      *out_result = bn_non_prime_power_composite;
794
0
    }
795
796
0
    return 1;
797
798
0
  loop:
799
    // Step 4.15
800
0
    if (!BN_GENCB_call(cb, BN_GENCB_PRIME_TEST, i - 1)) {
801
0
      return 0;
802
0
    }
803
0
  }
804
805
0
  *out_result = bn_probably_prime;
806
0
  return 1;
807
0
}
808
809
0
static int probable_prime(BIGNUM *rnd, int bits) {
810
0
  do {
811
0
    if (!BN_rand(rnd, bits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ODD)) {
812
0
      return 0;
813
0
    }
814
0
  } while (bn_odd_number_is_obviously_composite(rnd));
815
0
  return 1;
816
0
}
817
818
static int probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add,
819
0
                             const BIGNUM *rem, BN_CTX *ctx) {
820
0
  BN_CTXScope scope(ctx);
821
0
  BIGNUM *t1;
822
0
  if ((t1 = BN_CTX_get(ctx)) == nullptr) {
823
0
    return 0;
824
0
  }
825
826
0
  if (!BN_rand(rnd, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) {
827
0
    return 0;
828
0
  }
829
830
  // we need ((rnd-rem) % add) == 0
831
0
  if (!BN_mod(t1, rnd, add, ctx)) {
832
0
    return 0;
833
0
  }
834
0
  if (!BN_sub(rnd, rnd, t1)) {
835
0
    return 0;
836
0
  }
837
0
  if (rem == nullptr) {
838
0
    if (!BN_add_word(rnd, 1)) {
839
0
      return 0;
840
0
    }
841
0
  } else {
842
0
    if (!BN_add(rnd, rnd, rem)) {
843
0
      return 0;
844
0
    }
845
0
  }
846
  // we now have a random number 'rand' to test.
847
848
0
  size_t num_primes = num_trial_division_primes(rnd);
849
0
loop:
850
0
  for (size_t i = 1; i < num_primes; i++) {
851
    // check that rnd is a prime
852
0
    if (bn_mod_u16_consttime(rnd, kPrimes[i]) <= 1) {
853
0
      if (!BN_add(rnd, rnd, add)) {
854
0
        return 0;
855
0
      }
856
0
      goto loop;
857
0
    }
858
0
  }
859
860
0
  return 1;
861
0
}
862
863
static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd,
864
0
                                  const BIGNUM *rem, BN_CTX *ctx) {
865
0
  bits--;
866
0
  BN_CTXScope scope(ctx);
867
0
  BIGNUM *t1 = BN_CTX_get(ctx);
868
0
  BIGNUM *q = BN_CTX_get(ctx);
869
0
  BIGNUM *qadd = BN_CTX_get(ctx);
870
0
  if (qadd == nullptr) {
871
0
    return 0;
872
0
  }
873
874
0
  if (!BN_rshift1(qadd, padd)) {
875
0
    return 0;
876
0
  }
877
878
0
  if (!BN_rand(q, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) {
879
0
    return 0;
880
0
  }
881
882
  // we need ((rnd-rem) % add) == 0
883
0
  if (!BN_mod(t1, q, qadd, ctx)) {
884
0
    return 0;
885
0
  }
886
887
0
  if (!BN_sub(q, q, t1)) {
888
0
    return 0;
889
0
  }
890
891
0
  if (rem == nullptr) {
892
0
    if (!BN_add_word(q, 1)) {
893
0
      return 0;
894
0
    }
895
0
  } else {
896
0
    if (!BN_rshift1(t1, rem)) {
897
0
      return 0;
898
0
    }
899
0
    if (!BN_add(q, q, t1)) {
900
0
      return 0;
901
0
    }
902
0
  }
903
904
  // we now have a random number 'rand' to test.
905
0
  if (!BN_lshift1(p, q)) {
906
0
    return 0;
907
0
  }
908
0
  if (!BN_add_word(p, 1)) {
909
0
    return 0;
910
0
  }
911
912
0
  size_t num_primes = num_trial_division_primes(p);
913
0
loop:
914
0
  for (size_t i = 1; i < num_primes; i++) {
915
    // check that p and q are prime
916
    // check that for p and q
917
    // gcd(p-1,primes) == 1 (except for 2)
918
0
    if (bn_mod_u16_consttime(p, kPrimes[i]) == 0 ||
919
0
        bn_mod_u16_consttime(q, kPrimes[i]) == 0) {
920
0
      if (!BN_add(p, p, padd)) {
921
0
        return 0;
922
0
      }
923
0
      if (!BN_add(q, q, qadd)) {
924
0
        return 0;
925
0
      }
926
0
      goto loop;
927
0
    }
928
0
  }
929
930
0
  return 1;
931
0
}