Home | History | Annotate | Download | only in bn
      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 /* ====================================================================
     58  * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
     59  *
     60  * Redistribution and use in source and binary forms, with or without
     61  * modification, are permitted provided that the following conditions
     62  * are met:
     63  *
     64  * 1. Redistributions of source code must retain the above copyright
     65  *    notice, this list of conditions and the following disclaimer.
     66  *
     67  * 2. Redistributions in binary form must reproduce the above copyright
     68  *    notice, this list of conditions and the following disclaimer in
     69  *    the documentation and/or other materials provided with the
     70  *    distribution.
     71  *
     72  * 3. All advertising materials mentioning features or use of this
     73  *    software must display the following acknowledgment:
     74  *    "This product includes software developed by the OpenSSL Project
     75  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
     76  *
     77  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     78  *    endorse or promote products derived from this software without
     79  *    prior written permission. For written permission, please contact
     80  *    openssl-core (at) openssl.org.
     81  *
     82  * 5. Products derived from this software may not be called "OpenSSL"
     83  *    nor may "OpenSSL" appear in their names without prior written
     84  *    permission of the OpenSSL Project.
     85  *
     86  * 6. Redistributions of any form whatsoever must retain the following
     87  *    acknowledgment:
     88  *    "This product includes software developed by the OpenSSL Project
     89  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
     90  *
     91  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     92  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     93  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     94  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     95  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     96  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     97  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     98  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     99  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    100  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    101  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    102  * OF THE POSSIBILITY OF SUCH DAMAGE.
    103  * ====================================================================
    104  *
    105  * This product includes cryptographic software written by Eric Young
    106  * (eay (at) cryptsoft.com).  This product includes software written by Tim
    107  * Hudson (tjh (at) cryptsoft.com). */
    108 
    109 #include <openssl/bn.h>
    110 
    111 #include <openssl/err.h>
    112 #include <openssl/mem.h>
    113 
    114 #include "internal.h"
    115 
    116 // The quick sieve algorithm approach to weeding out primes is Philip
    117 // Zimmermann's, as implemented in PGP.  I have had a read of his comments and
    118 // implemented my own version.
    119 
    120 #define NUMPRIMES 2048
    121 
    122 // primes contains all the primes that fit into a uint16_t.
    123 static const uint16_t primes[NUMPRIMES] = {
    124     2,     3,     5,     7,     11,    13,    17,    19,    23,    29,    31,
    125     37,    41,    43,    47,    53,    59,    61,    67,    71,    73,    79,
    126     83,    89,    97,    101,   103,   107,   109,   113,   127,   131,   137,
    127     139,   149,   151,   157,   163,   167,   173,   179,   181,   191,   193,
    128     197,   199,   211,   223,   227,   229,   233,   239,   241,   251,   257,
    129     263,   269,   271,   277,   281,   283,   293,   307,   311,   313,   317,
    130     331,   337,   347,   349,   353,   359,   367,   373,   379,   383,   389,
    131     397,   401,   409,   419,   421,   431,   433,   439,   443,   449,   457,
    132     461,   463,   467,   479,   487,   491,   499,   503,   509,   521,   523,
    133     541,   547,   557,   563,   569,   571,   577,   587,   593,   599,   601,
    134     607,   613,   617,   619,   631,   641,   643,   647,   653,   659,   661,
    135     673,   677,   683,   691,   701,   709,   719,   727,   733,   739,   743,
    136     751,   757,   761,   769,   773,   787,   797,   809,   811,   821,   823,
    137     827,   829,   839,   853,   857,   859,   863,   877,   881,   883,   887,
    138     907,   911,   919,   929,   937,   941,   947,   953,   967,   971,   977,
    139     983,   991,   997,   1009,  1013,  1019,  1021,  1031,  1033,  1039,  1049,
    140     1051,  1061,  1063,  1069,  1087,  1091,  1093,  1097,  1103,  1109,  1117,
    141     1123,  1129,  1151,  1153,  1163,  1171,  1181,  1187,  1193,  1201,  1213,
    142     1217,  1223,  1229,  1231,  1237,  1249,  1259,  1277,  1279,  1283,  1289,
    143     1291,  1297,  1301,  1303,  1307,  1319,  1321,  1327,  1361,  1367,  1373,
    144     1381,  1399,  1409,  1423,  1427,  1429,  1433,  1439,  1447,  1451,  1453,
    145     1459,  1471,  1481,  1483,  1487,  1489,  1493,  1499,  1511,  1523,  1531,
    146     1543,  1549,  1553,  1559,  1567,  1571,  1579,  1583,  1597,  1601,  1607,
    147     1609,  1613,  1619,  1621,  1627,  1637,  1657,  1663,  1667,  1669,  1693,
    148     1697,  1699,  1709,  1721,  1723,  1733,  1741,  1747,  1753,  1759,  1777,
    149     1783,  1787,  1789,  1801,  1811,  1823,  1831,  1847,  1861,  1867,  1871,
    150     1873,  1877,  1879,  1889,  1901,  1907,  1913,  1931,  1933,  1949,  1951,
    151     1973,  1979,  1987,  1993,  1997,  1999,  2003,  2011,  2017,  2027,  2029,
    152     2039,  2053,  2063,  2069,  2081,  2083,  2087,  2089,  2099,  2111,  2113,
    153     2129,  2131,  2137,  2141,  2143,  2153,  2161,  2179,  2203,  2207,  2213,
    154     2221,  2237,  2239,  2243,  2251,  2267,  2269,  2273,  2281,  2287,  2293,
    155     2297,  2309,  2311,  2333,  2339,  2341,  2347,  2351,  2357,  2371,  2377,
    156     2381,  2383,  2389,  2393,  2399,  2411,  2417,  2423,  2437,  2441,  2447,
    157     2459,  2467,  2473,  2477,  2503,  2521,  2531,  2539,  2543,  2549,  2551,
    158     2557,  2579,  2591,  2593,  2609,  2617,  2621,  2633,  2647,  2657,  2659,
    159     2663,  2671,  2677,  2683,  2687,  2689,  2693,  2699,  2707,  2711,  2713,
    160     2719,  2729,  2731,  2741,  2749,  2753,  2767,  2777,  2789,  2791,  2797,
    161     2801,  2803,  2819,  2833,  2837,  2843,  2851,  2857,  2861,  2879,  2887,
    162     2897,  2903,  2909,  2917,  2927,  2939,  2953,  2957,  2963,  2969,  2971,
    163     2999,  3001,  3011,  3019,  3023,  3037,  3041,  3049,  3061,  3067,  3079,
    164     3083,  3089,  3109,  3119,  3121,  3137,  3163,  3167,  3169,  3181,  3187,
    165     3191,  3203,  3209,  3217,  3221,  3229,  3251,  3253,  3257,  3259,  3271,
    166     3299,  3301,  3307,  3313,  3319,  3323,  3329,  3331,  3343,  3347,  3359,
    167     3361,  3371,  3373,  3389,  3391,  3407,  3413,  3433,  3449,  3457,  3461,
    168     3463,  3467,  3469,  3491,  3499,  3511,  3517,  3527,  3529,  3533,  3539,
    169     3541,  3547,  3557,  3559,  3571,  3581,  3583,  3593,  3607,  3613,  3617,
    170     3623,  3631,  3637,  3643,  3659,  3671,  3673,  3677,  3691,  3697,  3701,
    171     3709,  3719,  3727,  3733,  3739,  3761,  3767,  3769,  3779,  3793,  3797,
    172     3803,  3821,  3823,  3833,  3847,  3851,  3853,  3863,  3877,  3881,  3889,
    173     3907,  3911,  3917,  3919,  3923,  3929,  3931,  3943,  3947,  3967,  3989,
    174     4001,  4003,  4007,  4013,  4019,  4021,  4027,  4049,  4051,  4057,  4073,
    175     4079,  4091,  4093,  4099,  4111,  4127,  4129,  4133,  4139,  4153,  4157,
    176     4159,  4177,  4201,  4211,  4217,  4219,  4229,  4231,  4241,  4243,  4253,
    177     4259,  4261,  4271,  4273,  4283,  4289,  4297,  4327,  4337,  4339,  4349,
    178     4357,  4363,  4373,  4391,  4397,  4409,  4421,  4423,  4441,  4447,  4451,
    179     4457,  4463,  4481,  4483,  4493,  4507,  4513,  4517,  4519,  4523,  4547,
    180     4549,  4561,  4567,  4583,  4591,  4597,  4603,  4621,  4637,  4639,  4643,
    181     4649,  4651,  4657,  4663,  4673,  4679,  4691,  4703,  4721,  4723,  4729,
    182     4733,  4751,  4759,  4783,  4787,  4789,  4793,  4799,  4801,  4813,  4817,
    183     4831,  4861,  4871,  4877,  4889,  4903,  4909,  4919,  4931,  4933,  4937,
    184     4943,  4951,  4957,  4967,  4969,  4973,  4987,  4993,  4999,  5003,  5009,
    185     5011,  5021,  5023,  5039,  5051,  5059,  5077,  5081,  5087,  5099,  5101,
    186     5107,  5113,  5119,  5147,  5153,  5167,  5171,  5179,  5189,  5197,  5209,
    187     5227,  5231,  5233,  5237,  5261,  5273,  5279,  5281,  5297,  5303,  5309,
    188     5323,  5333,  5347,  5351,  5381,  5387,  5393,  5399,  5407,  5413,  5417,
    189     5419,  5431,  5437,  5441,  5443,  5449,  5471,  5477,  5479,  5483,  5501,
    190     5503,  5507,  5519,  5521,  5527,  5531,  5557,  5563,  5569,  5573,  5581,
    191     5591,  5623,  5639,  5641,  5647,  5651,  5653,  5657,  5659,  5669,  5683,
    192     5689,  5693,  5701,  5711,  5717,  5737,  5741,  5743,  5749,  5779,  5783,
    193     5791,  5801,  5807,  5813,  5821,  5827,  5839,  5843,  5849,  5851,  5857,
    194     5861,  5867,  5869,  5879,  5881,  5897,  5903,  5923,  5927,  5939,  5953,
    195     5981,  5987,  6007,  6011,  6029,  6037,  6043,  6047,  6053,  6067,  6073,
    196     6079,  6089,  6091,  6101,  6113,  6121,  6131,  6133,  6143,  6151,  6163,
    197     6173,  6197,  6199,  6203,  6211,  6217,  6221,  6229,  6247,  6257,  6263,
    198     6269,  6271,  6277,  6287,  6299,  6301,  6311,  6317,  6323,  6329,  6337,
    199     6343,  6353,  6359,  6361,  6367,  6373,  6379,  6389,  6397,  6421,  6427,
    200     6449,  6451,  6469,  6473,  6481,  6491,  6521,  6529,  6547,  6551,  6553,
    201     6563,  6569,  6571,  6577,  6581,  6599,  6607,  6619,  6637,  6653,  6659,
    202     6661,  6673,  6679,  6689,  6691,  6701,  6703,  6709,  6719,  6733,  6737,
    203     6761,  6763,  6779,  6781,  6791,  6793,  6803,  6823,  6827,  6829,  6833,
    204     6841,  6857,  6863,  6869,  6871,  6883,  6899,  6907,  6911,  6917,  6947,
    205     6949,  6959,  6961,  6967,  6971,  6977,  6983,  6991,  6997,  7001,  7013,
    206     7019,  7027,  7039,  7043,  7057,  7069,  7079,  7103,  7109,  7121,  7127,
    207     7129,  7151,  7159,  7177,  7187,  7193,  7207,  7211,  7213,  7219,  7229,
    208     7237,  7243,  7247,  7253,  7283,  7297,  7307,  7309,  7321,  7331,  7333,
    209     7349,  7351,  7369,  7393,  7411,  7417,  7433,  7451,  7457,  7459,  7477,
    210     7481,  7487,  7489,  7499,  7507,  7517,  7523,  7529,  7537,  7541,  7547,
    211     7549,  7559,  7561,  7573,  7577,  7583,  7589,  7591,  7603,  7607,  7621,
    212     7639,  7643,  7649,  7669,  7673,  7681,  7687,  7691,  7699,  7703,  7717,
    213     7723,  7727,  7741,  7753,  7757,  7759,  7789,  7793,  7817,  7823,  7829,
    214     7841,  7853,  7867,  7873,  7877,  7879,  7883,  7901,  7907,  7919,  7927,
    215     7933,  7937,  7949,  7951,  7963,  7993,  8009,  8011,  8017,  8039,  8053,
    216     8059,  8069,  8081,  8087,  8089,  8093,  8101,  8111,  8117,  8123,  8147,
    217     8161,  8167,  8171,  8179,  8191,  8209,  8219,  8221,  8231,  8233,  8237,
    218     8243,  8263,  8269,  8273,  8287,  8291,  8293,  8297,  8311,  8317,  8329,
    219     8353,  8363,  8369,  8377,  8387,  8389,  8419,  8423,  8429,  8431,  8443,
    220     8447,  8461,  8467,  8501,  8513,  8521,  8527,  8537,  8539,  8543,  8563,
    221     8573,  8581,  8597,  8599,  8609,  8623,  8627,  8629,  8641,  8647,  8663,
    222     8669,  8677,  8681,  8689,  8693,  8699,  8707,  8713,  8719,  8731,  8737,
    223     8741,  8747,  8753,  8761,  8779,  8783,  8803,  8807,  8819,  8821,  8831,
    224     8837,  8839,  8849,  8861,  8863,  8867,  8887,  8893,  8923,  8929,  8933,
    225     8941,  8951,  8963,  8969,  8971,  8999,  9001,  9007,  9011,  9013,  9029,
    226     9041,  9043,  9049,  9059,  9067,  9091,  9103,  9109,  9127,  9133,  9137,
    227     9151,  9157,  9161,  9173,  9181,  9187,  9199,  9203,  9209,  9221,  9227,
    228     9239,  9241,  9257,  9277,  9281,  9283,  9293,  9311,  9319,  9323,  9337,
    229     9341,  9343,  9349,  9371,  9377,  9391,  9397,  9403,  9413,  9419,  9421,
    230     9431,  9433,  9437,  9439,  9461,  9463,  9467,  9473,  9479,  9491,  9497,
    231     9511,  9521,  9533,  9539,  9547,  9551,  9587,  9601,  9613,  9619,  9623,
    232     9629,  9631,  9643,  9649,  9661,  9677,  9679,  9689,  9697,  9719,  9721,
    233     9733,  9739,  9743,  9749,  9767,  9769,  9781,  9787,  9791,  9803,  9811,
    234     9817,  9829,  9833,  9839,  9851,  9857,  9859,  9871,  9883,  9887,  9901,
    235     9907,  9923,  9929,  9931,  9941,  9949,  9967,  9973,  10007, 10009, 10037,
    236     10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, 10103, 10111, 10133,
    237     10139, 10141, 10151, 10159, 10163, 10169, 10177, 10181, 10193, 10211, 10223,
    238     10243, 10247, 10253, 10259, 10267, 10271, 10273, 10289, 10301, 10303, 10313,
    239     10321, 10331, 10333, 10337, 10343, 10357, 10369, 10391, 10399, 10427, 10429,
    240     10433, 10453, 10457, 10459, 10463, 10477, 10487, 10499, 10501, 10513, 10529,
    241     10531, 10559, 10567, 10589, 10597, 10601, 10607, 10613, 10627, 10631, 10639,
    242     10651, 10657, 10663, 10667, 10687, 10691, 10709, 10711, 10723, 10729, 10733,
    243     10739, 10753, 10771, 10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859,
    244     10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937, 10939, 10949, 10957,
    245     10973, 10979, 10987, 10993, 11003, 11027, 11047, 11057, 11059, 11069, 11071,
    246     11083, 11087, 11093, 11113, 11117, 11119, 11131, 11149, 11159, 11161, 11171,
    247     11173, 11177, 11197, 11213, 11239, 11243, 11251, 11257, 11261, 11273, 11279,
    248     11287, 11299, 11311, 11317, 11321, 11329, 11351, 11353, 11369, 11383, 11393,
    249     11399, 11411, 11423, 11437, 11443, 11447, 11467, 11471, 11483, 11489, 11491,
    250     11497, 11503, 11519, 11527, 11549, 11551, 11579, 11587, 11593, 11597, 11617,
    251     11621, 11633, 11657, 11677, 11681, 11689, 11699, 11701, 11717, 11719, 11731,
    252     11743, 11777, 11779, 11783, 11789, 11801, 11807, 11813, 11821, 11827, 11831,
    253     11833, 11839, 11863, 11867, 11887, 11897, 11903, 11909, 11923, 11927, 11933,
    254     11939, 11941, 11953, 11959, 11969, 11971, 11981, 11987, 12007, 12011, 12037,
    255     12041, 12043, 12049, 12071, 12073, 12097, 12101, 12107, 12109, 12113, 12119,
    256     12143, 12149, 12157, 12161, 12163, 12197, 12203, 12211, 12227, 12239, 12241,
    257     12251, 12253, 12263, 12269, 12277, 12281, 12289, 12301, 12323, 12329, 12343,
    258     12347, 12373, 12377, 12379, 12391, 12401, 12409, 12413, 12421, 12433, 12437,
    259     12451, 12457, 12473, 12479, 12487, 12491, 12497, 12503, 12511, 12517, 12527,
    260     12539, 12541, 12547, 12553, 12569, 12577, 12583, 12589, 12601, 12611, 12613,
    261     12619, 12637, 12641, 12647, 12653, 12659, 12671, 12689, 12697, 12703, 12713,
    262     12721, 12739, 12743, 12757, 12763, 12781, 12791, 12799, 12809, 12821, 12823,
    263     12829, 12841, 12853, 12889, 12893, 12899, 12907, 12911, 12917, 12919, 12923,
    264     12941, 12953, 12959, 12967, 12973, 12979, 12983, 13001, 13003, 13007, 13009,
    265     13033, 13037, 13043, 13049, 13063, 13093, 13099, 13103, 13109, 13121, 13127,
    266     13147, 13151, 13159, 13163, 13171, 13177, 13183, 13187, 13217, 13219, 13229,
    267     13241, 13249, 13259, 13267, 13291, 13297, 13309, 13313, 13327, 13331, 13337,
    268     13339, 13367, 13381, 13397, 13399, 13411, 13417, 13421, 13441, 13451, 13457,
    269     13463, 13469, 13477, 13487, 13499, 13513, 13523, 13537, 13553, 13567, 13577,
    270     13591, 13597, 13613, 13619, 13627, 13633, 13649, 13669, 13679, 13681, 13687,
    271     13691, 13693, 13697, 13709, 13711, 13721, 13723, 13729, 13751, 13757, 13759,
    272     13763, 13781, 13789, 13799, 13807, 13829, 13831, 13841, 13859, 13873, 13877,
    273     13879, 13883, 13901, 13903, 13907, 13913, 13921, 13931, 13933, 13963, 13967,
    274     13997, 13999, 14009, 14011, 14029, 14033, 14051, 14057, 14071, 14081, 14083,
    275     14087, 14107, 14143, 14149, 14153, 14159, 14173, 14177, 14197, 14207, 14221,
    276     14243, 14249, 14251, 14281, 14293, 14303, 14321, 14323, 14327, 14341, 14347,
    277     14369, 14387, 14389, 14401, 14407, 14411, 14419, 14423, 14431, 14437, 14447,
    278     14449, 14461, 14479, 14489, 14503, 14519, 14533, 14537, 14543, 14549, 14551,
    279     14557, 14561, 14563, 14591, 14593, 14621, 14627, 14629, 14633, 14639, 14653,
    280     14657, 14669, 14683, 14699, 14713, 14717, 14723, 14731, 14737, 14741, 14747,
    281     14753, 14759, 14767, 14771, 14779, 14783, 14797, 14813, 14821, 14827, 14831,
    282     14843, 14851, 14867, 14869, 14879, 14887, 14891, 14897, 14923, 14929, 14939,
    283     14947, 14951, 14957, 14969, 14983, 15013, 15017, 15031, 15053, 15061, 15073,
    284     15077, 15083, 15091, 15101, 15107, 15121, 15131, 15137, 15139, 15149, 15161,
    285     15173, 15187, 15193, 15199, 15217, 15227, 15233, 15241, 15259, 15263, 15269,
    286     15271, 15277, 15287, 15289, 15299, 15307, 15313, 15319, 15329, 15331, 15349,
    287     15359, 15361, 15373, 15377, 15383, 15391, 15401, 15413, 15427, 15439, 15443,
    288     15451, 15461, 15467, 15473, 15493, 15497, 15511, 15527, 15541, 15551, 15559,
    289     15569, 15581, 15583, 15601, 15607, 15619, 15629, 15641, 15643, 15647, 15649,
    290     15661, 15667, 15671, 15679, 15683, 15727, 15731, 15733, 15737, 15739, 15749,
    291     15761, 15767, 15773, 15787, 15791, 15797, 15803, 15809, 15817, 15823, 15859,
    292     15877, 15881, 15887, 15889, 15901, 15907, 15913, 15919, 15923, 15937, 15959,
    293     15971, 15973, 15991, 16001, 16007, 16033, 16057, 16061, 16063, 16067, 16069,
    294     16073, 16087, 16091, 16097, 16103, 16111, 16127, 16139, 16141, 16183, 16187,
    295     16189, 16193, 16217, 16223, 16229, 16231, 16249, 16253, 16267, 16273, 16301,
    296     16319, 16333, 16339, 16349, 16361, 16363, 16369, 16381, 16411, 16417, 16421,
    297     16427, 16433, 16447, 16451, 16453, 16477, 16481, 16487, 16493, 16519, 16529,
    298     16547, 16553, 16561, 16567, 16573, 16603, 16607, 16619, 16631, 16633, 16649,
    299     16651, 16657, 16661, 16673, 16691, 16693, 16699, 16703, 16729, 16741, 16747,
    300     16759, 16763, 16787, 16811, 16823, 16829, 16831, 16843, 16871, 16879, 16883,
    301     16889, 16901, 16903, 16921, 16927, 16931, 16937, 16943, 16963, 16979, 16981,
    302     16987, 16993, 17011, 17021, 17027, 17029, 17033, 17041, 17047, 17053, 17077,
    303     17093, 17099, 17107, 17117, 17123, 17137, 17159, 17167, 17183, 17189, 17191,
    304     17203, 17207, 17209, 17231, 17239, 17257, 17291, 17293, 17299, 17317, 17321,
    305     17327, 17333, 17341, 17351, 17359, 17377, 17383, 17387, 17389, 17393, 17401,
    306     17417, 17419, 17431, 17443, 17449, 17467, 17471, 17477, 17483, 17489, 17491,
    307     17497, 17509, 17519, 17539, 17551, 17569, 17573, 17579, 17581, 17597, 17599,
    308     17609, 17623, 17627, 17657, 17659, 17669, 17681, 17683, 17707, 17713, 17729,
    309     17737, 17747, 17749, 17761, 17783, 17789, 17791, 17807, 17827, 17837, 17839,
    310     17851, 17863,
    311 };
    312 
    313 // BN_prime_checks_for_size returns the number of Miller-Rabin iterations
    314 // necessary for a 'bits'-bit prime, in order to maintain an error rate greater
    315 // than the security level for an RSA prime of that many bits (calculated using
    316 // the FIPS SP 800-57 security level and 186-4 Section F.1; original paper:
    317 // Damgaard, Landrock, Pomerance: Average case error estimates for the strong
    318 // probable prime test. -- Math. Comp. 61 (1993) 177-194)
    319 static int BN_prime_checks_for_size(int bits) {
    320   if (bits >= 3747) {
    321     return 3;
    322   }
    323   if (bits >= 1345) {
    324     return 4;
    325   }
    326   if (bits >= 476) {
    327     return 5;
    328   }
    329   if (bits >= 400) {
    330     return 6;
    331   }
    332   if (bits >= 308) {
    333     return 8;
    334   }
    335   if (bits >= 205) {
    336     return 13;
    337   }
    338   if (bits >= 155) {
    339     return 19;
    340   }
    341   return 28;
    342 }
    343 
    344 static int probable_prime(BIGNUM *rnd, int bits);
    345 static int probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add,
    346                              const BIGNUM *rem, BN_CTX *ctx);
    347 static int probable_prime_dh_safe(BIGNUM *rnd, int bits, const BIGNUM *add,
    348                                   const BIGNUM *rem, BN_CTX *ctx);
    349 
    350 void BN_GENCB_set(BN_GENCB *callback,
    351                   int (*f)(int event, int n, struct bn_gencb_st *),
    352                   void *arg) {
    353   callback->callback = f;
    354   callback->arg = arg;
    355 }
    356 
    357 int BN_GENCB_call(BN_GENCB *callback, int event, int n) {
    358   if (!callback) {
    359     return 1;
    360   }
    361 
    362   return callback->callback(event, n, callback);
    363 }
    364 
    365 int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add,
    366                          const BIGNUM *rem, BN_GENCB *cb) {
    367   BIGNUM *t;
    368   int found = 0;
    369   int i, j, c1 = 0;
    370   BN_CTX *ctx;
    371   int checks = BN_prime_checks_for_size(bits);
    372 
    373   if (bits < 2) {
    374     // There are no prime numbers this small.
    375     OPENSSL_PUT_ERROR(BN, BN_R_BITS_TOO_SMALL);
    376     return 0;
    377   } else if (bits == 2 && safe) {
    378     // The smallest safe prime (7) is three bits.
    379     OPENSSL_PUT_ERROR(BN, BN_R_BITS_TOO_SMALL);
    380     return 0;
    381   }
    382 
    383   ctx = BN_CTX_new();
    384   if (ctx == NULL) {
    385     goto err;
    386   }
    387   BN_CTX_start(ctx);
    388   t = BN_CTX_get(ctx);
    389   if (!t) {
    390     goto err;
    391   }
    392 
    393 loop:
    394   // make a random number and set the top and bottom bits
    395   if (add == NULL) {
    396     if (!probable_prime(ret, bits)) {
    397       goto err;
    398     }
    399   } else {
    400     if (safe) {
    401       if (!probable_prime_dh_safe(ret, bits, add, rem, ctx)) {
    402         goto err;
    403       }
    404     } else {
    405       if (!probable_prime_dh(ret, bits, add, rem, ctx)) {
    406         goto err;
    407       }
    408     }
    409   }
    410 
    411   if (!BN_GENCB_call(cb, BN_GENCB_GENERATED, c1++)) {
    412     // aborted
    413     goto err;
    414   }
    415 
    416   if (!safe) {
    417     i = BN_is_prime_fasttest_ex(ret, checks, ctx, 0, cb);
    418     if (i == -1) {
    419       goto err;
    420     } else if (i == 0) {
    421       goto loop;
    422     }
    423   } else {
    424     // for "safe prime" generation, check that (p-1)/2 is prime. Since a prime
    425     // is odd, We just need to divide by 2
    426     if (!BN_rshift1(t, ret)) {
    427       goto err;
    428     }
    429 
    430     for (i = 0; i < checks; i++) {
    431       j = BN_is_prime_fasttest_ex(ret, 1, ctx, 0, NULL);
    432       if (j == -1) {
    433         goto err;
    434       } else if (j == 0) {
    435         goto loop;
    436       }
    437 
    438       j = BN_is_prime_fasttest_ex(t, 1, ctx, 0, NULL);
    439       if (j == -1) {
    440         goto err;
    441       } else if (j == 0) {
    442         goto loop;
    443       }
    444 
    445       if (!BN_GENCB_call(cb, i, c1 - 1)) {
    446         goto err;
    447       }
    448       // We have a safe prime test pass
    449     }
    450   }
    451 
    452   // we have a prime :-)
    453   found = 1;
    454 
    455 err:
    456   if (ctx != NULL) {
    457     BN_CTX_end(ctx);
    458     BN_CTX_free(ctx);
    459   }
    460 
    461   return found;
    462 }
    463 
    464 int BN_primality_test(int *is_probably_prime, const BIGNUM *candidate,
    465                       int checks, BN_CTX *ctx, int do_trial_division,
    466                       BN_GENCB *cb) {
    467   switch (BN_is_prime_fasttest_ex(candidate, checks, ctx, do_trial_division, cb)) {
    468     case 1:
    469       *is_probably_prime = 1;
    470       return 1;
    471     case 0:
    472       *is_probably_prime = 0;
    473       return 1;
    474     default:
    475       *is_probably_prime = 0;
    476       return 0;
    477   }
    478 }
    479 
    480 int BN_is_prime_ex(const BIGNUM *candidate, int checks, BN_CTX *ctx, BN_GENCB *cb) {
    481   return BN_is_prime_fasttest_ex(candidate, checks, ctx, 0, cb);
    482 }
    483 
    484 int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx,
    485                             int do_trial_division, BN_GENCB *cb) {
    486   if (BN_cmp(a, BN_value_one()) <= 0) {
    487     return 0;
    488   }
    489 
    490   // first look for small factors
    491   if (!BN_is_odd(a)) {
    492     // a is even => a is prime if and only if a == 2
    493     return BN_is_word(a, 2);
    494   }
    495 
    496   // Enhanced Miller-Rabin does not work for three.
    497   if (BN_is_word(a, 3)) {
    498     return 1;
    499   }
    500 
    501   if (do_trial_division) {
    502     for (int i = 1; i < NUMPRIMES; i++) {
    503       BN_ULONG mod = BN_mod_word(a, primes[i]);
    504       if (mod == (BN_ULONG)-1) {
    505         return -1;
    506       }
    507       if (mod == 0) {
    508         return BN_is_word(a, primes[i]);
    509       }
    510     }
    511 
    512     if (!BN_GENCB_call(cb, 1, -1)) {
    513       return -1;
    514     }
    515   }
    516 
    517   int ret = -1;
    518   BN_CTX *ctx_allocated = NULL;
    519   if (ctx == NULL) {
    520     ctx_allocated = BN_CTX_new();
    521     if (ctx_allocated == NULL) {
    522       return -1;
    523     }
    524     ctx = ctx_allocated;
    525   }
    526 
    527   enum bn_primality_result_t result;
    528   if (!BN_enhanced_miller_rabin_primality_test(&result, a, checks, ctx, cb)) {
    529     goto err;
    530   }
    531 
    532   ret = (result == bn_probably_prime);
    533 
    534 err:
    535   BN_CTX_free(ctx_allocated);
    536   return ret;
    537 }
    538 
    539 int BN_enhanced_miller_rabin_primality_test(
    540     enum bn_primality_result_t *out_result, const BIGNUM *w, int iterations,
    541     BN_CTX *ctx, BN_GENCB *cb) {
    542   // Enhanced Miller-Rabin is only valid on odd integers greater than 3.
    543   if (!BN_is_odd(w) || BN_cmp_word(w, 3) <= 0) {
    544     OPENSSL_PUT_ERROR(BN, BN_R_INVALID_INPUT);
    545     return 0;
    546   }
    547 
    548   if (iterations == BN_prime_checks) {
    549     iterations = BN_prime_checks_for_size(BN_num_bits(w));
    550   }
    551 
    552   int ret = 0;
    553   BN_MONT_CTX *mont = NULL;
    554 
    555   BN_CTX_start(ctx);
    556 
    557   BIGNUM *w1 = BN_CTX_get(ctx);
    558   if (w1 == NULL ||
    559       !BN_copy(w1, w) ||
    560       !BN_sub_word(w1, 1)) {
    561     goto err;
    562   }
    563 
    564   // Write w1 as m*2^a (Steps 1 and 2).
    565   int a = 0;
    566   while (!BN_is_bit_set(w1, a)) {
    567     a++;
    568   }
    569   BIGNUM *m = BN_CTX_get(ctx);
    570   if (m == NULL ||
    571       !BN_rshift(m, w1, a)) {
    572     goto err;
    573   }
    574 
    575   BIGNUM *b = BN_CTX_get(ctx);
    576   BIGNUM *g = BN_CTX_get(ctx);
    577   BIGNUM *z = BN_CTX_get(ctx);
    578   BIGNUM *x = BN_CTX_get(ctx);
    579   BIGNUM *x1 = BN_CTX_get(ctx);
    580   if (b == NULL ||
    581       g == NULL ||
    582       z == NULL ||
    583       x == NULL ||
    584       x1 == NULL) {
    585     goto err;
    586   }
    587 
    588   // Montgomery setup for computations mod A
    589   mont = BN_MONT_CTX_new_for_modulus(w, ctx);
    590   if (mont == NULL) {
    591     goto err;
    592   }
    593 
    594   // The following loop performs in inner iteration of the Enhanced Miller-Rabin
    595   // Primality test (Step 4).
    596   for (int i = 1; i <= iterations; i++) {
    597     // Step 4.1-4.2
    598     if (!BN_rand_range_ex(b, 2, w1)) {
    599       goto err;
    600     }
    601 
    602     // Step 4.3-4.4
    603     if (!BN_gcd(g, b, w, ctx)) {
    604       goto err;
    605     }
    606     if (BN_cmp_word(g, 1) > 0) {
    607       *out_result = bn_composite;
    608       ret = 1;
    609       goto err;
    610     }
    611 
    612     // Step 4.5
    613     if (!BN_mod_exp_mont(z, b, m, w, ctx, mont)) {
    614       goto err;
    615     }
    616 
    617     // Step 4.6
    618     if (BN_is_one(z) || BN_cmp(z, w1) == 0) {
    619       goto loop;
    620     }
    621 
    622     // Step 4.7
    623     for (int j = 1; j < a; j++) {
    624       if (!BN_copy(x, z) || !BN_mod_mul(z, x, x, w, ctx)) {
    625         goto err;
    626       }
    627       if (BN_cmp(z, w1) == 0) {
    628         goto loop;
    629       }
    630       if (BN_is_one(z)) {
    631         goto composite;
    632       }
    633     }
    634 
    635     // Step 4.8-4.9
    636     if (!BN_copy(x, z) || !BN_mod_mul(z, x, x, w, ctx)) {
    637       goto err;
    638     }
    639 
    640     // Step 4.10-4.11
    641     if (!BN_is_one(z) && !BN_copy(x, z)) {
    642       goto err;
    643     }
    644 
    645  composite:
    646     // Step 4.12-4.14
    647     if (!BN_copy(x1, x) ||
    648         !BN_sub_word(x1, 1) ||
    649         !BN_gcd(g, x1, w, ctx)) {
    650       goto err;
    651     }
    652     if (BN_cmp_word(g, 1) > 0) {
    653       *out_result = bn_composite;
    654     } else {
    655       *out_result = bn_non_prime_power_composite;
    656     }
    657 
    658     ret = 1;
    659     goto err;
    660 
    661  loop:
    662     // Step 4.15
    663     if (!BN_GENCB_call(cb, 1, i)) {
    664       goto err;
    665     }
    666   }
    667 
    668   *out_result = bn_probably_prime;
    669   ret = 1;
    670 
    671 err:
    672   BN_MONT_CTX_free(mont);
    673   BN_CTX_end(ctx);
    674 
    675   return ret;
    676 }
    677 
    678 static int probable_prime(BIGNUM *rnd, int bits) {
    679   int i;
    680   uint16_t mods[NUMPRIMES];
    681   BN_ULONG delta;
    682   BN_ULONG maxdelta = BN_MASK2 - primes[NUMPRIMES - 1];
    683   char is_single_word = bits <= BN_BITS2;
    684 
    685 again:
    686   if (!BN_rand(rnd, bits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ODD)) {
    687     return 0;
    688   }
    689 
    690   // we now have a random number 'rnd' to test.
    691   for (i = 1; i < NUMPRIMES; i++) {
    692     BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]);
    693     if (mod == (BN_ULONG)-1) {
    694       return 0;
    695     }
    696     mods[i] = (uint16_t)mod;
    697   }
    698   // If bits is so small that it fits into a single word then we
    699   // additionally don't want to exceed that many bits.
    700   if (is_single_word) {
    701     BN_ULONG size_limit;
    702     if (bits == BN_BITS2) {
    703       // Avoid undefined behavior.
    704       size_limit = ~((BN_ULONG)0) - BN_get_word(rnd);
    705     } else {
    706       size_limit = (((BN_ULONG)1) << bits) - BN_get_word(rnd) - 1;
    707     }
    708     if (size_limit < maxdelta) {
    709       maxdelta = size_limit;
    710     }
    711   }
    712   delta = 0;
    713 
    714 loop:
    715   if (is_single_word) {
    716     BN_ULONG rnd_word = BN_get_word(rnd);
    717 
    718     // In the case that the candidate prime is a single word then
    719     // we check that:
    720     //   1) It's greater than primes[i] because we shouldn't reject
    721     //      3 as being a prime number because it's a multiple of
    722     //      three.
    723     //   2) That it's not a multiple of a known prime. We don't
    724     //      check that rnd-1 is also coprime to all the known
    725     //      primes because there aren't many small primes where
    726     //      that's true.
    727     for (i = 1; i < NUMPRIMES && primes[i] < rnd_word; i++) {
    728       if ((mods[i] + delta) % primes[i] == 0) {
    729         delta += 2;
    730         if (delta > maxdelta) {
    731           goto again;
    732         }
    733         goto loop;
    734       }
    735     }
    736   } else {
    737     for (i = 1; i < NUMPRIMES; i++) {
    738       // check that rnd is not a prime and also
    739       // that gcd(rnd-1,primes) == 1 (except for 2)
    740       if (((mods[i] + delta) % primes[i]) <= 1) {
    741         delta += 2;
    742         if (delta > maxdelta) {
    743           goto again;
    744         }
    745         goto loop;
    746       }
    747     }
    748   }
    749 
    750   if (!BN_add_word(rnd, delta)) {
    751     return 0;
    752   }
    753   if (BN_num_bits(rnd) != (unsigned)bits) {
    754     goto again;
    755   }
    756 
    757   return 1;
    758 }
    759 
    760 static int probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add,
    761                              const BIGNUM *rem, BN_CTX *ctx) {
    762   int i, ret = 0;
    763   BIGNUM *t1;
    764 
    765   BN_CTX_start(ctx);
    766   if ((t1 = BN_CTX_get(ctx)) == NULL) {
    767     goto err;
    768   }
    769 
    770   if (!BN_rand(rnd, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) {
    771     goto err;
    772   }
    773 
    774   // we need ((rnd-rem) % add) == 0
    775 
    776   if (!BN_mod(t1, rnd, add, ctx)) {
    777     goto err;
    778   }
    779   if (!BN_sub(rnd, rnd, t1)) {
    780     goto err;
    781   }
    782   if (rem == NULL) {
    783     if (!BN_add_word(rnd, 1)) {
    784       goto err;
    785     }
    786   } else {
    787     if (!BN_add(rnd, rnd, rem)) {
    788       goto err;
    789     }
    790   }
    791   // we now have a random number 'rand' to test.
    792 
    793 loop:
    794   for (i = 1; i < NUMPRIMES; i++) {
    795     // check that rnd is a prime
    796     BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]);
    797     if (mod == (BN_ULONG)-1) {
    798       goto err;
    799     }
    800     if (mod <= 1) {
    801       if (!BN_add(rnd, rnd, add)) {
    802         goto err;
    803       }
    804       goto loop;
    805     }
    806   }
    807 
    808   ret = 1;
    809 
    810 err:
    811   BN_CTX_end(ctx);
    812   return ret;
    813 }
    814 
    815 static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd,
    816                                   const BIGNUM *rem, BN_CTX *ctx) {
    817   int i, ret = 0;
    818   BIGNUM *t1, *qadd, *q;
    819 
    820   bits--;
    821   BN_CTX_start(ctx);
    822   t1 = BN_CTX_get(ctx);
    823   q = BN_CTX_get(ctx);
    824   qadd = BN_CTX_get(ctx);
    825   if (qadd == NULL) {
    826     goto err;
    827   }
    828 
    829   if (!BN_rshift1(qadd, padd)) {
    830     goto err;
    831   }
    832 
    833   if (!BN_rand(q, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) {
    834     goto err;
    835   }
    836 
    837   // we need ((rnd-rem) % add) == 0
    838   if (!BN_mod(t1, q, qadd, ctx)) {
    839     goto err;
    840   }
    841 
    842   if (!BN_sub(q, q, t1)) {
    843     goto err;
    844   }
    845 
    846   if (rem == NULL) {
    847     if (!BN_add_word(q, 1)) {
    848       goto err;
    849     }
    850   } else {
    851     if (!BN_rshift1(t1, rem)) {
    852       goto err;
    853     }
    854     if (!BN_add(q, q, t1)) {
    855       goto err;
    856     }
    857   }
    858 
    859   // we now have a random number 'rand' to test.
    860   if (!BN_lshift1(p, q)) {
    861     goto err;
    862   }
    863   if (!BN_add_word(p, 1)) {
    864     goto err;
    865   }
    866 
    867 loop:
    868   for (i = 1; i < NUMPRIMES; i++) {
    869     // check that p and q are prime
    870     // check that for p and q
    871     // gcd(p-1,primes) == 1 (except for 2)
    872     BN_ULONG pmod = BN_mod_word(p, (BN_ULONG)primes[i]);
    873     BN_ULONG qmod = BN_mod_word(q, (BN_ULONG)primes[i]);
    874     if (pmod == (BN_ULONG)-1 || qmod == (BN_ULONG)-1) {
    875       goto err;
    876     }
    877     if (pmod == 0 || qmod == 0) {
    878       if (!BN_add(p, p, padd)) {
    879         goto err;
    880       }
    881       if (!BN_add(q, q, qadd)) {
    882         goto err;
    883       }
    884       goto loop;
    885     }
    886   }
    887 
    888   ret = 1;
    889 
    890 err:
    891   BN_CTX_end(ctx);
    892   return ret;
    893 }
    894