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(); 590 if (mont == NULL || 591 !BN_MONT_CTX_set(mont, w, ctx)) { 592 goto err; 593 } 594 595 /* The following loop performs in inner iteration of the Enhanced Miller-Rabin 596 * Primality test (Step 4). */ 597 for (int i = 1; i <= iterations; i++) { 598 /* Step 4.1-4.2 */ 599 if (!BN_rand_range_ex(b, 2, w1)) { 600 goto err; 601 } 602 603 /* Step 4.3-4.4 */ 604 if (!BN_gcd(g, b, w, ctx)) { 605 goto err; 606 } 607 if (BN_cmp_word(g, 1) > 0) { 608 *out_result = bn_composite; 609 ret = 1; 610 goto err; 611 } 612 613 /* Step 4.5 */ 614 if (!BN_mod_exp_mont(z, b, m, w, ctx, mont)) { 615 goto err; 616 } 617 618 /* Step 4.6 */ 619 if (BN_is_one(z) || BN_cmp(z, w1) == 0) { 620 goto loop; 621 } 622 623 /* Step 4.7 */ 624 for (int j = 1; j < a; j++) { 625 if (!BN_copy(x, z) || !BN_mod_mul(z, x, x, w, ctx)) { 626 goto err; 627 } 628 if (BN_cmp(z, w1) == 0) { 629 goto loop; 630 } 631 if (BN_is_one(z)) { 632 goto composite; 633 } 634 } 635 636 /* Step 4.8-4.9 */ 637 if (!BN_copy(x, z) || !BN_mod_mul(z, x, x, w, ctx)) { 638 goto err; 639 } 640 641 /* Step 4.10-4.11 */ 642 if (!BN_is_one(z) && !BN_copy(x, z)) { 643 goto err; 644 } 645 646 composite: 647 /* Step 4.12-4.14 */ 648 if (!BN_copy(x1, x) || 649 !BN_sub_word(x1, 1) || 650 !BN_gcd(g, x1, w, ctx)) { 651 goto err; 652 } 653 if (BN_cmp_word(g, 1) > 0) { 654 *out_result = bn_composite; 655 } else { 656 *out_result = bn_non_prime_power_composite; 657 } 658 659 ret = 1; 660 goto err; 661 662 loop: 663 /* Step 4.15 */ 664 if (!BN_GENCB_call(cb, 1, i)) { 665 goto err; 666 } 667 } 668 669 *out_result = bn_probably_prime; 670 ret = 1; 671 672 err: 673 BN_MONT_CTX_free(mont); 674 BN_CTX_end(ctx); 675 676 return ret; 677 } 678 679 static int probable_prime(BIGNUM *rnd, int bits) { 680 int i; 681 uint16_t mods[NUMPRIMES]; 682 BN_ULONG delta; 683 BN_ULONG maxdelta = BN_MASK2 - primes[NUMPRIMES - 1]; 684 char is_single_word = bits <= BN_BITS2; 685 686 again: 687 if (!BN_rand(rnd, bits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ODD)) { 688 return 0; 689 } 690 691 /* we now have a random number 'rnd' to test. */ 692 for (i = 1; i < NUMPRIMES; i++) { 693 BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); 694 if (mod == (BN_ULONG)-1) { 695 return 0; 696 } 697 mods[i] = (uint16_t)mod; 698 } 699 /* If bits is so small that it fits into a single word then we 700 * additionally don't want to exceed that many bits. */ 701 if (is_single_word) { 702 BN_ULONG size_limit; 703 if (bits == BN_BITS2) { 704 /* Avoid undefined behavior. */ 705 size_limit = ~((BN_ULONG)0) - BN_get_word(rnd); 706 } else { 707 size_limit = (((BN_ULONG)1) << bits) - BN_get_word(rnd) - 1; 708 } 709 if (size_limit < maxdelta) { 710 maxdelta = size_limit; 711 } 712 } 713 delta = 0; 714 715 loop: 716 if (is_single_word) { 717 BN_ULONG rnd_word = BN_get_word(rnd); 718 719 /* In the case that the candidate prime is a single word then 720 * we check that: 721 * 1) It's greater than primes[i] because we shouldn't reject 722 * 3 as being a prime number because it's a multiple of 723 * three. 724 * 2) That it's not a multiple of a known prime. We don't 725 * check that rnd-1 is also coprime to all the known 726 * primes because there aren't many small primes where 727 * that's true. */ 728 for (i = 1; i < NUMPRIMES && primes[i] < rnd_word; i++) { 729 if ((mods[i] + delta) % primes[i] == 0) { 730 delta += 2; 731 if (delta > maxdelta) { 732 goto again; 733 } 734 goto loop; 735 } 736 } 737 } else { 738 for (i = 1; i < NUMPRIMES; i++) { 739 /* check that rnd is not a prime and also 740 * that gcd(rnd-1,primes) == 1 (except for 2) */ 741 if (((mods[i] + delta) % primes[i]) <= 1) { 742 delta += 2; 743 if (delta > maxdelta) { 744 goto again; 745 } 746 goto loop; 747 } 748 } 749 } 750 751 if (!BN_add_word(rnd, delta)) { 752 return 0; 753 } 754 if (BN_num_bits(rnd) != (unsigned)bits) { 755 goto again; 756 } 757 758 return 1; 759 } 760 761 static int probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add, 762 const BIGNUM *rem, BN_CTX *ctx) { 763 int i, ret = 0; 764 BIGNUM *t1; 765 766 BN_CTX_start(ctx); 767 if ((t1 = BN_CTX_get(ctx)) == NULL) { 768 goto err; 769 } 770 771 if (!BN_rand(rnd, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) { 772 goto err; 773 } 774 775 /* we need ((rnd-rem) % add) == 0 */ 776 777 if (!BN_mod(t1, rnd, add, ctx)) { 778 goto err; 779 } 780 if (!BN_sub(rnd, rnd, t1)) { 781 goto err; 782 } 783 if (rem == NULL) { 784 if (!BN_add_word(rnd, 1)) { 785 goto err; 786 } 787 } else { 788 if (!BN_add(rnd, rnd, rem)) { 789 goto err; 790 } 791 } 792 /* we now have a random number 'rand' to test. */ 793 794 loop: 795 for (i = 1; i < NUMPRIMES; i++) { 796 /* check that rnd is a prime */ 797 BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); 798 if (mod == (BN_ULONG)-1) { 799 goto err; 800 } 801 if (mod <= 1) { 802 if (!BN_add(rnd, rnd, add)) { 803 goto err; 804 } 805 goto loop; 806 } 807 } 808 809 ret = 1; 810 811 err: 812 BN_CTX_end(ctx); 813 return ret; 814 } 815 816 static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd, 817 const BIGNUM *rem, BN_CTX *ctx) { 818 int i, ret = 0; 819 BIGNUM *t1, *qadd, *q; 820 821 bits--; 822 BN_CTX_start(ctx); 823 t1 = BN_CTX_get(ctx); 824 q = BN_CTX_get(ctx); 825 qadd = BN_CTX_get(ctx); 826 if (qadd == NULL) { 827 goto err; 828 } 829 830 if (!BN_rshift1(qadd, padd)) { 831 goto err; 832 } 833 834 if (!BN_rand(q, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) { 835 goto err; 836 } 837 838 /* we need ((rnd-rem) % add) == 0 */ 839 if (!BN_mod(t1, q, qadd, ctx)) { 840 goto err; 841 } 842 843 if (!BN_sub(q, q, t1)) { 844 goto err; 845 } 846 847 if (rem == NULL) { 848 if (!BN_add_word(q, 1)) { 849 goto err; 850 } 851 } else { 852 if (!BN_rshift1(t1, rem)) { 853 goto err; 854 } 855 if (!BN_add(q, q, t1)) { 856 goto err; 857 } 858 } 859 860 /* we now have a random number 'rand' to test. */ 861 if (!BN_lshift1(p, q)) { 862 goto err; 863 } 864 if (!BN_add_word(p, 1)) { 865 goto err; 866 } 867 868 loop: 869 for (i = 1; i < NUMPRIMES; i++) { 870 /* check that p and q are prime */ 871 /* check that for p and q 872 * gcd(p-1,primes) == 1 (except for 2) */ 873 BN_ULONG pmod = BN_mod_word(p, (BN_ULONG)primes[i]); 874 BN_ULONG qmod = BN_mod_word(q, (BN_ULONG)primes[i]); 875 if (pmod == (BN_ULONG)-1 || qmod == (BN_ULONG)-1) { 876 goto err; 877 } 878 if (pmod == 0 || qmod == 0) { 879 if (!BN_add(p, p, padd)) { 880 goto err; 881 } 882 if (!BN_add(q, q, qadd)) { 883 goto err; 884 } 885 goto loop; 886 } 887 } 888 889 ret = 1; 890 891 err: 892 BN_CTX_end(ctx); 893 return ret; 894 } 895