xref: /freebsd/crypto/openssl/crypto/bn/bn_const.c (revision 7a991ecd)
1e71b7053SJung-uk Kim /*
2b077aed3SPierre Pronchery  * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved.
3e71b7053SJung-uk Kim  *
4b077aed3SPierre Pronchery  * Licensed under the Apache License 2.0 (the "License").  You may not use
5e71b7053SJung-uk Kim  * this file except in compliance with the License.  You can obtain a copy
6e71b7053SJung-uk Kim  * in the file LICENSE in the source distribution or at
7e71b7053SJung-uk Kim  * https://www.openssl.org/source/license.html
8e71b7053SJung-uk Kim  */
93b4e3dcbSSimon L. B. Nielsen 
10e71b7053SJung-uk Kim #include <openssl/bn.h>
11b077aed3SPierre Pronchery #include "crypto/bn_dh.h"
12b077aed3SPierre Pronchery 
13b077aed3SPierre Pronchery #define COPY_BN(dst, src) (dst != NULL) ? BN_copy(dst, &src) : BN_dup(&src)
14b077aed3SPierre Pronchery 
153b4e3dcbSSimon L. B. Nielsen 
166f9291ceSJung-uk Kim /*-
176f9291ceSJung-uk Kim  * "First Oakley Default Group" from RFC2409, section 6.1.
183b4e3dcbSSimon L. B. Nielsen  *
193b4e3dcbSSimon L. B. Nielsen  * The prime is: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 }
203b4e3dcbSSimon L. B. Nielsen  *
213b4e3dcbSSimon L. B. Nielsen  * RFC2409 specifies a generator of 2.
223b4e3dcbSSimon L. B. Nielsen  * RFC2412 specifies a generator of of 22.
233b4e3dcbSSimon L. B. Nielsen  */
243b4e3dcbSSimon L. B. Nielsen 
BN_get_rfc2409_prime_768(BIGNUM * bn)25e71b7053SJung-uk Kim BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn)
263b4e3dcbSSimon L. B. Nielsen {
273b4e3dcbSSimon L. B. Nielsen     static const unsigned char RFC2409_PRIME_768[] = {
286f9291ceSJung-uk Kim         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
296f9291ceSJung-uk Kim         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
306f9291ceSJung-uk Kim         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
316f9291ceSJung-uk Kim         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
326f9291ceSJung-uk Kim         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
336f9291ceSJung-uk Kim         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
346f9291ceSJung-uk Kim         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
356f9291ceSJung-uk Kim         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
366f9291ceSJung-uk Kim         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
376f9291ceSJung-uk Kim         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
386f9291ceSJung-uk Kim         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x3A, 0x36, 0x20,
396f9291ceSJung-uk Kim         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
403b4e3dcbSSimon L. B. Nielsen     };
413b4e3dcbSSimon L. B. Nielsen     return BN_bin2bn(RFC2409_PRIME_768, sizeof(RFC2409_PRIME_768), bn);
423b4e3dcbSSimon L. B. Nielsen }
433b4e3dcbSSimon L. B. Nielsen 
446f9291ceSJung-uk Kim /*-
456f9291ceSJung-uk Kim  * "Second Oakley Default Group" from RFC2409, section 6.2.
463b4e3dcbSSimon L. B. Nielsen  *
473b4e3dcbSSimon L. B. Nielsen  * The prime is: 2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 }.
483b4e3dcbSSimon L. B. Nielsen  *
493b4e3dcbSSimon L. B. Nielsen  * RFC2409 specifies a generator of 2.
503b4e3dcbSSimon L. B. Nielsen  * RFC2412 specifies a generator of 22.
513b4e3dcbSSimon L. B. Nielsen  */
523b4e3dcbSSimon L. B. Nielsen 
BN_get_rfc2409_prime_1024(BIGNUM * bn)53e71b7053SJung-uk Kim BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn)
543b4e3dcbSSimon L. B. Nielsen {
553b4e3dcbSSimon L. B. Nielsen     static const unsigned char RFC2409_PRIME_1024[] = {
566f9291ceSJung-uk Kim         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
576f9291ceSJung-uk Kim         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
586f9291ceSJung-uk Kim         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
596f9291ceSJung-uk Kim         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
606f9291ceSJung-uk Kim         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
616f9291ceSJung-uk Kim         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
626f9291ceSJung-uk Kim         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
636f9291ceSJung-uk Kim         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
646f9291ceSJung-uk Kim         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
656f9291ceSJung-uk Kim         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
666f9291ceSJung-uk Kim         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
676f9291ceSJung-uk Kim         0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
686f9291ceSJung-uk Kim         0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
696f9291ceSJung-uk Kim         0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
706f9291ceSJung-uk Kim         0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81,
713b4e3dcbSSimon L. B. Nielsen         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
723b4e3dcbSSimon L. B. Nielsen     };
733b4e3dcbSSimon L. B. Nielsen     return BN_bin2bn(RFC2409_PRIME_1024, sizeof(RFC2409_PRIME_1024), bn);
743b4e3dcbSSimon L. B. Nielsen }
753b4e3dcbSSimon L. B. Nielsen 
766f9291ceSJung-uk Kim /*-
776f9291ceSJung-uk Kim  * "1536-bit MODP Group" from RFC3526, Section 2.
783b4e3dcbSSimon L. B. Nielsen  *
793b4e3dcbSSimon L. B. Nielsen  * The prime is: 2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 pi] + 741804 }
803b4e3dcbSSimon L. B. Nielsen  *
813b4e3dcbSSimon L. B. Nielsen  * RFC3526 specifies a generator of 2.
823b4e3dcbSSimon L. B. Nielsen  * RFC2312 specifies a generator of 22.
833b4e3dcbSSimon L. B. Nielsen  */
843b4e3dcbSSimon L. B. Nielsen 
857a991ecdSPierre Pronchery #ifndef FIPS_MODULE
BN_get_rfc3526_prime_1536(BIGNUM * bn)86e71b7053SJung-uk Kim BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn)
873b4e3dcbSSimon L. B. Nielsen {
88b077aed3SPierre Pronchery     return COPY_BN(bn, ossl_bignum_modp_1536_p);
893b4e3dcbSSimon L. B. Nielsen }
907a991ecdSPierre Pronchery #endif
913b4e3dcbSSimon L. B. Nielsen 
926f9291ceSJung-uk Kim /*-
936f9291ceSJung-uk Kim  * "2048-bit MODP Group" from RFC3526, Section 3.
943b4e3dcbSSimon L. B. Nielsen  *
953b4e3dcbSSimon L. B. Nielsen  * The prime is: 2^2048 - 2^1984 - 1 + 2^64 * { [2^1918 pi] + 124476 }
963b4e3dcbSSimon L. B. Nielsen  *
973b4e3dcbSSimon L. B. Nielsen  * RFC3526 specifies a generator of 2.
983b4e3dcbSSimon L. B. Nielsen  */
993b4e3dcbSSimon L. B. Nielsen 
BN_get_rfc3526_prime_2048(BIGNUM * bn)100e71b7053SJung-uk Kim BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn)
1013b4e3dcbSSimon L. B. Nielsen {
102b077aed3SPierre Pronchery     return COPY_BN(bn, ossl_bignum_modp_2048_p);
1033b4e3dcbSSimon L. B. Nielsen }
1043b4e3dcbSSimon L. B. Nielsen 
1056f9291ceSJung-uk Kim /*-
1066f9291ceSJung-uk Kim  * "3072-bit MODP Group" from RFC3526, Section 4.
1073b4e3dcbSSimon L. B. Nielsen  *
1083b4e3dcbSSimon L. B. Nielsen  * The prime is: 2^3072 - 2^3008 - 1 + 2^64 * { [2^2942 pi] + 1690314 }
1093b4e3dcbSSimon L. B. Nielsen  *
1103b4e3dcbSSimon L. B. Nielsen  * RFC3526 specifies a generator of 2.
1113b4e3dcbSSimon L. B. Nielsen  */
1123b4e3dcbSSimon L. B. Nielsen 
BN_get_rfc3526_prime_3072(BIGNUM * bn)113e71b7053SJung-uk Kim BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn)
1143b4e3dcbSSimon L. B. Nielsen {
115b077aed3SPierre Pronchery     return COPY_BN(bn, ossl_bignum_modp_3072_p);
1163b4e3dcbSSimon L. B. Nielsen }
1173b4e3dcbSSimon L. B. Nielsen 
1186f9291ceSJung-uk Kim /*-
1196f9291ceSJung-uk Kim  * "4096-bit MODP Group" from RFC3526, Section 5.
1203b4e3dcbSSimon L. B. Nielsen  *
1213b4e3dcbSSimon L. B. Nielsen  * The prime is: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 }
1223b4e3dcbSSimon L. B. Nielsen  *
1233b4e3dcbSSimon L. B. Nielsen  * RFC3526 specifies a generator of 2.
1243b4e3dcbSSimon L. B. Nielsen  */
1253b4e3dcbSSimon L. B. Nielsen 
BN_get_rfc3526_prime_4096(BIGNUM * bn)126e71b7053SJung-uk Kim BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn)
1273b4e3dcbSSimon L. B. Nielsen {
128b077aed3SPierre Pronchery     return COPY_BN(bn, ossl_bignum_modp_4096_p);
1293b4e3dcbSSimon L. B. Nielsen }
1303b4e3dcbSSimon L. B. Nielsen 
1316f9291ceSJung-uk Kim /*-
1326f9291ceSJung-uk Kim  * "6144-bit MODP Group" from RFC3526, Section 6.
1333b4e3dcbSSimon L. B. Nielsen  *
1343b4e3dcbSSimon L. B. Nielsen  * The prime is: 2^6144 - 2^6080 - 1 + 2^64 * { [2^6014 pi] + 929484 }
1353b4e3dcbSSimon L. B. Nielsen  *
1363b4e3dcbSSimon L. B. Nielsen  * RFC3526 specifies a generator of 2.
1373b4e3dcbSSimon L. B. Nielsen  */
1383b4e3dcbSSimon L. B. Nielsen 
BN_get_rfc3526_prime_6144(BIGNUM * bn)139e71b7053SJung-uk Kim BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn)
1403b4e3dcbSSimon L. B. Nielsen {
141b077aed3SPierre Pronchery     return COPY_BN(bn, ossl_bignum_modp_6144_p);
1423b4e3dcbSSimon L. B. Nielsen }
1433b4e3dcbSSimon L. B. Nielsen 
1446f9291ceSJung-uk Kim /*-
1456f9291ceSJung-uk Kim  * "8192-bit MODP Group" from RFC3526, Section 7.
1463b4e3dcbSSimon L. B. Nielsen  *
1473b4e3dcbSSimon L. B. Nielsen  * The prime is: 2^8192 - 2^8128 - 1 + 2^64 * { [2^8062 pi] + 4743158 }
1483b4e3dcbSSimon L. B. Nielsen  *
1493b4e3dcbSSimon L. B. Nielsen  * RFC3526 specifies a generator of 2.
1503b4e3dcbSSimon L. B. Nielsen  */
1513b4e3dcbSSimon L. B. Nielsen 
BN_get_rfc3526_prime_8192(BIGNUM * bn)152e71b7053SJung-uk Kim BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn)
1533b4e3dcbSSimon L. B. Nielsen {
154b077aed3SPierre Pronchery     return COPY_BN(bn, ossl_bignum_modp_8192_p);
1553b4e3dcbSSimon L. B. Nielsen }
156