xref: /freebsd/contrib/wpa/src/crypto/dh_groups.c (revision 7648bc9fee8dec6cb3c4941e0165a930fbe8dcb0)
139beb93cSSam Leffler /*
239beb93cSSam Leffler  * Diffie-Hellman groups
339beb93cSSam Leffler  * Copyright (c) 2007, Jouni Malinen <j@w1.fi>
439beb93cSSam Leffler  *
5f05cddf9SRui Paulo  * This software may be distributed under the terms of the BSD license.
6f05cddf9SRui Paulo  * See README for more details.
739beb93cSSam Leffler  */
839beb93cSSam Leffler 
939beb93cSSam Leffler #include "includes.h"
1039beb93cSSam Leffler 
1139beb93cSSam Leffler #include "common.h"
1239beb93cSSam Leffler #include "crypto.h"
13f05cddf9SRui Paulo #include "random.h"
1439beb93cSSam Leffler #include "dh_groups.h"
1539beb93cSSam Leffler 
1639beb93cSSam Leffler 
173157ba21SRui Paulo #ifdef ALL_DH_GROUPS
183157ba21SRui Paulo 
1939beb93cSSam Leffler /* RFC 4306, B.1. Group 1 - 768 Bit MODP
2039beb93cSSam Leffler  * Generator: 2
2139beb93cSSam Leffler  * Prime: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 }
2239beb93cSSam Leffler  */
2339beb93cSSam Leffler static const u8 dh_group1_generator[1] = { 0x02 };
2439beb93cSSam Leffler static const u8 dh_group1_prime[96] = {
2539beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2639beb93cSSam Leffler 	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
2739beb93cSSam Leffler 	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
2839beb93cSSam Leffler 	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
2939beb93cSSam Leffler 	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
3039beb93cSSam Leffler 	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
3139beb93cSSam Leffler 	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
3239beb93cSSam Leffler 	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
3339beb93cSSam Leffler 	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
3439beb93cSSam Leffler 	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
3539beb93cSSam Leffler 	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x3A, 0x36, 0x20,
3639beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
3739beb93cSSam Leffler };
385b9c547cSRui Paulo static const u8 dh_group1_order[96] = {
395b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
405b9c547cSRui Paulo 	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
415b9c547cSRui Paulo 	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
425b9c547cSRui Paulo 	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
435b9c547cSRui Paulo 	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
445b9c547cSRui Paulo 	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
455b9c547cSRui Paulo 	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
465b9c547cSRui Paulo 	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
475b9c547cSRui Paulo 	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
485b9c547cSRui Paulo 	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
495b9c547cSRui Paulo 	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1D, 0x1B, 0x10,
505b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
515b9c547cSRui Paulo };
5239beb93cSSam Leffler 
5339beb93cSSam Leffler /* RFC 4306, B.2. Group 2 - 1024 Bit MODP
5439beb93cSSam Leffler  * Generator: 2
5539beb93cSSam Leffler  * Prime: 2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 }
5639beb93cSSam Leffler  */
5739beb93cSSam Leffler static const u8 dh_group2_generator[1] = { 0x02 };
5839beb93cSSam Leffler static const u8 dh_group2_prime[128] = {
5939beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
6039beb93cSSam Leffler 	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
6139beb93cSSam Leffler 	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
6239beb93cSSam Leffler 	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
6339beb93cSSam Leffler 	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
6439beb93cSSam Leffler 	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
6539beb93cSSam Leffler 	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
6639beb93cSSam Leffler 	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
6739beb93cSSam Leffler 	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
6839beb93cSSam Leffler 	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
6939beb93cSSam Leffler 	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
7039beb93cSSam Leffler 	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
7139beb93cSSam Leffler 	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
7239beb93cSSam Leffler 	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
7339beb93cSSam Leffler 	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81,
7439beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
7539beb93cSSam Leffler };
765b9c547cSRui Paulo static const u8 dh_group2_order[128] = {
775b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
785b9c547cSRui Paulo 	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
795b9c547cSRui Paulo 	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
805b9c547cSRui Paulo 	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
815b9c547cSRui Paulo 	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
825b9c547cSRui Paulo 	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
835b9c547cSRui Paulo 	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
845b9c547cSRui Paulo 	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
855b9c547cSRui Paulo 	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
865b9c547cSRui Paulo 	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
875b9c547cSRui Paulo 	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
885b9c547cSRui Paulo 	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
895b9c547cSRui Paulo 	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
905b9c547cSRui Paulo 	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
915b9c547cSRui Paulo 	0x24, 0x94, 0x33, 0x28, 0xF6, 0x73, 0x29, 0xC0,
925b9c547cSRui Paulo 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
935b9c547cSRui Paulo };
9439beb93cSSam Leffler 
953157ba21SRui Paulo #endif /* ALL_DH_GROUPS */
963157ba21SRui Paulo 
9739beb93cSSam Leffler /* RFC 3526, 2. Group 5 - 1536 Bit MODP
9839beb93cSSam Leffler  * Generator: 2
9939beb93cSSam Leffler  * Prime: 2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 pi] + 741804 }
10039beb93cSSam Leffler  */
10139beb93cSSam Leffler static const u8 dh_group5_generator[1] = { 0x02 };
10239beb93cSSam Leffler static const u8 dh_group5_prime[192] = {
10339beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
10439beb93cSSam Leffler 	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
10539beb93cSSam Leffler 	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
10639beb93cSSam Leffler 	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
10739beb93cSSam Leffler 	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
10839beb93cSSam Leffler 	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
10939beb93cSSam Leffler 	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
11039beb93cSSam Leffler 	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
11139beb93cSSam Leffler 	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
11239beb93cSSam Leffler 	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
11339beb93cSSam Leffler 	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
11439beb93cSSam Leffler 	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
11539beb93cSSam Leffler 	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
11639beb93cSSam Leffler 	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
11739beb93cSSam Leffler 	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
11839beb93cSSam Leffler 	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
11939beb93cSSam Leffler 	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
12039beb93cSSam Leffler 	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
12139beb93cSSam Leffler 	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
12239beb93cSSam Leffler 	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
12339beb93cSSam Leffler 	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
12439beb93cSSam Leffler 	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
12539beb93cSSam Leffler 	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x23, 0x73, 0x27,
12639beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
12739beb93cSSam Leffler };
1285b9c547cSRui Paulo static const u8 dh_group5_order[192] = {
1295b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1305b9c547cSRui Paulo 	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
1315b9c547cSRui Paulo 	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
1325b9c547cSRui Paulo 	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
1335b9c547cSRui Paulo 	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
1345b9c547cSRui Paulo 	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
1355b9c547cSRui Paulo 	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
1365b9c547cSRui Paulo 	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
1375b9c547cSRui Paulo 	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
1385b9c547cSRui Paulo 	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
1395b9c547cSRui Paulo 	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
1405b9c547cSRui Paulo 	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
1415b9c547cSRui Paulo 	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
1425b9c547cSRui Paulo 	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
1435b9c547cSRui Paulo 	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
1445b9c547cSRui Paulo 	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
1455b9c547cSRui Paulo 	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
1465b9c547cSRui Paulo 	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
1475b9c547cSRui Paulo 	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
1485b9c547cSRui Paulo 	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
1495b9c547cSRui Paulo 	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
1505b9c547cSRui Paulo 	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
1515b9c547cSRui Paulo 	0x78, 0xBA, 0x36, 0x04, 0x65, 0x11, 0xB9, 0x93,
1525b9c547cSRui Paulo 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
1535b9c547cSRui Paulo };
15439beb93cSSam Leffler 
1553157ba21SRui Paulo #ifdef ALL_DH_GROUPS
1563157ba21SRui Paulo 
15739beb93cSSam Leffler /* RFC 3526, 3. Group 14 - 2048 Bit MODP
15839beb93cSSam Leffler  * Generator: 2
15939beb93cSSam Leffler  * Prime: 2^2048 - 2^1984 - 1 + 2^64 * { [2^1918 pi] + 124476 }
16039beb93cSSam Leffler  */
16139beb93cSSam Leffler static const u8 dh_group14_generator[1] = { 0x02 };
16239beb93cSSam Leffler static const u8 dh_group14_prime[256] = {
16339beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
16439beb93cSSam Leffler 	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
16539beb93cSSam Leffler 	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
16639beb93cSSam Leffler 	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
16739beb93cSSam Leffler 	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
16839beb93cSSam Leffler 	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
16939beb93cSSam Leffler 	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
17039beb93cSSam Leffler 	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
17139beb93cSSam Leffler 	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
17239beb93cSSam Leffler 	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
17339beb93cSSam Leffler 	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
17439beb93cSSam Leffler 	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
17539beb93cSSam Leffler 	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
17639beb93cSSam Leffler 	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
17739beb93cSSam Leffler 	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
17839beb93cSSam Leffler 	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
17939beb93cSSam Leffler 	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
18039beb93cSSam Leffler 	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
18139beb93cSSam Leffler 	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
18239beb93cSSam Leffler 	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
18339beb93cSSam Leffler 	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
18439beb93cSSam Leffler 	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
18539beb93cSSam Leffler 	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
18639beb93cSSam Leffler 	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
18739beb93cSSam Leffler 	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
18839beb93cSSam Leffler 	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
18939beb93cSSam Leffler 	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
19039beb93cSSam Leffler 	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
19139beb93cSSam Leffler 	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
19239beb93cSSam Leffler 	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
19339beb93cSSam Leffler 	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68,
19439beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
19539beb93cSSam Leffler };
1965b9c547cSRui Paulo static const u8 dh_group14_order[256] = {
1975b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1985b9c547cSRui Paulo 	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
1995b9c547cSRui Paulo 	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
2005b9c547cSRui Paulo 	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
2015b9c547cSRui Paulo 	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
2025b9c547cSRui Paulo 	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
2035b9c547cSRui Paulo 	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
2045b9c547cSRui Paulo 	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
2055b9c547cSRui Paulo 	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
2065b9c547cSRui Paulo 	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
2075b9c547cSRui Paulo 	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
2085b9c547cSRui Paulo 	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
2095b9c547cSRui Paulo 	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
2105b9c547cSRui Paulo 	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
2115b9c547cSRui Paulo 	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
2125b9c547cSRui Paulo 	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
2135b9c547cSRui Paulo 	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
2145b9c547cSRui Paulo 	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
2155b9c547cSRui Paulo 	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
2165b9c547cSRui Paulo 	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
2175b9c547cSRui Paulo 	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
2185b9c547cSRui Paulo 	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
2195b9c547cSRui Paulo 	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
2205b9c547cSRui Paulo 	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
2215b9c547cSRui Paulo 	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
2225b9c547cSRui Paulo 	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
2235b9c547cSRui Paulo 	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
2245b9c547cSRui Paulo 	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
2255b9c547cSRui Paulo 	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
2265b9c547cSRui Paulo 	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
2275b9c547cSRui Paulo 	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x56, 0x55, 0x34,
2285b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
2295b9c547cSRui Paulo };
23039beb93cSSam Leffler 
23139beb93cSSam Leffler /* RFC 3526, 4. Group 15 - 3072 Bit MODP
23239beb93cSSam Leffler  * Generator: 2
23339beb93cSSam Leffler  * Prime: 2^3072 - 2^3008 - 1 + 2^64 * { [2^2942 pi] + 1690314 }
23439beb93cSSam Leffler  */
23539beb93cSSam Leffler static const u8 dh_group15_generator[1] = { 0x02 };
23639beb93cSSam Leffler static const u8 dh_group15_prime[384] = {
23739beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
23839beb93cSSam Leffler 	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
23939beb93cSSam Leffler 	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
24039beb93cSSam Leffler 	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
24139beb93cSSam Leffler 	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
24239beb93cSSam Leffler 	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
24339beb93cSSam Leffler 	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
24439beb93cSSam Leffler 	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
24539beb93cSSam Leffler 	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
24639beb93cSSam Leffler 	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
24739beb93cSSam Leffler 	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
24839beb93cSSam Leffler 	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
24939beb93cSSam Leffler 	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
25039beb93cSSam Leffler 	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
25139beb93cSSam Leffler 	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
25239beb93cSSam Leffler 	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
25339beb93cSSam Leffler 	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
25439beb93cSSam Leffler 	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
25539beb93cSSam Leffler 	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
25639beb93cSSam Leffler 	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
25739beb93cSSam Leffler 	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
25839beb93cSSam Leffler 	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
25939beb93cSSam Leffler 	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
26039beb93cSSam Leffler 	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
26139beb93cSSam Leffler 	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
26239beb93cSSam Leffler 	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
26339beb93cSSam Leffler 	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
26439beb93cSSam Leffler 	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
26539beb93cSSam Leffler 	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
26639beb93cSSam Leffler 	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
26739beb93cSSam Leffler 	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
26839beb93cSSam Leffler 	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
26939beb93cSSam Leffler 	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
27039beb93cSSam Leffler 	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
27139beb93cSSam Leffler 	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
27239beb93cSSam Leffler 	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
27339beb93cSSam Leffler 	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
27439beb93cSSam Leffler 	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
27539beb93cSSam Leffler 	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
27639beb93cSSam Leffler 	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
27739beb93cSSam Leffler 	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
27839beb93cSSam Leffler 	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
27939beb93cSSam Leffler 	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
28039beb93cSSam Leffler 	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
28139beb93cSSam Leffler 	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
28239beb93cSSam Leffler 	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
28339beb93cSSam Leffler 	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x3A, 0xD2, 0xCA,
28439beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
28539beb93cSSam Leffler };
2865b9c547cSRui Paulo static const u8 dh_group15_order[384] = {
2875b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2885b9c547cSRui Paulo 	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
2895b9c547cSRui Paulo 	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
2905b9c547cSRui Paulo 	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
2915b9c547cSRui Paulo 	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
2925b9c547cSRui Paulo 	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
2935b9c547cSRui Paulo 	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
2945b9c547cSRui Paulo 	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
2955b9c547cSRui Paulo 	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
2965b9c547cSRui Paulo 	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
2975b9c547cSRui Paulo 	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
2985b9c547cSRui Paulo 	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
2995b9c547cSRui Paulo 	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
3005b9c547cSRui Paulo 	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
3015b9c547cSRui Paulo 	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
3025b9c547cSRui Paulo 	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
3035b9c547cSRui Paulo 	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
3045b9c547cSRui Paulo 	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
3055b9c547cSRui Paulo 	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
3065b9c547cSRui Paulo 	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
3075b9c547cSRui Paulo 	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
3085b9c547cSRui Paulo 	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
3095b9c547cSRui Paulo 	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
3105b9c547cSRui Paulo 	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
3115b9c547cSRui Paulo 	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
3125b9c547cSRui Paulo 	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
3135b9c547cSRui Paulo 	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
3145b9c547cSRui Paulo 	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
3155b9c547cSRui Paulo 	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
3165b9c547cSRui Paulo 	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
3175b9c547cSRui Paulo 	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x55, 0x62, 0x16,
3185b9c547cSRui Paulo 	0xD6, 0x99, 0x8B, 0x86, 0x82, 0x28, 0x3D, 0x19,
3195b9c547cSRui Paulo 	0xD4, 0x2A, 0x90, 0xD5, 0xEF, 0x8E, 0x5D, 0x32,
3205b9c547cSRui Paulo 	0x76, 0x7D, 0xC2, 0x82, 0x2C, 0x6D, 0xF7, 0x85,
3215b9c547cSRui Paulo 	0x45, 0x75, 0x38, 0xAB, 0xAE, 0x83, 0x06, 0x3E,
3225b9c547cSRui Paulo 	0xD9, 0xCB, 0x87, 0xC2, 0xD3, 0x70, 0xF2, 0x63,
3235b9c547cSRui Paulo 	0xD5, 0xFA, 0xD7, 0x46, 0x6D, 0x84, 0x99, 0xEB,
3245b9c547cSRui Paulo 	0x8F, 0x46, 0x4A, 0x70, 0x25, 0x12, 0xB0, 0xCE,
3255b9c547cSRui Paulo 	0xE7, 0x71, 0xE9, 0x13, 0x0D, 0x69, 0x77, 0x35,
3265b9c547cSRui Paulo 	0xF8, 0x97, 0xFD, 0x03, 0x6C, 0xC5, 0x04, 0x32,
3275b9c547cSRui Paulo 	0x6C, 0x3B, 0x01, 0x39, 0x9F, 0x64, 0x35, 0x32,
3285b9c547cSRui Paulo 	0x29, 0x0F, 0x95, 0x8C, 0x0B, 0xBD, 0x90, 0x06,
3295b9c547cSRui Paulo 	0x5D, 0xF0, 0x8B, 0xAB, 0xBD, 0x30, 0xAE, 0xB6,
3305b9c547cSRui Paulo 	0x3B, 0x84, 0xC4, 0x60, 0x5D, 0x6C, 0xA3, 0x71,
3315b9c547cSRui Paulo 	0x04, 0x71, 0x27, 0xD0, 0x3A, 0x72, 0xD5, 0x98,
3325b9c547cSRui Paulo 	0xA1, 0xED, 0xAD, 0xFE, 0x70, 0x7E, 0x88, 0x47,
3335b9c547cSRui Paulo 	0x25, 0xC1, 0x68, 0x90, 0x54, 0x9D, 0x69, 0x65,
3345b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
3355b9c547cSRui Paulo };
33639beb93cSSam Leffler 
33739beb93cSSam Leffler /* RFC 3526, 5. Group 16 - 4096 Bit MODP
33839beb93cSSam Leffler  * Generator: 2
33939beb93cSSam Leffler  * Prime: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 }
34039beb93cSSam Leffler  */
34139beb93cSSam Leffler static const u8 dh_group16_generator[1] = { 0x02 };
34239beb93cSSam Leffler static const u8 dh_group16_prime[512] = {
34339beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
34439beb93cSSam Leffler 	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
34539beb93cSSam Leffler 	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
34639beb93cSSam Leffler 	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
34739beb93cSSam Leffler 	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
34839beb93cSSam Leffler 	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
34939beb93cSSam Leffler 	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
35039beb93cSSam Leffler 	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
35139beb93cSSam Leffler 	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
35239beb93cSSam Leffler 	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
35339beb93cSSam Leffler 	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
35439beb93cSSam Leffler 	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
35539beb93cSSam Leffler 	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
35639beb93cSSam Leffler 	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
35739beb93cSSam Leffler 	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
35839beb93cSSam Leffler 	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
35939beb93cSSam Leffler 	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
36039beb93cSSam Leffler 	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
36139beb93cSSam Leffler 	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
36239beb93cSSam Leffler 	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
36339beb93cSSam Leffler 	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
36439beb93cSSam Leffler 	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
36539beb93cSSam Leffler 	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
36639beb93cSSam Leffler 	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
36739beb93cSSam Leffler 	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
36839beb93cSSam Leffler 	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
36939beb93cSSam Leffler 	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
37039beb93cSSam Leffler 	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
37139beb93cSSam Leffler 	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
37239beb93cSSam Leffler 	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
37339beb93cSSam Leffler 	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
37439beb93cSSam Leffler 	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
37539beb93cSSam Leffler 	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
37639beb93cSSam Leffler 	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
37739beb93cSSam Leffler 	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
37839beb93cSSam Leffler 	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
37939beb93cSSam Leffler 	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
38039beb93cSSam Leffler 	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
38139beb93cSSam Leffler 	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
38239beb93cSSam Leffler 	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
38339beb93cSSam Leffler 	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
38439beb93cSSam Leffler 	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
38539beb93cSSam Leffler 	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
38639beb93cSSam Leffler 	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
38739beb93cSSam Leffler 	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
38839beb93cSSam Leffler 	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
38939beb93cSSam Leffler 	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
39039beb93cSSam Leffler 	0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
39139beb93cSSam Leffler 	0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
39239beb93cSSam Leffler 	0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
39339beb93cSSam Leffler 	0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
39439beb93cSSam Leffler 	0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
39539beb93cSSam Leffler 	0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
39639beb93cSSam Leffler 	0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
39739beb93cSSam Leffler 	0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
39839beb93cSSam Leffler 	0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
39939beb93cSSam Leffler 	0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
40039beb93cSSam Leffler 	0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
40139beb93cSSam Leffler 	0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
40239beb93cSSam Leffler 	0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
40339beb93cSSam Leffler 	0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
40439beb93cSSam Leffler 	0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
40539beb93cSSam Leffler 	0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x06, 0x31, 0x99,
40639beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
40739beb93cSSam Leffler };
4085b9c547cSRui Paulo static const u8 dh_group16_order[512] = {
4095b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
4105b9c547cSRui Paulo 	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
4115b9c547cSRui Paulo 	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
4125b9c547cSRui Paulo 	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
4135b9c547cSRui Paulo 	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
4145b9c547cSRui Paulo 	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
4155b9c547cSRui Paulo 	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
4165b9c547cSRui Paulo 	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
4175b9c547cSRui Paulo 	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
4185b9c547cSRui Paulo 	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
4195b9c547cSRui Paulo 	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
4205b9c547cSRui Paulo 	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
4215b9c547cSRui Paulo 	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
4225b9c547cSRui Paulo 	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
4235b9c547cSRui Paulo 	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
4245b9c547cSRui Paulo 	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
4255b9c547cSRui Paulo 	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
4265b9c547cSRui Paulo 	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
4275b9c547cSRui Paulo 	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
4285b9c547cSRui Paulo 	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
4295b9c547cSRui Paulo 	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
4305b9c547cSRui Paulo 	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
4315b9c547cSRui Paulo 	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
4325b9c547cSRui Paulo 	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
4335b9c547cSRui Paulo 	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
4345b9c547cSRui Paulo 	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
4355b9c547cSRui Paulo 	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
4365b9c547cSRui Paulo 	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
4375b9c547cSRui Paulo 	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
4385b9c547cSRui Paulo 	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
4395b9c547cSRui Paulo 	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x55, 0x62, 0x16,
4405b9c547cSRui Paulo 	0xD6, 0x99, 0x8B, 0x86, 0x82, 0x28, 0x3D, 0x19,
4415b9c547cSRui Paulo 	0xD4, 0x2A, 0x90, 0xD5, 0xEF, 0x8E, 0x5D, 0x32,
4425b9c547cSRui Paulo 	0x76, 0x7D, 0xC2, 0x82, 0x2C, 0x6D, 0xF7, 0x85,
4435b9c547cSRui Paulo 	0x45, 0x75, 0x38, 0xAB, 0xAE, 0x83, 0x06, 0x3E,
4445b9c547cSRui Paulo 	0xD9, 0xCB, 0x87, 0xC2, 0xD3, 0x70, 0xF2, 0x63,
4455b9c547cSRui Paulo 	0xD5, 0xFA, 0xD7, 0x46, 0x6D, 0x84, 0x99, 0xEB,
4465b9c547cSRui Paulo 	0x8F, 0x46, 0x4A, 0x70, 0x25, 0x12, 0xB0, 0xCE,
4475b9c547cSRui Paulo 	0xE7, 0x71, 0xE9, 0x13, 0x0D, 0x69, 0x77, 0x35,
4485b9c547cSRui Paulo 	0xF8, 0x97, 0xFD, 0x03, 0x6C, 0xC5, 0x04, 0x32,
4495b9c547cSRui Paulo 	0x6C, 0x3B, 0x01, 0x39, 0x9F, 0x64, 0x35, 0x32,
4505b9c547cSRui Paulo 	0x29, 0x0F, 0x95, 0x8C, 0x0B, 0xBD, 0x90, 0x06,
4515b9c547cSRui Paulo 	0x5D, 0xF0, 0x8B, 0xAB, 0xBD, 0x30, 0xAE, 0xB6,
4525b9c547cSRui Paulo 	0x3B, 0x84, 0xC4, 0x60, 0x5D, 0x6C, 0xA3, 0x71,
4535b9c547cSRui Paulo 	0x04, 0x71, 0x27, 0xD0, 0x3A, 0x72, 0xD5, 0x98,
4545b9c547cSRui Paulo 	0xA1, 0xED, 0xAD, 0xFE, 0x70, 0x7E, 0x88, 0x47,
4555b9c547cSRui Paulo 	0x25, 0xC1, 0x68, 0x90, 0x54, 0x90, 0x84, 0x00,
4565b9c547cSRui Paulo 	0x8D, 0x39, 0x1E, 0x09, 0x53, 0xC3, 0xF3, 0x6B,
4575b9c547cSRui Paulo 	0xC4, 0x38, 0xCD, 0x08, 0x5E, 0xDD, 0x2D, 0x93,
4585b9c547cSRui Paulo 	0x4C, 0xE1, 0x93, 0x8C, 0x35, 0x7A, 0x71, 0x1E,
4595b9c547cSRui Paulo 	0x0D, 0x4A, 0x34, 0x1A, 0x5B, 0x0A, 0x85, 0xED,
4605b9c547cSRui Paulo 	0x12, 0xC1, 0xF4, 0xE5, 0x15, 0x6A, 0x26, 0x74,
4615b9c547cSRui Paulo 	0x6D, 0xDD, 0xE1, 0x6D, 0x82, 0x6F, 0x47, 0x7C,
4625b9c547cSRui Paulo 	0x97, 0x47, 0x7E, 0x0A, 0x0F, 0xDF, 0x65, 0x53,
4635b9c547cSRui Paulo 	0x14, 0x3E, 0x2C, 0xA3, 0xA7, 0x35, 0xE0, 0x2E,
4645b9c547cSRui Paulo 	0xCC, 0xD9, 0x4B, 0x27, 0xD0, 0x48, 0x61, 0xD1,
4655b9c547cSRui Paulo 	0x11, 0x9D, 0xD0, 0xC3, 0x28, 0xAD, 0xF3, 0xF6,
4665b9c547cSRui Paulo 	0x8F, 0xB0, 0x94, 0xB8, 0x67, 0x71, 0x6B, 0xD7,
4675b9c547cSRui Paulo 	0xDC, 0x0D, 0xEE, 0xBB, 0x10, 0xB8, 0x24, 0x0E,
4685b9c547cSRui Paulo 	0x68, 0x03, 0x48, 0x93, 0xEA, 0xD8, 0x2D, 0x54,
4695b9c547cSRui Paulo 	0xC9, 0xDA, 0x75, 0x4C, 0x46, 0xC7, 0xEE, 0xE0,
4705b9c547cSRui Paulo 	0xC3, 0x7F, 0xDB, 0xEE, 0x48, 0x53, 0x60, 0x47,
4715b9c547cSRui Paulo 	0xA6, 0xFA, 0x1A, 0xE4, 0x9A, 0x03, 0x18, 0xCC,
4725b9c547cSRui Paulo 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
4735b9c547cSRui Paulo };
47439beb93cSSam Leffler 
47539beb93cSSam Leffler /* RFC 3526, 6. Group 17 - 6144 Bit MODP
47639beb93cSSam Leffler  * Generator: 2
47739beb93cSSam Leffler  * Prime: 2^6144 - 2^6080 - 1 + 2^64 * { [2^6014 pi] + 929484 }
47839beb93cSSam Leffler  */
47939beb93cSSam Leffler static const u8 dh_group17_generator[1] = { 0x02 };
48039beb93cSSam Leffler static const u8 dh_group17_prime[768] = {
48139beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
48239beb93cSSam Leffler 	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
48339beb93cSSam Leffler 	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
48439beb93cSSam Leffler 	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
48539beb93cSSam Leffler 	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
48639beb93cSSam Leffler 	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
48739beb93cSSam Leffler 	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
48839beb93cSSam Leffler 	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
48939beb93cSSam Leffler 	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
49039beb93cSSam Leffler 	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
49139beb93cSSam Leffler 	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
49239beb93cSSam Leffler 	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
49339beb93cSSam Leffler 	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
49439beb93cSSam Leffler 	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
49539beb93cSSam Leffler 	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
49639beb93cSSam Leffler 	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
49739beb93cSSam Leffler 	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
49839beb93cSSam Leffler 	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
49939beb93cSSam Leffler 	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
50039beb93cSSam Leffler 	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
50139beb93cSSam Leffler 	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
50239beb93cSSam Leffler 	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
50339beb93cSSam Leffler 	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
50439beb93cSSam Leffler 	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
50539beb93cSSam Leffler 	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
50639beb93cSSam Leffler 	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
50739beb93cSSam Leffler 	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
50839beb93cSSam Leffler 	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
50939beb93cSSam Leffler 	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
51039beb93cSSam Leffler 	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
51139beb93cSSam Leffler 	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
51239beb93cSSam Leffler 	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
51339beb93cSSam Leffler 	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
51439beb93cSSam Leffler 	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
51539beb93cSSam Leffler 	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
51639beb93cSSam Leffler 	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
51739beb93cSSam Leffler 	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
51839beb93cSSam Leffler 	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
51939beb93cSSam Leffler 	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
52039beb93cSSam Leffler 	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
52139beb93cSSam Leffler 	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
52239beb93cSSam Leffler 	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
52339beb93cSSam Leffler 	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
52439beb93cSSam Leffler 	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
52539beb93cSSam Leffler 	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
52639beb93cSSam Leffler 	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
52739beb93cSSam Leffler 	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
52839beb93cSSam Leffler 	0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
52939beb93cSSam Leffler 	0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
53039beb93cSSam Leffler 	0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
53139beb93cSSam Leffler 	0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
53239beb93cSSam Leffler 	0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
53339beb93cSSam Leffler 	0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
53439beb93cSSam Leffler 	0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
53539beb93cSSam Leffler 	0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
53639beb93cSSam Leffler 	0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
53739beb93cSSam Leffler 	0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
53839beb93cSSam Leffler 	0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
53939beb93cSSam Leffler 	0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
54039beb93cSSam Leffler 	0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
54139beb93cSSam Leffler 	0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
54239beb93cSSam Leffler 	0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
54339beb93cSSam Leffler 	0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92,
54439beb93cSSam Leffler 	0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26,
54539beb93cSSam Leffler 	0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE,
54639beb93cSSam Leffler 	0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD,
54739beb93cSSam Leffler 	0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E,
54839beb93cSSam Leffler 	0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE,
54939beb93cSSam Leffler 	0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31,
55039beb93cSSam Leffler 	0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18,
55139beb93cSSam Leffler 	0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED,
55239beb93cSSam Leffler 	0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B,
55339beb93cSSam Leffler 	0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B,
55439beb93cSSam Leffler 	0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42,
55539beb93cSSam Leffler 	0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF,
55639beb93cSSam Leffler 	0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC,
55739beb93cSSam Leffler 	0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03,
55839beb93cSSam Leffler 	0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6,
55939beb93cSSam Leffler 	0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82,
56039beb93cSSam Leffler 	0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E,
56139beb93cSSam Leffler 	0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3,
56239beb93cSSam Leffler 	0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE,
56339beb93cSSam Leffler 	0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5,
56439beb93cSSam Leffler 	0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA,
56539beb93cSSam Leffler 	0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8,
56639beb93cSSam Leffler 	0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0,
56739beb93cSSam Leffler 	0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28,
56839beb93cSSam Leffler 	0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76,
56939beb93cSSam Leffler 	0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0,
57039beb93cSSam Leffler 	0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C,
57139beb93cSSam Leffler 	0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32,
57239beb93cSSam Leffler 	0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68,
57339beb93cSSam Leffler 	0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE,
57439beb93cSSam Leffler 	0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6,
57539beb93cSSam Leffler 	0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xCC, 0x40, 0x24,
57639beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
57739beb93cSSam Leffler };
5785b9c547cSRui Paulo static const u8 dh_group17_order[768] = {
5795b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
5805b9c547cSRui Paulo 	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
5815b9c547cSRui Paulo 	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
5825b9c547cSRui Paulo 	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
5835b9c547cSRui Paulo 	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
5845b9c547cSRui Paulo 	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
5855b9c547cSRui Paulo 	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
5865b9c547cSRui Paulo 	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
5875b9c547cSRui Paulo 	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
5885b9c547cSRui Paulo 	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
5895b9c547cSRui Paulo 	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
5905b9c547cSRui Paulo 	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
5915b9c547cSRui Paulo 	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
5925b9c547cSRui Paulo 	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
5935b9c547cSRui Paulo 	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
5945b9c547cSRui Paulo 	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
5955b9c547cSRui Paulo 	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
5965b9c547cSRui Paulo 	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
5975b9c547cSRui Paulo 	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
5985b9c547cSRui Paulo 	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
5995b9c547cSRui Paulo 	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
6005b9c547cSRui Paulo 	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
6015b9c547cSRui Paulo 	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
6025b9c547cSRui Paulo 	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
6035b9c547cSRui Paulo 	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
6045b9c547cSRui Paulo 	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
6055b9c547cSRui Paulo 	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
6065b9c547cSRui Paulo 	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
6075b9c547cSRui Paulo 	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
6085b9c547cSRui Paulo 	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
6095b9c547cSRui Paulo 	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x55, 0x62, 0x16,
6105b9c547cSRui Paulo 	0xD6, 0x99, 0x8B, 0x86, 0x82, 0x28, 0x3D, 0x19,
6115b9c547cSRui Paulo 	0xD4, 0x2A, 0x90, 0xD5, 0xEF, 0x8E, 0x5D, 0x32,
6125b9c547cSRui Paulo 	0x76, 0x7D, 0xC2, 0x82, 0x2C, 0x6D, 0xF7, 0x85,
6135b9c547cSRui Paulo 	0x45, 0x75, 0x38, 0xAB, 0xAE, 0x83, 0x06, 0x3E,
6145b9c547cSRui Paulo 	0xD9, 0xCB, 0x87, 0xC2, 0xD3, 0x70, 0xF2, 0x63,
6155b9c547cSRui Paulo 	0xD5, 0xFA, 0xD7, 0x46, 0x6D, 0x84, 0x99, 0xEB,
6165b9c547cSRui Paulo 	0x8F, 0x46, 0x4A, 0x70, 0x25, 0x12, 0xB0, 0xCE,
6175b9c547cSRui Paulo 	0xE7, 0x71, 0xE9, 0x13, 0x0D, 0x69, 0x77, 0x35,
6185b9c547cSRui Paulo 	0xF8, 0x97, 0xFD, 0x03, 0x6C, 0xC5, 0x04, 0x32,
6195b9c547cSRui Paulo 	0x6C, 0x3B, 0x01, 0x39, 0x9F, 0x64, 0x35, 0x32,
6205b9c547cSRui Paulo 	0x29, 0x0F, 0x95, 0x8C, 0x0B, 0xBD, 0x90, 0x06,
6215b9c547cSRui Paulo 	0x5D, 0xF0, 0x8B, 0xAB, 0xBD, 0x30, 0xAE, 0xB6,
6225b9c547cSRui Paulo 	0x3B, 0x84, 0xC4, 0x60, 0x5D, 0x6C, 0xA3, 0x71,
6235b9c547cSRui Paulo 	0x04, 0x71, 0x27, 0xD0, 0x3A, 0x72, 0xD5, 0x98,
6245b9c547cSRui Paulo 	0xA1, 0xED, 0xAD, 0xFE, 0x70, 0x7E, 0x88, 0x47,
6255b9c547cSRui Paulo 	0x25, 0xC1, 0x68, 0x90, 0x54, 0x90, 0x84, 0x00,
6265b9c547cSRui Paulo 	0x8D, 0x39, 0x1E, 0x09, 0x53, 0xC3, 0xF3, 0x6B,
6275b9c547cSRui Paulo 	0xC4, 0x38, 0xCD, 0x08, 0x5E, 0xDD, 0x2D, 0x93,
6285b9c547cSRui Paulo 	0x4C, 0xE1, 0x93, 0x8C, 0x35, 0x7A, 0x71, 0x1E,
6295b9c547cSRui Paulo 	0x0D, 0x4A, 0x34, 0x1A, 0x5B, 0x0A, 0x85, 0xED,
6305b9c547cSRui Paulo 	0x12, 0xC1, 0xF4, 0xE5, 0x15, 0x6A, 0x26, 0x74,
6315b9c547cSRui Paulo 	0x6D, 0xDD, 0xE1, 0x6D, 0x82, 0x6F, 0x47, 0x7C,
6325b9c547cSRui Paulo 	0x97, 0x47, 0x7E, 0x0A, 0x0F, 0xDF, 0x65, 0x53,
6335b9c547cSRui Paulo 	0x14, 0x3E, 0x2C, 0xA3, 0xA7, 0x35, 0xE0, 0x2E,
6345b9c547cSRui Paulo 	0xCC, 0xD9, 0x4B, 0x27, 0xD0, 0x48, 0x61, 0xD1,
6355b9c547cSRui Paulo 	0x11, 0x9D, 0xD0, 0xC3, 0x28, 0xAD, 0xF3, 0xF6,
6365b9c547cSRui Paulo 	0x8F, 0xB0, 0x94, 0xB8, 0x67, 0x71, 0x6B, 0xD7,
6375b9c547cSRui Paulo 	0xDC, 0x0D, 0xEE, 0xBB, 0x10, 0xB8, 0x24, 0x0E,
6385b9c547cSRui Paulo 	0x68, 0x03, 0x48, 0x93, 0xEA, 0xD8, 0x2D, 0x54,
6395b9c547cSRui Paulo 	0xC9, 0xDA, 0x75, 0x4C, 0x46, 0xC7, 0xEE, 0xE0,
6405b9c547cSRui Paulo 	0xC3, 0x7F, 0xDB, 0xEE, 0x48, 0x53, 0x60, 0x47,
6415b9c547cSRui Paulo 	0xA6, 0xFA, 0x1A, 0xE4, 0x9A, 0x01, 0x42, 0x49,
6425b9c547cSRui Paulo 	0x1B, 0x61, 0xFD, 0x5A, 0x69, 0x3E, 0x38, 0x13,
6435b9c547cSRui Paulo 	0x60, 0xEA, 0x6E, 0x59, 0x30, 0x13, 0x23, 0x6F,
6445b9c547cSRui Paulo 	0x64, 0xBA, 0x8F, 0x3B, 0x1E, 0xDD, 0x1B, 0xDE,
6455b9c547cSRui Paulo 	0xFC, 0x7F, 0xCA, 0x03, 0x56, 0xCF, 0x29, 0x87,
6465b9c547cSRui Paulo 	0x72, 0xED, 0x9C, 0x17, 0xA0, 0x98, 0x00, 0xD7,
6475b9c547cSRui Paulo 	0x58, 0x35, 0x29, 0xF6, 0xC8, 0x13, 0xEC, 0x18,
6485b9c547cSRui Paulo 	0x8B, 0xCB, 0x93, 0xD8, 0x43, 0x2D, 0x44, 0x8C,
6495b9c547cSRui Paulo 	0x6D, 0x1F, 0x6D, 0xF5, 0xE7, 0xCD, 0x8A, 0x76,
6505b9c547cSRui Paulo 	0xA2, 0x67, 0x36, 0x5D, 0x67, 0x6A, 0x5D, 0x8D,
6515b9c547cSRui Paulo 	0xED, 0xBF, 0x8A, 0x23, 0xF3, 0x66, 0x12, 0xA5,
6525b9c547cSRui Paulo 	0x99, 0x90, 0x28, 0xA8, 0x95, 0xEB, 0xD7, 0xA1,
6535b9c547cSRui Paulo 	0x37, 0xDC, 0x7A, 0x00, 0x9B, 0xC6, 0x69, 0x5F,
6545b9c547cSRui Paulo 	0xAC, 0xC1, 0xE5, 0x00, 0xE3, 0x25, 0xC9, 0x76,
6555b9c547cSRui Paulo 	0x78, 0x19, 0x75, 0x0A, 0xE8, 0xB9, 0x0E, 0x81,
6565b9c547cSRui Paulo 	0xFA, 0x41, 0x6B, 0xE7, 0x37, 0x3A, 0x7F, 0x7B,
6575b9c547cSRui Paulo 	0x6A, 0xAF, 0x38, 0x17, 0xA3, 0x4C, 0x06, 0x41,
6585b9c547cSRui Paulo 	0x5A, 0xD4, 0x20, 0x18, 0xC8, 0x05, 0x8E, 0x4F,
6595b9c547cSRui Paulo 	0x2C, 0xF3, 0xE4, 0xBF, 0xDF, 0x63, 0xF4, 0x79,
6605b9c547cSRui Paulo 	0x91, 0xD4, 0xBD, 0x3F, 0x1B, 0x66, 0x44, 0x5F,
6615b9c547cSRui Paulo 	0x07, 0x8E, 0xA2, 0xDB, 0xFF, 0xAC, 0x2D, 0x62,
6625b9c547cSRui Paulo 	0xA5, 0xEA, 0x03, 0xD9, 0x15, 0xA0, 0xAA, 0x55,
6635b9c547cSRui Paulo 	0x66, 0x47, 0xB6, 0xBF, 0x5F, 0xA4, 0x70, 0xEC,
6645b9c547cSRui Paulo 	0x0A, 0x66, 0x2F, 0x69, 0x07, 0xC0, 0x1B, 0xF0,
6655b9c547cSRui Paulo 	0x53, 0xCB, 0x8A, 0xF7, 0x79, 0x4D, 0xF1, 0x94,
6665b9c547cSRui Paulo 	0x03, 0x50, 0xEA, 0xC5, 0xDB, 0xE2, 0xED, 0x3B,
6675b9c547cSRui Paulo 	0x7A, 0xA8, 0x55, 0x1E, 0xC5, 0x0F, 0xDF, 0xF8,
6685b9c547cSRui Paulo 	0x75, 0x8C, 0xE6, 0x58, 0xD1, 0x89, 0xEA, 0xAE,
6695b9c547cSRui Paulo 	0x6D, 0x2B, 0x64, 0xF6, 0x17, 0x79, 0x4B, 0x19,
6705b9c547cSRui Paulo 	0x1C, 0x3F, 0xF4, 0x6B, 0xB7, 0x1E, 0x02, 0x34,
6715b9c547cSRui Paulo 	0x02, 0x1F, 0x47, 0xB3, 0x1F, 0xA4, 0x30, 0x77,
6725b9c547cSRui Paulo 	0x09, 0x5F, 0x96, 0xAD, 0x85, 0xBA, 0x3A, 0x6B,
6735b9c547cSRui Paulo 	0x73, 0x4A, 0x7C, 0x8F, 0x36, 0xE6, 0x20, 0x12,
6745b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
6755b9c547cSRui Paulo };
67639beb93cSSam Leffler 
67739beb93cSSam Leffler /* RFC 3526, 7. Group 18 - 8192 Bit MODP
67839beb93cSSam Leffler  * Generator: 2
67939beb93cSSam Leffler  * Prime: 2^8192 - 2^8128 - 1 + 2^64 * { [2^8062 pi] + 4743158 }
68039beb93cSSam Leffler  */
68139beb93cSSam Leffler static const u8 dh_group18_generator[1] = { 0x02 };
68239beb93cSSam Leffler static const u8 dh_group18_prime[1024] = {
68339beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
68439beb93cSSam Leffler 	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
68539beb93cSSam Leffler 	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
68639beb93cSSam Leffler 	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
68739beb93cSSam Leffler 	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
68839beb93cSSam Leffler 	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
68939beb93cSSam Leffler 	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
69039beb93cSSam Leffler 	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
69139beb93cSSam Leffler 	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
69239beb93cSSam Leffler 	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
69339beb93cSSam Leffler 	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
69439beb93cSSam Leffler 	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
69539beb93cSSam Leffler 	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
69639beb93cSSam Leffler 	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
69739beb93cSSam Leffler 	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
69839beb93cSSam Leffler 	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
69939beb93cSSam Leffler 	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
70039beb93cSSam Leffler 	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
70139beb93cSSam Leffler 	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
70239beb93cSSam Leffler 	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
70339beb93cSSam Leffler 	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
70439beb93cSSam Leffler 	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
70539beb93cSSam Leffler 	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
70639beb93cSSam Leffler 	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
70739beb93cSSam Leffler 	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
70839beb93cSSam Leffler 	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
70939beb93cSSam Leffler 	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
71039beb93cSSam Leffler 	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
71139beb93cSSam Leffler 	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
71239beb93cSSam Leffler 	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
71339beb93cSSam Leffler 	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
71439beb93cSSam Leffler 	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
71539beb93cSSam Leffler 	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
71639beb93cSSam Leffler 	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
71739beb93cSSam Leffler 	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
71839beb93cSSam Leffler 	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
71939beb93cSSam Leffler 	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
72039beb93cSSam Leffler 	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
72139beb93cSSam Leffler 	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
72239beb93cSSam Leffler 	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
72339beb93cSSam Leffler 	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
72439beb93cSSam Leffler 	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
72539beb93cSSam Leffler 	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
72639beb93cSSam Leffler 	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
72739beb93cSSam Leffler 	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
72839beb93cSSam Leffler 	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
72939beb93cSSam Leffler 	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
73039beb93cSSam Leffler 	0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
73139beb93cSSam Leffler 	0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
73239beb93cSSam Leffler 	0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
73339beb93cSSam Leffler 	0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
73439beb93cSSam Leffler 	0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
73539beb93cSSam Leffler 	0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
73639beb93cSSam Leffler 	0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
73739beb93cSSam Leffler 	0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
73839beb93cSSam Leffler 	0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
73939beb93cSSam Leffler 	0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
74039beb93cSSam Leffler 	0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
74139beb93cSSam Leffler 	0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
74239beb93cSSam Leffler 	0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
74339beb93cSSam Leffler 	0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
74439beb93cSSam Leffler 	0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
74539beb93cSSam Leffler 	0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92,
74639beb93cSSam Leffler 	0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26,
74739beb93cSSam Leffler 	0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE,
74839beb93cSSam Leffler 	0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD,
74939beb93cSSam Leffler 	0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E,
75039beb93cSSam Leffler 	0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE,
75139beb93cSSam Leffler 	0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31,
75239beb93cSSam Leffler 	0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18,
75339beb93cSSam Leffler 	0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED,
75439beb93cSSam Leffler 	0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B,
75539beb93cSSam Leffler 	0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B,
75639beb93cSSam Leffler 	0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42,
75739beb93cSSam Leffler 	0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF,
75839beb93cSSam Leffler 	0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC,
75939beb93cSSam Leffler 	0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03,
76039beb93cSSam Leffler 	0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6,
76139beb93cSSam Leffler 	0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82,
76239beb93cSSam Leffler 	0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E,
76339beb93cSSam Leffler 	0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3,
76439beb93cSSam Leffler 	0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE,
76539beb93cSSam Leffler 	0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5,
76639beb93cSSam Leffler 	0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA,
76739beb93cSSam Leffler 	0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8,
76839beb93cSSam Leffler 	0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0,
76939beb93cSSam Leffler 	0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28,
77039beb93cSSam Leffler 	0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76,
77139beb93cSSam Leffler 	0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0,
77239beb93cSSam Leffler 	0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C,
77339beb93cSSam Leffler 	0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32,
77439beb93cSSam Leffler 	0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68,
77539beb93cSSam Leffler 	0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE,
77639beb93cSSam Leffler 	0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6,
77739beb93cSSam Leffler 	0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xBE, 0x11, 0x59,
77839beb93cSSam Leffler 	0x74, 0xA3, 0x92, 0x6F, 0x12, 0xFE, 0xE5, 0xE4,
77939beb93cSSam Leffler 	0x38, 0x77, 0x7C, 0xB6, 0xA9, 0x32, 0xDF, 0x8C,
78039beb93cSSam Leffler 	0xD8, 0xBE, 0xC4, 0xD0, 0x73, 0xB9, 0x31, 0xBA,
78139beb93cSSam Leffler 	0x3B, 0xC8, 0x32, 0xB6, 0x8D, 0x9D, 0xD3, 0x00,
78239beb93cSSam Leffler 	0x74, 0x1F, 0xA7, 0xBF, 0x8A, 0xFC, 0x47, 0xED,
78339beb93cSSam Leffler 	0x25, 0x76, 0xF6, 0x93, 0x6B, 0xA4, 0x24, 0x66,
78439beb93cSSam Leffler 	0x3A, 0xAB, 0x63, 0x9C, 0x5A, 0xE4, 0xF5, 0x68,
78539beb93cSSam Leffler 	0x34, 0x23, 0xB4, 0x74, 0x2B, 0xF1, 0xC9, 0x78,
78639beb93cSSam Leffler 	0x23, 0x8F, 0x16, 0xCB, 0xE3, 0x9D, 0x65, 0x2D,
78739beb93cSSam Leffler 	0xE3, 0xFD, 0xB8, 0xBE, 0xFC, 0x84, 0x8A, 0xD9,
78839beb93cSSam Leffler 	0x22, 0x22, 0x2E, 0x04, 0xA4, 0x03, 0x7C, 0x07,
78939beb93cSSam Leffler 	0x13, 0xEB, 0x57, 0xA8, 0x1A, 0x23, 0xF0, 0xC7,
79039beb93cSSam Leffler 	0x34, 0x73, 0xFC, 0x64, 0x6C, 0xEA, 0x30, 0x6B,
79139beb93cSSam Leffler 	0x4B, 0xCB, 0xC8, 0x86, 0x2F, 0x83, 0x85, 0xDD,
79239beb93cSSam Leffler 	0xFA, 0x9D, 0x4B, 0x7F, 0xA2, 0xC0, 0x87, 0xE8,
79339beb93cSSam Leffler 	0x79, 0x68, 0x33, 0x03, 0xED, 0x5B, 0xDD, 0x3A,
79439beb93cSSam Leffler 	0x06, 0x2B, 0x3C, 0xF5, 0xB3, 0xA2, 0x78, 0xA6,
79539beb93cSSam Leffler 	0x6D, 0x2A, 0x13, 0xF8, 0x3F, 0x44, 0xF8, 0x2D,
79639beb93cSSam Leffler 	0xDF, 0x31, 0x0E, 0xE0, 0x74, 0xAB, 0x6A, 0x36,
79739beb93cSSam Leffler 	0x45, 0x97, 0xE8, 0x99, 0xA0, 0x25, 0x5D, 0xC1,
79839beb93cSSam Leffler 	0x64, 0xF3, 0x1C, 0xC5, 0x08, 0x46, 0x85, 0x1D,
79939beb93cSSam Leffler 	0xF9, 0xAB, 0x48, 0x19, 0x5D, 0xED, 0x7E, 0xA1,
80039beb93cSSam Leffler 	0xB1, 0xD5, 0x10, 0xBD, 0x7E, 0xE7, 0x4D, 0x73,
80139beb93cSSam Leffler 	0xFA, 0xF3, 0x6B, 0xC3, 0x1E, 0xCF, 0xA2, 0x68,
80239beb93cSSam Leffler 	0x35, 0x90, 0x46, 0xF4, 0xEB, 0x87, 0x9F, 0x92,
80339beb93cSSam Leffler 	0x40, 0x09, 0x43, 0x8B, 0x48, 0x1C, 0x6C, 0xD7,
80439beb93cSSam Leffler 	0x88, 0x9A, 0x00, 0x2E, 0xD5, 0xEE, 0x38, 0x2B,
80539beb93cSSam Leffler 	0xC9, 0x19, 0x0D, 0xA6, 0xFC, 0x02, 0x6E, 0x47,
80639beb93cSSam Leffler 	0x95, 0x58, 0xE4, 0x47, 0x56, 0x77, 0xE9, 0xAA,
80739beb93cSSam Leffler 	0x9E, 0x30, 0x50, 0xE2, 0x76, 0x56, 0x94, 0xDF,
80839beb93cSSam Leffler 	0xC8, 0x1F, 0x56, 0xE8, 0x80, 0xB9, 0x6E, 0x71,
80939beb93cSSam Leffler 	0x60, 0xC9, 0x80, 0xDD, 0x98, 0xED, 0xD3, 0xDF,
81039beb93cSSam Leffler 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
81139beb93cSSam Leffler };
8125b9c547cSRui Paulo static const u8 dh_group18_order[1024] = {
8135b9c547cSRui Paulo 	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
8145b9c547cSRui Paulo 	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
8155b9c547cSRui Paulo 	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
8165b9c547cSRui Paulo 	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
8175b9c547cSRui Paulo 	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
8185b9c547cSRui Paulo 	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
8195b9c547cSRui Paulo 	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
8205b9c547cSRui Paulo 	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
8215b9c547cSRui Paulo 	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
8225b9c547cSRui Paulo 	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
8235b9c547cSRui Paulo 	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
8245b9c547cSRui Paulo 	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
8255b9c547cSRui Paulo 	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
8265b9c547cSRui Paulo 	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
8275b9c547cSRui Paulo 	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
8285b9c547cSRui Paulo 	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
8295b9c547cSRui Paulo 	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
8305b9c547cSRui Paulo 	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
8315b9c547cSRui Paulo 	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
8325b9c547cSRui Paulo 	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
8335b9c547cSRui Paulo 	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
8345b9c547cSRui Paulo 	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
8355b9c547cSRui Paulo 	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
8365b9c547cSRui Paulo 	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
8375b9c547cSRui Paulo 	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
8385b9c547cSRui Paulo 	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
8395b9c547cSRui Paulo 	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
8405b9c547cSRui Paulo 	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
8415b9c547cSRui Paulo 	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
8425b9c547cSRui Paulo 	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
8435b9c547cSRui Paulo 	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x55, 0x62, 0x16,
8445b9c547cSRui Paulo 	0xD6, 0x99, 0x8B, 0x86, 0x82, 0x28, 0x3D, 0x19,
8455b9c547cSRui Paulo 	0xD4, 0x2A, 0x90, 0xD5, 0xEF, 0x8E, 0x5D, 0x32,
8465b9c547cSRui Paulo 	0x76, 0x7D, 0xC2, 0x82, 0x2C, 0x6D, 0xF7, 0x85,
8475b9c547cSRui Paulo 	0x45, 0x75, 0x38, 0xAB, 0xAE, 0x83, 0x06, 0x3E,
8485b9c547cSRui Paulo 	0xD9, 0xCB, 0x87, 0xC2, 0xD3, 0x70, 0xF2, 0x63,
8495b9c547cSRui Paulo 	0xD5, 0xFA, 0xD7, 0x46, 0x6D, 0x84, 0x99, 0xEB,
8505b9c547cSRui Paulo 	0x8F, 0x46, 0x4A, 0x70, 0x25, 0x12, 0xB0, 0xCE,
8515b9c547cSRui Paulo 	0xE7, 0x71, 0xE9, 0x13, 0x0D, 0x69, 0x77, 0x35,
8525b9c547cSRui Paulo 	0xF8, 0x97, 0xFD, 0x03, 0x6C, 0xC5, 0x04, 0x32,
8535b9c547cSRui Paulo 	0x6C, 0x3B, 0x01, 0x39, 0x9F, 0x64, 0x35, 0x32,
8545b9c547cSRui Paulo 	0x29, 0x0F, 0x95, 0x8C, 0x0B, 0xBD, 0x90, 0x06,
8555b9c547cSRui Paulo 	0x5D, 0xF0, 0x8B, 0xAB, 0xBD, 0x30, 0xAE, 0xB6,
8565b9c547cSRui Paulo 	0x3B, 0x84, 0xC4, 0x60, 0x5D, 0x6C, 0xA3, 0x71,
8575b9c547cSRui Paulo 	0x04, 0x71, 0x27, 0xD0, 0x3A, 0x72, 0xD5, 0x98,
8585b9c547cSRui Paulo 	0xA1, 0xED, 0xAD, 0xFE, 0x70, 0x7E, 0x88, 0x47,
8595b9c547cSRui Paulo 	0x25, 0xC1, 0x68, 0x90, 0x54, 0x90, 0x84, 0x00,
8605b9c547cSRui Paulo 	0x8D, 0x39, 0x1E, 0x09, 0x53, 0xC3, 0xF3, 0x6B,
8615b9c547cSRui Paulo 	0xC4, 0x38, 0xCD, 0x08, 0x5E, 0xDD, 0x2D, 0x93,
8625b9c547cSRui Paulo 	0x4C, 0xE1, 0x93, 0x8C, 0x35, 0x7A, 0x71, 0x1E,
8635b9c547cSRui Paulo 	0x0D, 0x4A, 0x34, 0x1A, 0x5B, 0x0A, 0x85, 0xED,
8645b9c547cSRui Paulo 	0x12, 0xC1, 0xF4, 0xE5, 0x15, 0x6A, 0x26, 0x74,
8655b9c547cSRui Paulo 	0x6D, 0xDD, 0xE1, 0x6D, 0x82, 0x6F, 0x47, 0x7C,
8665b9c547cSRui Paulo 	0x97, 0x47, 0x7E, 0x0A, 0x0F, 0xDF, 0x65, 0x53,
8675b9c547cSRui Paulo 	0x14, 0x3E, 0x2C, 0xA3, 0xA7, 0x35, 0xE0, 0x2E,
8685b9c547cSRui Paulo 	0xCC, 0xD9, 0x4B, 0x27, 0xD0, 0x48, 0x61, 0xD1,
8695b9c547cSRui Paulo 	0x11, 0x9D, 0xD0, 0xC3, 0x28, 0xAD, 0xF3, 0xF6,
8705b9c547cSRui Paulo 	0x8F, 0xB0, 0x94, 0xB8, 0x67, 0x71, 0x6B, 0xD7,
8715b9c547cSRui Paulo 	0xDC, 0x0D, 0xEE, 0xBB, 0x10, 0xB8, 0x24, 0x0E,
8725b9c547cSRui Paulo 	0x68, 0x03, 0x48, 0x93, 0xEA, 0xD8, 0x2D, 0x54,
8735b9c547cSRui Paulo 	0xC9, 0xDA, 0x75, 0x4C, 0x46, 0xC7, 0xEE, 0xE0,
8745b9c547cSRui Paulo 	0xC3, 0x7F, 0xDB, 0xEE, 0x48, 0x53, 0x60, 0x47,
8755b9c547cSRui Paulo 	0xA6, 0xFA, 0x1A, 0xE4, 0x9A, 0x01, 0x42, 0x49,
8765b9c547cSRui Paulo 	0x1B, 0x61, 0xFD, 0x5A, 0x69, 0x3E, 0x38, 0x13,
8775b9c547cSRui Paulo 	0x60, 0xEA, 0x6E, 0x59, 0x30, 0x13, 0x23, 0x6F,
8785b9c547cSRui Paulo 	0x64, 0xBA, 0x8F, 0x3B, 0x1E, 0xDD, 0x1B, 0xDE,
8795b9c547cSRui Paulo 	0xFC, 0x7F, 0xCA, 0x03, 0x56, 0xCF, 0x29, 0x87,
8805b9c547cSRui Paulo 	0x72, 0xED, 0x9C, 0x17, 0xA0, 0x98, 0x00, 0xD7,
8815b9c547cSRui Paulo 	0x58, 0x35, 0x29, 0xF6, 0xC8, 0x13, 0xEC, 0x18,
8825b9c547cSRui Paulo 	0x8B, 0xCB, 0x93, 0xD8, 0x43, 0x2D, 0x44, 0x8C,
8835b9c547cSRui Paulo 	0x6D, 0x1F, 0x6D, 0xF5, 0xE7, 0xCD, 0x8A, 0x76,
8845b9c547cSRui Paulo 	0xA2, 0x67, 0x36, 0x5D, 0x67, 0x6A, 0x5D, 0x8D,
8855b9c547cSRui Paulo 	0xED, 0xBF, 0x8A, 0x23, 0xF3, 0x66, 0x12, 0xA5,
8865b9c547cSRui Paulo 	0x99, 0x90, 0x28, 0xA8, 0x95, 0xEB, 0xD7, 0xA1,
8875b9c547cSRui Paulo 	0x37, 0xDC, 0x7A, 0x00, 0x9B, 0xC6, 0x69, 0x5F,
8885b9c547cSRui Paulo 	0xAC, 0xC1, 0xE5, 0x00, 0xE3, 0x25, 0xC9, 0x76,
8895b9c547cSRui Paulo 	0x78, 0x19, 0x75, 0x0A, 0xE8, 0xB9, 0x0E, 0x81,
8905b9c547cSRui Paulo 	0xFA, 0x41, 0x6B, 0xE7, 0x37, 0x3A, 0x7F, 0x7B,
8915b9c547cSRui Paulo 	0x6A, 0xAF, 0x38, 0x17, 0xA3, 0x4C, 0x06, 0x41,
8925b9c547cSRui Paulo 	0x5A, 0xD4, 0x20, 0x18, 0xC8, 0x05, 0x8E, 0x4F,
8935b9c547cSRui Paulo 	0x2C, 0xF3, 0xE4, 0xBF, 0xDF, 0x63, 0xF4, 0x79,
8945b9c547cSRui Paulo 	0x91, 0xD4, 0xBD, 0x3F, 0x1B, 0x66, 0x44, 0x5F,
8955b9c547cSRui Paulo 	0x07, 0x8E, 0xA2, 0xDB, 0xFF, 0xAC, 0x2D, 0x62,
8965b9c547cSRui Paulo 	0xA5, 0xEA, 0x03, 0xD9, 0x15, 0xA0, 0xAA, 0x55,
8975b9c547cSRui Paulo 	0x66, 0x47, 0xB6, 0xBF, 0x5F, 0xA4, 0x70, 0xEC,
8985b9c547cSRui Paulo 	0x0A, 0x66, 0x2F, 0x69, 0x07, 0xC0, 0x1B, 0xF0,
8995b9c547cSRui Paulo 	0x53, 0xCB, 0x8A, 0xF7, 0x79, 0x4D, 0xF1, 0x94,
9005b9c547cSRui Paulo 	0x03, 0x50, 0xEA, 0xC5, 0xDB, 0xE2, 0xED, 0x3B,
9015b9c547cSRui Paulo 	0x7A, 0xA8, 0x55, 0x1E, 0xC5, 0x0F, 0xDF, 0xF8,
9025b9c547cSRui Paulo 	0x75, 0x8C, 0xE6, 0x58, 0xD1, 0x89, 0xEA, 0xAE,
9035b9c547cSRui Paulo 	0x6D, 0x2B, 0x64, 0xF6, 0x17, 0x79, 0x4B, 0x19,
9045b9c547cSRui Paulo 	0x1C, 0x3F, 0xF4, 0x6B, 0xB7, 0x1E, 0x02, 0x34,
9055b9c547cSRui Paulo 	0x02, 0x1F, 0x47, 0xB3, 0x1F, 0xA4, 0x30, 0x77,
9065b9c547cSRui Paulo 	0x09, 0x5F, 0x96, 0xAD, 0x85, 0xBA, 0x3A, 0x6B,
9075b9c547cSRui Paulo 	0x73, 0x4A, 0x7C, 0x8F, 0x36, 0xDF, 0x08, 0xAC,
9085b9c547cSRui Paulo 	0xBA, 0x51, 0xC9, 0x37, 0x89, 0x7F, 0x72, 0xF2,
9095b9c547cSRui Paulo 	0x1C, 0x3B, 0xBE, 0x5B, 0x54, 0x99, 0x6F, 0xC6,
9105b9c547cSRui Paulo 	0x6C, 0x5F, 0x62, 0x68, 0x39, 0xDC, 0x98, 0xDD,
9115b9c547cSRui Paulo 	0x1D, 0xE4, 0x19, 0x5B, 0x46, 0xCE, 0xE9, 0x80,
9125b9c547cSRui Paulo 	0x3A, 0x0F, 0xD3, 0xDF, 0xC5, 0x7E, 0x23, 0xF6,
9135b9c547cSRui Paulo 	0x92, 0xBB, 0x7B, 0x49, 0xB5, 0xD2, 0x12, 0x33,
9145b9c547cSRui Paulo 	0x1D, 0x55, 0xB1, 0xCE, 0x2D, 0x72, 0x7A, 0xB4,
9155b9c547cSRui Paulo 	0x1A, 0x11, 0xDA, 0x3A, 0x15, 0xF8, 0xE4, 0xBC,
9165b9c547cSRui Paulo 	0x11, 0xC7, 0x8B, 0x65, 0xF1, 0xCE, 0xB2, 0x96,
9175b9c547cSRui Paulo 	0xF1, 0xFE, 0xDC, 0x5F, 0x7E, 0x42, 0x45, 0x6C,
9185b9c547cSRui Paulo 	0x91, 0x11, 0x17, 0x02, 0x52, 0x01, 0xBE, 0x03,
9195b9c547cSRui Paulo 	0x89, 0xF5, 0xAB, 0xD4, 0x0D, 0x11, 0xF8, 0x63,
9205b9c547cSRui Paulo 	0x9A, 0x39, 0xFE, 0x32, 0x36, 0x75, 0x18, 0x35,
9215b9c547cSRui Paulo 	0xA5, 0xE5, 0xE4, 0x43, 0x17, 0xC1, 0xC2, 0xEE,
9225b9c547cSRui Paulo 	0xFD, 0x4E, 0xA5, 0xBF, 0xD1, 0x60, 0x43, 0xF4,
9235b9c547cSRui Paulo 	0x3C, 0xB4, 0x19, 0x81, 0xF6, 0xAD, 0xEE, 0x9D,
9245b9c547cSRui Paulo 	0x03, 0x15, 0x9E, 0x7A, 0xD9, 0xD1, 0x3C, 0x53,
9255b9c547cSRui Paulo 	0x36, 0x95, 0x09, 0xFC, 0x1F, 0xA2, 0x7C, 0x16,
9265b9c547cSRui Paulo 	0xEF, 0x98, 0x87, 0x70, 0x3A, 0x55, 0xB5, 0x1B,
9275b9c547cSRui Paulo 	0x22, 0xCB, 0xF4, 0x4C, 0xD0, 0x12, 0xAE, 0xE0,
9285b9c547cSRui Paulo 	0xB2, 0x79, 0x8E, 0x62, 0x84, 0x23, 0x42, 0x8E,
9295b9c547cSRui Paulo 	0xFC, 0xD5, 0xA4, 0x0C, 0xAE, 0xF6, 0xBF, 0x50,
9305b9c547cSRui Paulo 	0xD8, 0xEA, 0x88, 0x5E, 0xBF, 0x73, 0xA6, 0xB9,
9315b9c547cSRui Paulo 	0xFD, 0x79, 0xB5, 0xE1, 0x8F, 0x67, 0xD1, 0x34,
9325b9c547cSRui Paulo 	0x1A, 0xC8, 0x23, 0x7A, 0x75, 0xC3, 0xCF, 0xC9,
9335b9c547cSRui Paulo 	0x20, 0x04, 0xA1, 0xC5, 0xA4, 0x0E, 0x36, 0x6B,
9345b9c547cSRui Paulo 	0xC4, 0x4D, 0x00, 0x17, 0x6A, 0xF7, 0x1C, 0x15,
9355b9c547cSRui Paulo 	0xE4, 0x8C, 0x86, 0xD3, 0x7E, 0x01, 0x37, 0x23,
9365b9c547cSRui Paulo 	0xCA, 0xAC, 0x72, 0x23, 0xAB, 0x3B, 0xF4, 0xD5,
9375b9c547cSRui Paulo 	0x4F, 0x18, 0x28, 0x71, 0x3B, 0x2B, 0x4A, 0x6F,
9385b9c547cSRui Paulo 	0xE4, 0x0F, 0xAB, 0x74, 0x40, 0x5C, 0xB7, 0x38,
9395b9c547cSRui Paulo 	0xB0, 0x64, 0xC0, 0x6E, 0xCC, 0x76, 0xE9, 0xEF,
9405b9c547cSRui Paulo 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
9415b9c547cSRui Paulo };
9425b9c547cSRui Paulo 
9435b9c547cSRui Paulo /*
9445b9c547cSRui Paulo  * RFC 5114, 2.1.
9455b9c547cSRui Paulo  * Group 22 - 1024-bit MODP Group with 160-bit Prime Order Subgroup
9465b9c547cSRui Paulo  */
9475b9c547cSRui Paulo static const u8 dh_group22_generator[] = {
9485b9c547cSRui Paulo 	0xA4, 0xD1, 0xCB, 0xD5, 0xC3, 0xFD, 0x34, 0x12,
9495b9c547cSRui Paulo 	0x67, 0x65, 0xA4, 0x42, 0xEF, 0xB9, 0x99, 0x05,
9505b9c547cSRui Paulo 	0xF8, 0x10, 0x4D, 0xD2, 0x58, 0xAC, 0x50, 0x7F,
9515b9c547cSRui Paulo 	0xD6, 0x40, 0x6C, 0xFF, 0x14, 0x26, 0x6D, 0x31,
9525b9c547cSRui Paulo 	0x26, 0x6F, 0xEA, 0x1E, 0x5C, 0x41, 0x56, 0x4B,
9535b9c547cSRui Paulo 	0x77, 0x7E, 0x69, 0x0F, 0x55, 0x04, 0xF2, 0x13,
9545b9c547cSRui Paulo 	0x16, 0x02, 0x17, 0xB4, 0xB0, 0x1B, 0x88, 0x6A,
9555b9c547cSRui Paulo 	0x5E, 0x91, 0x54, 0x7F, 0x9E, 0x27, 0x49, 0xF4,
9565b9c547cSRui Paulo 	0xD7, 0xFB, 0xD7, 0xD3, 0xB9, 0xA9, 0x2E, 0xE1,
9575b9c547cSRui Paulo 	0x90, 0x9D, 0x0D, 0x22, 0x63, 0xF8, 0x0A, 0x76,
9585b9c547cSRui Paulo 	0xA6, 0xA2, 0x4C, 0x08, 0x7A, 0x09, 0x1F, 0x53,
9595b9c547cSRui Paulo 	0x1D, 0xBF, 0x0A, 0x01, 0x69, 0xB6, 0xA2, 0x8A,
9605b9c547cSRui Paulo 	0xD6, 0x62, 0xA4, 0xD1, 0x8E, 0x73, 0xAF, 0xA3,
9615b9c547cSRui Paulo 	0x2D, 0x77, 0x9D, 0x59, 0x18, 0xD0, 0x8B, 0xC8,
9625b9c547cSRui Paulo 	0x85, 0x8F, 0x4D, 0xCE, 0xF9, 0x7C, 0x2A, 0x24,
9635b9c547cSRui Paulo 	0x85, 0x5E, 0x6E, 0xEB, 0x22, 0xB3, 0xB2, 0xE5
9645b9c547cSRui Paulo };
9655b9c547cSRui Paulo static const u8 dh_group22_prime[] = {
9665b9c547cSRui Paulo 	0xB1, 0x0B, 0x8F, 0x96, 0xA0, 0x80, 0xE0, 0x1D,
9675b9c547cSRui Paulo 	0xDE, 0x92, 0xDE, 0x5E, 0xAE, 0x5D, 0x54, 0xEC,
9685b9c547cSRui Paulo 	0x52, 0xC9, 0x9F, 0xBC, 0xFB, 0x06, 0xA3, 0xC6,
9695b9c547cSRui Paulo 	0x9A, 0x6A, 0x9D, 0xCA, 0x52, 0xD2, 0x3B, 0x61,
9705b9c547cSRui Paulo 	0x60, 0x73, 0xE2, 0x86, 0x75, 0xA2, 0x3D, 0x18,
9715b9c547cSRui Paulo 	0x98, 0x38, 0xEF, 0x1E, 0x2E, 0xE6, 0x52, 0xC0,
9725b9c547cSRui Paulo 	0x13, 0xEC, 0xB4, 0xAE, 0xA9, 0x06, 0x11, 0x23,
9735b9c547cSRui Paulo 	0x24, 0x97, 0x5C, 0x3C, 0xD4, 0x9B, 0x83, 0xBF,
9745b9c547cSRui Paulo 	0xAC, 0xCB, 0xDD, 0x7D, 0x90, 0xC4, 0xBD, 0x70,
9755b9c547cSRui Paulo 	0x98, 0x48, 0x8E, 0x9C, 0x21, 0x9A, 0x73, 0x72,
9765b9c547cSRui Paulo 	0x4E, 0xFF, 0xD6, 0xFA, 0xE5, 0x64, 0x47, 0x38,
9775b9c547cSRui Paulo 	0xFA, 0xA3, 0x1A, 0x4F, 0xF5, 0x5B, 0xCC, 0xC0,
9785b9c547cSRui Paulo 	0xA1, 0x51, 0xAF, 0x5F, 0x0D, 0xC8, 0xB4, 0xBD,
9795b9c547cSRui Paulo 	0x45, 0xBF, 0x37, 0xDF, 0x36, 0x5C, 0x1A, 0x65,
9805b9c547cSRui Paulo 	0xE6, 0x8C, 0xFD, 0xA7, 0x6D, 0x4D, 0xA7, 0x08,
9815b9c547cSRui Paulo 	0xDF, 0x1F, 0xB2, 0xBC, 0x2E, 0x4A, 0x43, 0x71
9825b9c547cSRui Paulo };
9835b9c547cSRui Paulo static const u8 dh_group22_order[] = {
9845b9c547cSRui Paulo 	0xF5, 0x18, 0xAA, 0x87, 0x81, 0xA8, 0xDF, 0x27,
9855b9c547cSRui Paulo 	0x8A, 0xBA, 0x4E, 0x7D, 0x64, 0xB7, 0xCB, 0x9D,
9865b9c547cSRui Paulo 	0x49, 0x46, 0x23, 0x53
9875b9c547cSRui Paulo };
9885b9c547cSRui Paulo 
9895b9c547cSRui Paulo /*
9905b9c547cSRui Paulo  * RFC 5114, 2.2.
9915b9c547cSRui Paulo  * Group 23 - 2048-bit MODP Group with 224-bit Prime Order Subgroup
9925b9c547cSRui Paulo  */
9935b9c547cSRui Paulo static const u8 dh_group23_generator[] = {
9945b9c547cSRui Paulo 	0xAC, 0x40, 0x32, 0xEF, 0x4F, 0x2D, 0x9A, 0xE3,
9955b9c547cSRui Paulo 	0x9D, 0xF3, 0x0B, 0x5C, 0x8F, 0xFD, 0xAC, 0x50,
9965b9c547cSRui Paulo 	0x6C, 0xDE, 0xBE, 0x7B, 0x89, 0x99, 0x8C, 0xAF,
9975b9c547cSRui Paulo 	0x74, 0x86, 0x6A, 0x08, 0xCF, 0xE4, 0xFF, 0xE3,
9985b9c547cSRui Paulo 	0xA6, 0x82, 0x4A, 0x4E, 0x10, 0xB9, 0xA6, 0xF0,
9995b9c547cSRui Paulo 	0xDD, 0x92, 0x1F, 0x01, 0xA7, 0x0C, 0x4A, 0xFA,
10005b9c547cSRui Paulo 	0xAB, 0x73, 0x9D, 0x77, 0x00, 0xC2, 0x9F, 0x52,
10015b9c547cSRui Paulo 	0xC5, 0x7D, 0xB1, 0x7C, 0x62, 0x0A, 0x86, 0x52,
10025b9c547cSRui Paulo 	0xBE, 0x5E, 0x90, 0x01, 0xA8, 0xD6, 0x6A, 0xD7,
10035b9c547cSRui Paulo 	0xC1, 0x76, 0x69, 0x10, 0x19, 0x99, 0x02, 0x4A,
10045b9c547cSRui Paulo 	0xF4, 0xD0, 0x27, 0x27, 0x5A, 0xC1, 0x34, 0x8B,
10055b9c547cSRui Paulo 	0xB8, 0xA7, 0x62, 0xD0, 0x52, 0x1B, 0xC9, 0x8A,
10065b9c547cSRui Paulo 	0xE2, 0x47, 0x15, 0x04, 0x22, 0xEA, 0x1E, 0xD4,
10075b9c547cSRui Paulo 	0x09, 0x93, 0x9D, 0x54, 0xDA, 0x74, 0x60, 0xCD,
10085b9c547cSRui Paulo 	0xB5, 0xF6, 0xC6, 0xB2, 0x50, 0x71, 0x7C, 0xBE,
10095b9c547cSRui Paulo 	0xF1, 0x80, 0xEB, 0x34, 0x11, 0x8E, 0x98, 0xD1,
10105b9c547cSRui Paulo 	0x19, 0x52, 0x9A, 0x45, 0xD6, 0xF8, 0x34, 0x56,
10115b9c547cSRui Paulo 	0x6E, 0x30, 0x25, 0xE3, 0x16, 0xA3, 0x30, 0xEF,
10125b9c547cSRui Paulo 	0xBB, 0x77, 0xA8, 0x6F, 0x0C, 0x1A, 0xB1, 0x5B,
10135b9c547cSRui Paulo 	0x05, 0x1A, 0xE3, 0xD4, 0x28, 0xC8, 0xF8, 0xAC,
10145b9c547cSRui Paulo 	0xB7, 0x0A, 0x81, 0x37, 0x15, 0x0B, 0x8E, 0xEB,
10155b9c547cSRui Paulo 	0x10, 0xE1, 0x83, 0xED, 0xD1, 0x99, 0x63, 0xDD,
10165b9c547cSRui Paulo 	0xD9, 0xE2, 0x63, 0xE4, 0x77, 0x05, 0x89, 0xEF,
10175b9c547cSRui Paulo 	0x6A, 0xA2, 0x1E, 0x7F, 0x5F, 0x2F, 0xF3, 0x81,
10185b9c547cSRui Paulo 	0xB5, 0x39, 0xCC, 0xE3, 0x40, 0x9D, 0x13, 0xCD,
10195b9c547cSRui Paulo 	0x56, 0x6A, 0xFB, 0xB4, 0x8D, 0x6C, 0x01, 0x91,
10205b9c547cSRui Paulo 	0x81, 0xE1, 0xBC, 0xFE, 0x94, 0xB3, 0x02, 0x69,
10215b9c547cSRui Paulo 	0xED, 0xFE, 0x72, 0xFE, 0x9B, 0x6A, 0xA4, 0xBD,
10225b9c547cSRui Paulo 	0x7B, 0x5A, 0x0F, 0x1C, 0x71, 0xCF, 0xFF, 0x4C,
10235b9c547cSRui Paulo 	0x19, 0xC4, 0x18, 0xE1, 0xF6, 0xEC, 0x01, 0x79,
10245b9c547cSRui Paulo 	0x81, 0xBC, 0x08, 0x7F, 0x2A, 0x70, 0x65, 0xB3,
10255b9c547cSRui Paulo 	0x84, 0xB8, 0x90, 0xD3, 0x19, 0x1F, 0x2B, 0xFA
10265b9c547cSRui Paulo };
10275b9c547cSRui Paulo static const u8 dh_group23_prime[] = {
10285b9c547cSRui Paulo 	0xAD, 0x10, 0x7E, 0x1E, 0x91, 0x23, 0xA9, 0xD0,
10295b9c547cSRui Paulo 	0xD6, 0x60, 0xFA, 0xA7, 0x95, 0x59, 0xC5, 0x1F,
10305b9c547cSRui Paulo 	0xA2, 0x0D, 0x64, 0xE5, 0x68, 0x3B, 0x9F, 0xD1,
10315b9c547cSRui Paulo 	0xB5, 0x4B, 0x15, 0x97, 0xB6, 0x1D, 0x0A, 0x75,
10325b9c547cSRui Paulo 	0xE6, 0xFA, 0x14, 0x1D, 0xF9, 0x5A, 0x56, 0xDB,
10335b9c547cSRui Paulo 	0xAF, 0x9A, 0x3C, 0x40, 0x7B, 0xA1, 0xDF, 0x15,
10345b9c547cSRui Paulo 	0xEB, 0x3D, 0x68, 0x8A, 0x30, 0x9C, 0x18, 0x0E,
10355b9c547cSRui Paulo 	0x1D, 0xE6, 0xB8, 0x5A, 0x12, 0x74, 0xA0, 0xA6,
10365b9c547cSRui Paulo 	0x6D, 0x3F, 0x81, 0x52, 0xAD, 0x6A, 0xC2, 0x12,
10375b9c547cSRui Paulo 	0x90, 0x37, 0xC9, 0xED, 0xEF, 0xDA, 0x4D, 0xF8,
10385b9c547cSRui Paulo 	0xD9, 0x1E, 0x8F, 0xEF, 0x55, 0xB7, 0x39, 0x4B,
10395b9c547cSRui Paulo 	0x7A, 0xD5, 0xB7, 0xD0, 0xB6, 0xC1, 0x22, 0x07,
10405b9c547cSRui Paulo 	0xC9, 0xF9, 0x8D, 0x11, 0xED, 0x34, 0xDB, 0xF6,
10415b9c547cSRui Paulo 	0xC6, 0xBA, 0x0B, 0x2C, 0x8B, 0xBC, 0x27, 0xBE,
10425b9c547cSRui Paulo 	0x6A, 0x00, 0xE0, 0xA0, 0xB9, 0xC4, 0x97, 0x08,
10435b9c547cSRui Paulo 	0xB3, 0xBF, 0x8A, 0x31, 0x70, 0x91, 0x88, 0x36,
10445b9c547cSRui Paulo 	0x81, 0x28, 0x61, 0x30, 0xBC, 0x89, 0x85, 0xDB,
10455b9c547cSRui Paulo 	0x16, 0x02, 0xE7, 0x14, 0x41, 0x5D, 0x93, 0x30,
10465b9c547cSRui Paulo 	0x27, 0x82, 0x73, 0xC7, 0xDE, 0x31, 0xEF, 0xDC,
10475b9c547cSRui Paulo 	0x73, 0x10, 0xF7, 0x12, 0x1F, 0xD5, 0xA0, 0x74,
10485b9c547cSRui Paulo 	0x15, 0x98, 0x7D, 0x9A, 0xDC, 0x0A, 0x48, 0x6D,
10495b9c547cSRui Paulo 	0xCD, 0xF9, 0x3A, 0xCC, 0x44, 0x32, 0x83, 0x87,
10505b9c547cSRui Paulo 	0x31, 0x5D, 0x75, 0xE1, 0x98, 0xC6, 0x41, 0xA4,
10515b9c547cSRui Paulo 	0x80, 0xCD, 0x86, 0xA1, 0xB9, 0xE5, 0x87, 0xE8,
10525b9c547cSRui Paulo 	0xBE, 0x60, 0xE6, 0x9C, 0xC9, 0x28, 0xB2, 0xB9,
10535b9c547cSRui Paulo 	0xC5, 0x21, 0x72, 0xE4, 0x13, 0x04, 0x2E, 0x9B,
10545b9c547cSRui Paulo 	0x23, 0xF1, 0x0B, 0x0E, 0x16, 0xE7, 0x97, 0x63,
10555b9c547cSRui Paulo 	0xC9, 0xB5, 0x3D, 0xCF, 0x4B, 0xA8, 0x0A, 0x29,
10565b9c547cSRui Paulo 	0xE3, 0xFB, 0x73, 0xC1, 0x6B, 0x8E, 0x75, 0xB9,
10575b9c547cSRui Paulo 	0x7E, 0xF3, 0x63, 0xE2, 0xFF, 0xA3, 0x1F, 0x71,
10585b9c547cSRui Paulo 	0xCF, 0x9D, 0xE5, 0x38, 0x4E, 0x71, 0xB8, 0x1C,
10595b9c547cSRui Paulo 	0x0A, 0xC4, 0xDF, 0xFE, 0x0C, 0x10, 0xE6, 0x4F
10605b9c547cSRui Paulo };
10615b9c547cSRui Paulo static const u8 dh_group23_order[] = {
10625b9c547cSRui Paulo 	0x80, 0x1C, 0x0D, 0x34, 0xC5, 0x8D, 0x93, 0xFE,
10635b9c547cSRui Paulo 	0x99, 0x71, 0x77, 0x10, 0x1F, 0x80, 0x53, 0x5A,
10645b9c547cSRui Paulo 	0x47, 0x38, 0xCE, 0xBC, 0xBF, 0x38, 0x9A, 0x99,
10655b9c547cSRui Paulo 	0xB3, 0x63, 0x71, 0xEB
10665b9c547cSRui Paulo };
10675b9c547cSRui Paulo 
10685b9c547cSRui Paulo /*
10695b9c547cSRui Paulo  * RFC 5114, 2.3.
10705b9c547cSRui Paulo  * Group 24 - 2048-bit MODP Group with 256-bit Prime Order Subgroup
10715b9c547cSRui Paulo  */
10725b9c547cSRui Paulo static const u8 dh_group24_generator[] = {
10735b9c547cSRui Paulo 	0x3F, 0xB3, 0x2C, 0x9B, 0x73, 0x13, 0x4D, 0x0B,
10745b9c547cSRui Paulo 	0x2E, 0x77, 0x50, 0x66, 0x60, 0xED, 0xBD, 0x48,
10755b9c547cSRui Paulo 	0x4C, 0xA7, 0xB1, 0x8F, 0x21, 0xEF, 0x20, 0x54,
10765b9c547cSRui Paulo 	0x07, 0xF4, 0x79, 0x3A, 0x1A, 0x0B, 0xA1, 0x25,
10775b9c547cSRui Paulo 	0x10, 0xDB, 0xC1, 0x50, 0x77, 0xBE, 0x46, 0x3F,
10785b9c547cSRui Paulo 	0xFF, 0x4F, 0xED, 0x4A, 0xAC, 0x0B, 0xB5, 0x55,
10795b9c547cSRui Paulo 	0xBE, 0x3A, 0x6C, 0x1B, 0x0C, 0x6B, 0x47, 0xB1,
10805b9c547cSRui Paulo 	0xBC, 0x37, 0x73, 0xBF, 0x7E, 0x8C, 0x6F, 0x62,
10815b9c547cSRui Paulo 	0x90, 0x12, 0x28, 0xF8, 0xC2, 0x8C, 0xBB, 0x18,
10825b9c547cSRui Paulo 	0xA5, 0x5A, 0xE3, 0x13, 0x41, 0x00, 0x0A, 0x65,
10835b9c547cSRui Paulo 	0x01, 0x96, 0xF9, 0x31, 0xC7, 0x7A, 0x57, 0xF2,
10845b9c547cSRui Paulo 	0xDD, 0xF4, 0x63, 0xE5, 0xE9, 0xEC, 0x14, 0x4B,
10855b9c547cSRui Paulo 	0x77, 0x7D, 0xE6, 0x2A, 0xAA, 0xB8, 0xA8, 0x62,
10865b9c547cSRui Paulo 	0x8A, 0xC3, 0x76, 0xD2, 0x82, 0xD6, 0xED, 0x38,
10875b9c547cSRui Paulo 	0x64, 0xE6, 0x79, 0x82, 0x42, 0x8E, 0xBC, 0x83,
10885b9c547cSRui Paulo 	0x1D, 0x14, 0x34, 0x8F, 0x6F, 0x2F, 0x91, 0x93,
10895b9c547cSRui Paulo 	0xB5, 0x04, 0x5A, 0xF2, 0x76, 0x71, 0x64, 0xE1,
10905b9c547cSRui Paulo 	0xDF, 0xC9, 0x67, 0xC1, 0xFB, 0x3F, 0x2E, 0x55,
10915b9c547cSRui Paulo 	0xA4, 0xBD, 0x1B, 0xFF, 0xE8, 0x3B, 0x9C, 0x80,
10925b9c547cSRui Paulo 	0xD0, 0x52, 0xB9, 0x85, 0xD1, 0x82, 0xEA, 0x0A,
10935b9c547cSRui Paulo 	0xDB, 0x2A, 0x3B, 0x73, 0x13, 0xD3, 0xFE, 0x14,
10945b9c547cSRui Paulo 	0xC8, 0x48, 0x4B, 0x1E, 0x05, 0x25, 0x88, 0xB9,
10955b9c547cSRui Paulo 	0xB7, 0xD2, 0xBB, 0xD2, 0xDF, 0x01, 0x61, 0x99,
10965b9c547cSRui Paulo 	0xEC, 0xD0, 0x6E, 0x15, 0x57, 0xCD, 0x09, 0x15,
10975b9c547cSRui Paulo 	0xB3, 0x35, 0x3B, 0xBB, 0x64, 0xE0, 0xEC, 0x37,
10985b9c547cSRui Paulo 	0x7F, 0xD0, 0x28, 0x37, 0x0D, 0xF9, 0x2B, 0x52,
10995b9c547cSRui Paulo 	0xC7, 0x89, 0x14, 0x28, 0xCD, 0xC6, 0x7E, 0xB6,
11005b9c547cSRui Paulo 	0x18, 0x4B, 0x52, 0x3D, 0x1D, 0xB2, 0x46, 0xC3,
11015b9c547cSRui Paulo 	0x2F, 0x63, 0x07, 0x84, 0x90, 0xF0, 0x0E, 0xF8,
11025b9c547cSRui Paulo 	0xD6, 0x47, 0xD1, 0x48, 0xD4, 0x79, 0x54, 0x51,
11035b9c547cSRui Paulo 	0x5E, 0x23, 0x27, 0xCF, 0xEF, 0x98, 0xC5, 0x82,
11045b9c547cSRui Paulo 	0x66, 0x4B, 0x4C, 0x0F, 0x6C, 0xC4, 0x16, 0x59
11055b9c547cSRui Paulo };
11065b9c547cSRui Paulo static const u8 dh_group24_prime[] = {
11075b9c547cSRui Paulo 	0x87, 0xA8, 0xE6, 0x1D, 0xB4, 0xB6, 0x66, 0x3C,
11085b9c547cSRui Paulo 	0xFF, 0xBB, 0xD1, 0x9C, 0x65, 0x19, 0x59, 0x99,
11095b9c547cSRui Paulo 	0x8C, 0xEE, 0xF6, 0x08, 0x66, 0x0D, 0xD0, 0xF2,
11105b9c547cSRui Paulo 	0x5D, 0x2C, 0xEE, 0xD4, 0x43, 0x5E, 0x3B, 0x00,
11115b9c547cSRui Paulo 	0xE0, 0x0D, 0xF8, 0xF1, 0xD6, 0x19, 0x57, 0xD4,
11125b9c547cSRui Paulo 	0xFA, 0xF7, 0xDF, 0x45, 0x61, 0xB2, 0xAA, 0x30,
11135b9c547cSRui Paulo 	0x16, 0xC3, 0xD9, 0x11, 0x34, 0x09, 0x6F, 0xAA,
11145b9c547cSRui Paulo 	0x3B, 0xF4, 0x29, 0x6D, 0x83, 0x0E, 0x9A, 0x7C,
11155b9c547cSRui Paulo 	0x20, 0x9E, 0x0C, 0x64, 0x97, 0x51, 0x7A, 0xBD,
11165b9c547cSRui Paulo 	0x5A, 0x8A, 0x9D, 0x30, 0x6B, 0xCF, 0x67, 0xED,
11175b9c547cSRui Paulo 	0x91, 0xF9, 0xE6, 0x72, 0x5B, 0x47, 0x58, 0xC0,
11185b9c547cSRui Paulo 	0x22, 0xE0, 0xB1, 0xEF, 0x42, 0x75, 0xBF, 0x7B,
11195b9c547cSRui Paulo 	0x6C, 0x5B, 0xFC, 0x11, 0xD4, 0x5F, 0x90, 0x88,
11205b9c547cSRui Paulo 	0xB9, 0x41, 0xF5, 0x4E, 0xB1, 0xE5, 0x9B, 0xB8,
11215b9c547cSRui Paulo 	0xBC, 0x39, 0xA0, 0xBF, 0x12, 0x30, 0x7F, 0x5C,
11225b9c547cSRui Paulo 	0x4F, 0xDB, 0x70, 0xC5, 0x81, 0xB2, 0x3F, 0x76,
11235b9c547cSRui Paulo 	0xB6, 0x3A, 0xCA, 0xE1, 0xCA, 0xA6, 0xB7, 0x90,
11245b9c547cSRui Paulo 	0x2D, 0x52, 0x52, 0x67, 0x35, 0x48, 0x8A, 0x0E,
11255b9c547cSRui Paulo 	0xF1, 0x3C, 0x6D, 0x9A, 0x51, 0xBF, 0xA4, 0xAB,
11265b9c547cSRui Paulo 	0x3A, 0xD8, 0x34, 0x77, 0x96, 0x52, 0x4D, 0x8E,
11275b9c547cSRui Paulo 	0xF6, 0xA1, 0x67, 0xB5, 0xA4, 0x18, 0x25, 0xD9,
11285b9c547cSRui Paulo 	0x67, 0xE1, 0x44, 0xE5, 0x14, 0x05, 0x64, 0x25,
11295b9c547cSRui Paulo 	0x1C, 0xCA, 0xCB, 0x83, 0xE6, 0xB4, 0x86, 0xF6,
11305b9c547cSRui Paulo 	0xB3, 0xCA, 0x3F, 0x79, 0x71, 0x50, 0x60, 0x26,
11315b9c547cSRui Paulo 	0xC0, 0xB8, 0x57, 0xF6, 0x89, 0x96, 0x28, 0x56,
11325b9c547cSRui Paulo 	0xDE, 0xD4, 0x01, 0x0A, 0xBD, 0x0B, 0xE6, 0x21,
11335b9c547cSRui Paulo 	0xC3, 0xA3, 0x96, 0x0A, 0x54, 0xE7, 0x10, 0xC3,
11345b9c547cSRui Paulo 	0x75, 0xF2, 0x63, 0x75, 0xD7, 0x01, 0x41, 0x03,
11355b9c547cSRui Paulo 	0xA4, 0xB5, 0x43, 0x30, 0xC1, 0x98, 0xAF, 0x12,
11365b9c547cSRui Paulo 	0x61, 0x16, 0xD2, 0x27, 0x6E, 0x11, 0x71, 0x5F,
11375b9c547cSRui Paulo 	0x69, 0x38, 0x77, 0xFA, 0xD7, 0xEF, 0x09, 0xCA,
11385b9c547cSRui Paulo 	0xDB, 0x09, 0x4A, 0xE9, 0x1E, 0x1A, 0x15, 0x97
11395b9c547cSRui Paulo };
11405b9c547cSRui Paulo static const u8 dh_group24_order[] = {
11415b9c547cSRui Paulo 	0x8C, 0xF8, 0x36, 0x42, 0xA7, 0x09, 0xA0, 0x97,
11425b9c547cSRui Paulo 	0xB4, 0x47, 0x99, 0x76, 0x40, 0x12, 0x9D, 0xA2,
11435b9c547cSRui Paulo 	0x99, 0xB1, 0xA4, 0x7D, 0x1E, 0xB3, 0x75, 0x0B,
11445b9c547cSRui Paulo 	0xA3, 0x08, 0xB0, 0xFE, 0x64, 0xF5, 0xFB, 0xD3
11455b9c547cSRui Paulo };
114639beb93cSSam Leffler 
11473157ba21SRui Paulo #endif /* ALL_DH_GROUPS */
11483157ba21SRui Paulo 
114939beb93cSSam Leffler 
11505b9c547cSRui Paulo #define DH_GROUP(id,safe) \
115139beb93cSSam Leffler { id, dh_group ## id ## _generator, sizeof(dh_group ## id ## _generator), \
11525b9c547cSRui Paulo dh_group ## id ## _prime, sizeof(dh_group ## id ## _prime), \
11535b9c547cSRui Paulo dh_group ## id ## _order, sizeof(dh_group ## id ## _order), safe }
115439beb93cSSam Leffler 
115539beb93cSSam Leffler 
1156325151a3SRui Paulo static const struct dh_group dh_groups[] = {
11575b9c547cSRui Paulo 	DH_GROUP(5, 1),
11583157ba21SRui Paulo #ifdef ALL_DH_GROUPS
11595b9c547cSRui Paulo 	DH_GROUP(1, 1),
11605b9c547cSRui Paulo 	DH_GROUP(2, 1),
11615b9c547cSRui Paulo 	DH_GROUP(14, 1),
11625b9c547cSRui Paulo 	DH_GROUP(15, 1),
11635b9c547cSRui Paulo 	DH_GROUP(16, 1),
11645b9c547cSRui Paulo 	DH_GROUP(17, 1),
11655b9c547cSRui Paulo 	DH_GROUP(18, 1),
11665b9c547cSRui Paulo 	DH_GROUP(22, 0),
11675b9c547cSRui Paulo 	DH_GROUP(23, 0),
11685b9c547cSRui Paulo 	DH_GROUP(24, 0)
11693157ba21SRui Paulo #endif /* ALL_DH_GROUPS */
117039beb93cSSam Leffler };
117139beb93cSSam Leffler 
11725b9c547cSRui Paulo #define NUM_DH_GROUPS ARRAY_SIZE(dh_groups)
117339beb93cSSam Leffler 
117439beb93cSSam Leffler 
dh_groups_get(int id)117539beb93cSSam Leffler const struct dh_group * dh_groups_get(int id)
117639beb93cSSam Leffler {
117739beb93cSSam Leffler 	size_t i;
117839beb93cSSam Leffler 
117939beb93cSSam Leffler 	for (i = 0; i < NUM_DH_GROUPS; i++) {
118039beb93cSSam Leffler 		if (dh_groups[i].id == id)
118139beb93cSSam Leffler 			return &dh_groups[i];
118239beb93cSSam Leffler 	}
118339beb93cSSam Leffler 	return NULL;
118439beb93cSSam Leffler }
118539beb93cSSam Leffler 
118639beb93cSSam Leffler 
118739beb93cSSam Leffler /**
118839beb93cSSam Leffler  * dh_init - Initialize Diffie-Hellman handshake
118939beb93cSSam Leffler  * @dh: Selected Diffie-Hellman group
119039beb93cSSam Leffler  * @priv: Pointer for returning Diffie-Hellman private key
119139beb93cSSam Leffler  * Returns: Diffie-Hellman public value
119239beb93cSSam Leffler  */
dh_init(const struct dh_group * dh,struct wpabuf ** priv)119339beb93cSSam Leffler struct wpabuf * dh_init(const struct dh_group *dh, struct wpabuf **priv)
119439beb93cSSam Leffler {
119539beb93cSSam Leffler 	struct wpabuf *pv;
119639beb93cSSam Leffler 	size_t pv_len;
119739beb93cSSam Leffler 
119839beb93cSSam Leffler 	if (dh == NULL)
119939beb93cSSam Leffler 		return NULL;
120039beb93cSSam Leffler 
12015b9c547cSRui Paulo 	wpabuf_clear_free(*priv);
120239beb93cSSam Leffler 	*priv = wpabuf_alloc(dh->prime_len);
120339beb93cSSam Leffler 	if (*priv == NULL)
120439beb93cSSam Leffler 		return NULL;
120539beb93cSSam Leffler 
120639beb93cSSam Leffler 	pv_len = dh->prime_len;
120739beb93cSSam Leffler 	pv = wpabuf_alloc(pv_len);
1208780fb4a2SCy Schubert 	if (pv == NULL) {
1209780fb4a2SCy Schubert 		wpabuf_clear_free(*priv);
1210780fb4a2SCy Schubert 		*priv = NULL;
121139beb93cSSam Leffler 		return NULL;
1212780fb4a2SCy Schubert 	}
121385732ac8SCy Schubert 	if (crypto_dh_init(*dh->generator, dh->prime, dh->prime_len,
121485732ac8SCy Schubert 			   wpabuf_mhead(*priv), wpabuf_mhead(pv)) < 0) {
12155b9c547cSRui Paulo 		wpabuf_clear_free(pv);
121685732ac8SCy Schubert 		wpa_printf(MSG_INFO, "DH: crypto_dh_init failed");
1217780fb4a2SCy Schubert 		wpabuf_clear_free(*priv);
1218780fb4a2SCy Schubert 		*priv = NULL;
121939beb93cSSam Leffler 		return NULL;
122039beb93cSSam Leffler 	}
122185732ac8SCy Schubert 	wpabuf_put(*priv, dh->prime_len);
122285732ac8SCy Schubert 	wpabuf_put(pv, dh->prime_len);
122385732ac8SCy Schubert 	wpa_hexdump_buf_key(MSG_DEBUG, "DH: private value", *priv);
122439beb93cSSam Leffler 	wpa_hexdump_buf(MSG_DEBUG, "DH: public value", pv);
122539beb93cSSam Leffler 
122639beb93cSSam Leffler 	return pv;
122739beb93cSSam Leffler }
122839beb93cSSam Leffler 
122939beb93cSSam Leffler 
123039beb93cSSam Leffler /**
123139beb93cSSam Leffler  * dh_derive_shared - Derive shared Diffie-Hellman key
123239beb93cSSam Leffler  * @peer_public: Diffie-Hellman public value from peer
123339beb93cSSam Leffler  * @own_private: Diffie-Hellman private key from dh_init()
123439beb93cSSam Leffler  * @dh: Selected Diffie-Hellman group
123539beb93cSSam Leffler  * Returns: Diffie-Hellman shared key
123639beb93cSSam Leffler  */
dh_derive_shared(const struct wpabuf * peer_public,const struct wpabuf * own_private,const struct dh_group * dh)123739beb93cSSam Leffler struct wpabuf * dh_derive_shared(const struct wpabuf *peer_public,
123839beb93cSSam Leffler 				 const struct wpabuf *own_private,
123939beb93cSSam Leffler 				 const struct dh_group *dh)
124039beb93cSSam Leffler {
124139beb93cSSam Leffler 	struct wpabuf *shared;
124239beb93cSSam Leffler 	size_t shared_len;
124339beb93cSSam Leffler 
124439beb93cSSam Leffler 	if (dh == NULL || peer_public == NULL || own_private == NULL)
124539beb93cSSam Leffler 		return NULL;
124639beb93cSSam Leffler 
124739beb93cSSam Leffler 	shared_len = dh->prime_len;
124839beb93cSSam Leffler 	shared = wpabuf_alloc(shared_len);
124939beb93cSSam Leffler 	if (shared == NULL)
125039beb93cSSam Leffler 		return NULL;
125185732ac8SCy Schubert 	if (crypto_dh_derive_secret(*dh->generator, dh->prime, dh->prime_len,
1252*4bc52338SCy Schubert 				    dh->order, dh->order_len,
125385732ac8SCy Schubert 				    wpabuf_head(own_private),
125485732ac8SCy Schubert 				    wpabuf_len(own_private),
125585732ac8SCy Schubert 				    wpabuf_head(peer_public),
125685732ac8SCy Schubert 				    wpabuf_len(peer_public),
1257e28a4053SRui Paulo 				    wpabuf_mhead(shared), &shared_len) < 0) {
12585b9c547cSRui Paulo 		wpabuf_clear_free(shared);
125985732ac8SCy Schubert 		wpa_printf(MSG_INFO, "DH: crypto_dh_derive_secret failed");
126039beb93cSSam Leffler 		return NULL;
126139beb93cSSam Leffler 	}
1262e28a4053SRui Paulo 	wpabuf_put(shared, shared_len);
126339beb93cSSam Leffler 	wpa_hexdump_buf_key(MSG_DEBUG, "DH: shared key", shared);
126439beb93cSSam Leffler 
126539beb93cSSam Leffler 	return shared;
126639beb93cSSam Leffler }
1267