18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Diffie-Hellman groups
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2007, Jouni Malinen <j@w1.fi>
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details.
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "includes.h"
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "common.h"
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "crypto.h"
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "random.h"
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "dh_groups.h"
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef ALL_DH_GROUPS
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 4306, B.1. Group 1 - 768 Bit MODP
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 }
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group1_generator[1] = { 0x02 };
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group1_prime[96] = {
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x3A, 0x36, 0x20,
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
38a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group1_order[96] = {
39a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
40a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
41a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
42a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
43a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
44a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
45a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
46a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
47a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
48a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
49a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1D, 0x1B, 0x10,
50a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
51a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 4306, B.2. Group 2 - 1024 Bit MODP
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 }
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group2_generator[1] = { 0x02 };
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group2_prime[128] = {
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81,
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
76a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group2_order[128] = {
77a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
78a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
79a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
80a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
81a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
82a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
83a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
84a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
85a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
86a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
87a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
88a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
89a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
90a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
91a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x24, 0x94, 0x33, 0x28, 0xF6, 0x73, 0x29, 0xC0,
92a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
93a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* ALL_DH_GROUPS */
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 2. Group 5 - 1536 Bit MODP
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 pi] + 741804 }
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group5_generator[1] = { 0x02 };
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group5_prime[192] = {
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x23, 0x73, 0x27,
1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
128a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group5_order[192] = {
129a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
130a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
131a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
132a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
133a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
134a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
135a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
136a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
137a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
138a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
139a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
140a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
141a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
142a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
143a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
144a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
145a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
146a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
147a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
148a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
149a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
150a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
151a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x78, 0xBA, 0x36, 0x04, 0x65, 0x11, 0xB9, 0x93,
152a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
153a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef ALL_DH_GROUPS
1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 3. Group 14 - 2048 Bit MODP
1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2
1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^2048 - 2^1984 - 1 + 2^64 * { [2^1918 pi] + 124476 }
1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group14_generator[1] = { 0x02 };
1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group14_prime[256] = {
1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68,
1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
196a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group14_order[256] = {
197a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
198a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
199a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
200a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
201a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
202a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
203a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
204a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
205a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
206a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
207a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
208a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
209a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
210a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
211a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
212a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
213a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
214a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
215a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
216a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
217a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
218a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
219a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
220a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
221a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
222a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
223a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
224a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
225a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
226a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
227a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x56, 0x55, 0x34,
228a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
229a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 4. Group 15 - 3072 Bit MODP
2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2
2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^3072 - 2^3008 - 1 + 2^64 * { [2^2942 pi] + 1690314 }
2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group15_generator[1] = { 0x02 };
2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group15_prime[384] = {
2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x3A, 0xD2, 0xCA,
2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
286a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group15_order[384] = {
287a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
288a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
289a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
290a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
291a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
292a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
293a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
294a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
295a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
296a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
297a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
298a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
299a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
300a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
301a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
302a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
303a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
304a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
305a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
306a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
307a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
308a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
309a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
310a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
311a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
312a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
313a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
314a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
315a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
316a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
317a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x55, 0x62, 0x16,
318a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD6, 0x99, 0x8B, 0x86, 0x82, 0x28, 0x3D, 0x19,
319a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD4, 0x2A, 0x90, 0xD5, 0xEF, 0x8E, 0x5D, 0x32,
320a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x76, 0x7D, 0xC2, 0x82, 0x2C, 0x6D, 0xF7, 0x85,
321a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x45, 0x75, 0x38, 0xAB, 0xAE, 0x83, 0x06, 0x3E,
322a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD9, 0xCB, 0x87, 0xC2, 0xD3, 0x70, 0xF2, 0x63,
323a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD5, 0xFA, 0xD7, 0x46, 0x6D, 0x84, 0x99, 0xEB,
324a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8F, 0x46, 0x4A, 0x70, 0x25, 0x12, 0xB0, 0xCE,
325a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE7, 0x71, 0xE9, 0x13, 0x0D, 0x69, 0x77, 0x35,
326a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF8, 0x97, 0xFD, 0x03, 0x6C, 0xC5, 0x04, 0x32,
327a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6C, 0x3B, 0x01, 0x39, 0x9F, 0x64, 0x35, 0x32,
328a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x29, 0x0F, 0x95, 0x8C, 0x0B, 0xBD, 0x90, 0x06,
329a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5D, 0xF0, 0x8B, 0xAB, 0xBD, 0x30, 0xAE, 0xB6,
330a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x3B, 0x84, 0xC4, 0x60, 0x5D, 0x6C, 0xA3, 0x71,
331a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x04, 0x71, 0x27, 0xD0, 0x3A, 0x72, 0xD5, 0x98,
332a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA1, 0xED, 0xAD, 0xFE, 0x70, 0x7E, 0x88, 0x47,
333a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x25, 0xC1, 0x68, 0x90, 0x54, 0x9D, 0x69, 0x65,
334a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
335a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 5. Group 16 - 4096 Bit MODP
3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2
3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 }
3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group16_generator[1] = { 0x02 };
3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group16_prime[512] = {
3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
3508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
3558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
3638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
3918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
3928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
3938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
3948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
3958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
3968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x06, 0x31, 0x99,
4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
408a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group16_order[512] = {
409a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
410a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
411a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
412a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
413a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
414a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
415a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
416a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
417a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
418a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
419a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
420a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
421a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
422a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
423a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
424a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
425a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
426a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
427a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
428a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
429a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
430a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
431a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
432a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
433a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
434a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
435a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
436a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
437a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
438a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
439a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x55, 0x62, 0x16,
440a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD6, 0x99, 0x8B, 0x86, 0x82, 0x28, 0x3D, 0x19,
441a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD4, 0x2A, 0x90, 0xD5, 0xEF, 0x8E, 0x5D, 0x32,
442a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x76, 0x7D, 0xC2, 0x82, 0x2C, 0x6D, 0xF7, 0x85,
443a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x45, 0x75, 0x38, 0xAB, 0xAE, 0x83, 0x06, 0x3E,
444a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD9, 0xCB, 0x87, 0xC2, 0xD3, 0x70, 0xF2, 0x63,
445a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD5, 0xFA, 0xD7, 0x46, 0x6D, 0x84, 0x99, 0xEB,
446a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8F, 0x46, 0x4A, 0x70, 0x25, 0x12, 0xB0, 0xCE,
447a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE7, 0x71, 0xE9, 0x13, 0x0D, 0x69, 0x77, 0x35,
448a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF8, 0x97, 0xFD, 0x03, 0x6C, 0xC5, 0x04, 0x32,
449a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6C, 0x3B, 0x01, 0x39, 0x9F, 0x64, 0x35, 0x32,
450a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x29, 0x0F, 0x95, 0x8C, 0x0B, 0xBD, 0x90, 0x06,
451a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5D, 0xF0, 0x8B, 0xAB, 0xBD, 0x30, 0xAE, 0xB6,
452a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x3B, 0x84, 0xC4, 0x60, 0x5D, 0x6C, 0xA3, 0x71,
453a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x04, 0x71, 0x27, 0xD0, 0x3A, 0x72, 0xD5, 0x98,
454a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA1, 0xED, 0xAD, 0xFE, 0x70, 0x7E, 0x88, 0x47,
455a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x25, 0xC1, 0x68, 0x90, 0x54, 0x90, 0x84, 0x00,
456a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8D, 0x39, 0x1E, 0x09, 0x53, 0xC3, 0xF3, 0x6B,
457a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC4, 0x38, 0xCD, 0x08, 0x5E, 0xDD, 0x2D, 0x93,
458a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x4C, 0xE1, 0x93, 0x8C, 0x35, 0x7A, 0x71, 0x1E,
459a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0D, 0x4A, 0x34, 0x1A, 0x5B, 0x0A, 0x85, 0xED,
460a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x12, 0xC1, 0xF4, 0xE5, 0x15, 0x6A, 0x26, 0x74,
461a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6D, 0xDD, 0xE1, 0x6D, 0x82, 0x6F, 0x47, 0x7C,
462a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x97, 0x47, 0x7E, 0x0A, 0x0F, 0xDF, 0x65, 0x53,
463a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x14, 0x3E, 0x2C, 0xA3, 0xA7, 0x35, 0xE0, 0x2E,
464a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCC, 0xD9, 0x4B, 0x27, 0xD0, 0x48, 0x61, 0xD1,
465a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x11, 0x9D, 0xD0, 0xC3, 0x28, 0xAD, 0xF3, 0xF6,
466a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8F, 0xB0, 0x94, 0xB8, 0x67, 0x71, 0x6B, 0xD7,
467a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDC, 0x0D, 0xEE, 0xBB, 0x10, 0xB8, 0x24, 0x0E,
468a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x68, 0x03, 0x48, 0x93, 0xEA, 0xD8, 0x2D, 0x54,
469a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC9, 0xDA, 0x75, 0x4C, 0x46, 0xC7, 0xEE, 0xE0,
470a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC3, 0x7F, 0xDB, 0xEE, 0x48, 0x53, 0x60, 0x47,
471a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA6, 0xFA, 0x1A, 0xE4, 0x9A, 0x03, 0x18, 0xCC,
472a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
473a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
4748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 6. Group 17 - 6144 Bit MODP
4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2
4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^6144 - 2^6080 - 1 + 2^64 * { [2^6014 pi] + 929484 }
4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group17_generator[1] = { 0x02 };
4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group17_prime[768] = {
4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
5138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
5198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92,
5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26,
5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE,
5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD,
5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E,
5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE,
5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31,
5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18,
5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED,
5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B,
5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B,
5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42,
5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF,
5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC,
5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03,
5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6,
5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82,
5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E,
5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3,
5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE,
5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5,
5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA,
5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8,
5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0,
5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28,
5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76,
5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0,
5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C,
5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32,
5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68,
5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE,
5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6,
5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xCC, 0x40, 0x24,
5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
578a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group17_order[768] = {
579a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
580a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
581a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
582a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
583a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
584a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
585a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
586a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
587a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
588a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
589a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
590a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
591a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
592a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
593a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
594a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
595a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
596a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
597a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
598a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
599a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
600a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
601a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
602a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
603a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
604a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
605a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
606a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
607a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
608a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
609a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x55, 0x62, 0x16,
610a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD6, 0x99, 0x8B, 0x86, 0x82, 0x28, 0x3D, 0x19,
611a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD4, 0x2A, 0x90, 0xD5, 0xEF, 0x8E, 0x5D, 0x32,
612a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x76, 0x7D, 0xC2, 0x82, 0x2C, 0x6D, 0xF7, 0x85,
613a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x45, 0x75, 0x38, 0xAB, 0xAE, 0x83, 0x06, 0x3E,
614a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD9, 0xCB, 0x87, 0xC2, 0xD3, 0x70, 0xF2, 0x63,
615a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD5, 0xFA, 0xD7, 0x46, 0x6D, 0x84, 0x99, 0xEB,
616a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8F, 0x46, 0x4A, 0x70, 0x25, 0x12, 0xB0, 0xCE,
617a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE7, 0x71, 0xE9, 0x13, 0x0D, 0x69, 0x77, 0x35,
618a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF8, 0x97, 0xFD, 0x03, 0x6C, 0xC5, 0x04, 0x32,
619a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6C, 0x3B, 0x01, 0x39, 0x9F, 0x64, 0x35, 0x32,
620a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x29, 0x0F, 0x95, 0x8C, 0x0B, 0xBD, 0x90, 0x06,
621a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5D, 0xF0, 0x8B, 0xAB, 0xBD, 0x30, 0xAE, 0xB6,
622a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x3B, 0x84, 0xC4, 0x60, 0x5D, 0x6C, 0xA3, 0x71,
623a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x04, 0x71, 0x27, 0xD0, 0x3A, 0x72, 0xD5, 0x98,
624a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA1, 0xED, 0xAD, 0xFE, 0x70, 0x7E, 0x88, 0x47,
625a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x25, 0xC1, 0x68, 0x90, 0x54, 0x90, 0x84, 0x00,
626a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8D, 0x39, 0x1E, 0x09, 0x53, 0xC3, 0xF3, 0x6B,
627a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC4, 0x38, 0xCD, 0x08, 0x5E, 0xDD, 0x2D, 0x93,
628a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x4C, 0xE1, 0x93, 0x8C, 0x35, 0x7A, 0x71, 0x1E,
629a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0D, 0x4A, 0x34, 0x1A, 0x5B, 0x0A, 0x85, 0xED,
630a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x12, 0xC1, 0xF4, 0xE5, 0x15, 0x6A, 0x26, 0x74,
631a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6D, 0xDD, 0xE1, 0x6D, 0x82, 0x6F, 0x47, 0x7C,
632a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x97, 0x47, 0x7E, 0x0A, 0x0F, 0xDF, 0x65, 0x53,
633a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x14, 0x3E, 0x2C, 0xA3, 0xA7, 0x35, 0xE0, 0x2E,
634a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCC, 0xD9, 0x4B, 0x27, 0xD0, 0x48, 0x61, 0xD1,
635a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x11, 0x9D, 0xD0, 0xC3, 0x28, 0xAD, 0xF3, 0xF6,
636a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8F, 0xB0, 0x94, 0xB8, 0x67, 0x71, 0x6B, 0xD7,
637a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDC, 0x0D, 0xEE, 0xBB, 0x10, 0xB8, 0x24, 0x0E,
638a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x68, 0x03, 0x48, 0x93, 0xEA, 0xD8, 0x2D, 0x54,
639a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC9, 0xDA, 0x75, 0x4C, 0x46, 0xC7, 0xEE, 0xE0,
640a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC3, 0x7F, 0xDB, 0xEE, 0x48, 0x53, 0x60, 0x47,
641a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA6, 0xFA, 0x1A, 0xE4, 0x9A, 0x01, 0x42, 0x49,
642a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1B, 0x61, 0xFD, 0x5A, 0x69, 0x3E, 0x38, 0x13,
643a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x60, 0xEA, 0x6E, 0x59, 0x30, 0x13, 0x23, 0x6F,
644a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x64, 0xBA, 0x8F, 0x3B, 0x1E, 0xDD, 0x1B, 0xDE,
645a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFC, 0x7F, 0xCA, 0x03, 0x56, 0xCF, 0x29, 0x87,
646a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x72, 0xED, 0x9C, 0x17, 0xA0, 0x98, 0x00, 0xD7,
647a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x58, 0x35, 0x29, 0xF6, 0xC8, 0x13, 0xEC, 0x18,
648a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8B, 0xCB, 0x93, 0xD8, 0x43, 0x2D, 0x44, 0x8C,
649a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6D, 0x1F, 0x6D, 0xF5, 0xE7, 0xCD, 0x8A, 0x76,
650a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA2, 0x67, 0x36, 0x5D, 0x67, 0x6A, 0x5D, 0x8D,
651a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xED, 0xBF, 0x8A, 0x23, 0xF3, 0x66, 0x12, 0xA5,
652a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x99, 0x90, 0x28, 0xA8, 0x95, 0xEB, 0xD7, 0xA1,
653a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x37, 0xDC, 0x7A, 0x00, 0x9B, 0xC6, 0x69, 0x5F,
654a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xAC, 0xC1, 0xE5, 0x00, 0xE3, 0x25, 0xC9, 0x76,
655a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x78, 0x19, 0x75, 0x0A, 0xE8, 0xB9, 0x0E, 0x81,
656a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFA, 0x41, 0x6B, 0xE7, 0x37, 0x3A, 0x7F, 0x7B,
657a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6A, 0xAF, 0x38, 0x17, 0xA3, 0x4C, 0x06, 0x41,
658a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5A, 0xD4, 0x20, 0x18, 0xC8, 0x05, 0x8E, 0x4F,
659a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x2C, 0xF3, 0xE4, 0xBF, 0xDF, 0x63, 0xF4, 0x79,
660a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x91, 0xD4, 0xBD, 0x3F, 0x1B, 0x66, 0x44, 0x5F,
661a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x07, 0x8E, 0xA2, 0xDB, 0xFF, 0xAC, 0x2D, 0x62,
662a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA5, 0xEA, 0x03, 0xD9, 0x15, 0xA0, 0xAA, 0x55,
663a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x66, 0x47, 0xB6, 0xBF, 0x5F, 0xA4, 0x70, 0xEC,
664a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0A, 0x66, 0x2F, 0x69, 0x07, 0xC0, 0x1B, 0xF0,
665a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x53, 0xCB, 0x8A, 0xF7, 0x79, 0x4D, 0xF1, 0x94,
666a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x03, 0x50, 0xEA, 0xC5, 0xDB, 0xE2, 0xED, 0x3B,
667a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0xA8, 0x55, 0x1E, 0xC5, 0x0F, 0xDF, 0xF8,
668a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x75, 0x8C, 0xE6, 0x58, 0xD1, 0x89, 0xEA, 0xAE,
669a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6D, 0x2B, 0x64, 0xF6, 0x17, 0x79, 0x4B, 0x19,
670a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1C, 0x3F, 0xF4, 0x6B, 0xB7, 0x1E, 0x02, 0x34,
671a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x02, 0x1F, 0x47, 0xB3, 0x1F, 0xA4, 0x30, 0x77,
672a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x09, 0x5F, 0x96, 0xAD, 0x85, 0xBA, 0x3A, 0x6B,
673a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x73, 0x4A, 0x7C, 0x8F, 0x36, 0xE6, 0x20, 0x12,
674a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
675a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
6768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 7. Group 18 - 8192 Bit MODP
6788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2
6798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^8192 - 2^8128 - 1 + 2^64 * { [2^8062 pi] + 4743158 }
6808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
6818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group18_generator[1] = { 0x02 };
6828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group18_prime[1024] = {
6838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
6848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
6858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
6868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
6878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
6888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
6898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
6908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
6918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
6928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
6938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
6948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
6958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
6968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
6978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
6988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
6998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
7008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
7018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
7028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
7038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
7048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
7058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
7068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
7078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
7088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
7098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
7108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
7118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
7128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
7138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
7148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
7158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
7168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
7178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
7188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
7198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
7208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
7218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
7228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
7238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
7248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
7258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
7268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
7278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
7288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
7298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
7308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
7318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
7328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
7338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
7348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
7358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
7368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
7378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
7388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
7398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
7408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
7418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
7428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
7438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
7448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
7458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92,
7468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26,
7478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE,
7488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD,
7498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E,
7508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE,
7518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31,
7528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18,
7538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED,
7548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B,
7558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B,
7568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42,
7578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF,
7588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC,
7598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03,
7608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6,
7618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82,
7628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E,
7638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3,
7648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE,
7658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5,
7668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA,
7678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8,
7688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0,
7698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28,
7708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76,
7718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0,
7728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C,
7738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32,
7748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68,
7758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE,
7768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6,
7778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xBE, 0x11, 0x59,
7788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x74, 0xA3, 0x92, 0x6F, 0x12, 0xFE, 0xE5, 0xE4,
7798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x38, 0x77, 0x7C, 0xB6, 0xA9, 0x32, 0xDF, 0x8C,
7808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xD8, 0xBE, 0xC4, 0xD0, 0x73, 0xB9, 0x31, 0xBA,
7818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x3B, 0xC8, 0x32, 0xB6, 0x8D, 0x9D, 0xD3, 0x00,
7828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x74, 0x1F, 0xA7, 0xBF, 0x8A, 0xFC, 0x47, 0xED,
7838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x25, 0x76, 0xF6, 0x93, 0x6B, 0xA4, 0x24, 0x66,
7848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x3A, 0xAB, 0x63, 0x9C, 0x5A, 0xE4, 0xF5, 0x68,
7858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x34, 0x23, 0xB4, 0x74, 0x2B, 0xF1, 0xC9, 0x78,
7868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x23, 0x8F, 0x16, 0xCB, 0xE3, 0x9D, 0x65, 0x2D,
7878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xE3, 0xFD, 0xB8, 0xBE, 0xFC, 0x84, 0x8A, 0xD9,
7888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x22, 0x22, 0x2E, 0x04, 0xA4, 0x03, 0x7C, 0x07,
7898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x13, 0xEB, 0x57, 0xA8, 0x1A, 0x23, 0xF0, 0xC7,
7908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x34, 0x73, 0xFC, 0x64, 0x6C, 0xEA, 0x30, 0x6B,
7918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x4B, 0xCB, 0xC8, 0x86, 0x2F, 0x83, 0x85, 0xDD,
7928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFA, 0x9D, 0x4B, 0x7F, 0xA2, 0xC0, 0x87, 0xE8,
7938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x79, 0x68, 0x33, 0x03, 0xED, 0x5B, 0xDD, 0x3A,
7948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x06, 0x2B, 0x3C, 0xF5, 0xB3, 0xA2, 0x78, 0xA6,
7958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x6D, 0x2A, 0x13, 0xF8, 0x3F, 0x44, 0xF8, 0x2D,
7968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xDF, 0x31, 0x0E, 0xE0, 0x74, 0xAB, 0x6A, 0x36,
7978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x45, 0x97, 0xE8, 0x99, 0xA0, 0x25, 0x5D, 0xC1,
7988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x64, 0xF3, 0x1C, 0xC5, 0x08, 0x46, 0x85, 0x1D,
7998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xF9, 0xAB, 0x48, 0x19, 0x5D, 0xED, 0x7E, 0xA1,
8008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xB1, 0xD5, 0x10, 0xBD, 0x7E, 0xE7, 0x4D, 0x73,
8018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFA, 0xF3, 0x6B, 0xC3, 0x1E, 0xCF, 0xA2, 0x68,
8028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x35, 0x90, 0x46, 0xF4, 0xEB, 0x87, 0x9F, 0x92,
8038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x40, 0x09, 0x43, 0x8B, 0x48, 0x1C, 0x6C, 0xD7,
8048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x88, 0x9A, 0x00, 0x2E, 0xD5, 0xEE, 0x38, 0x2B,
8058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC9, 0x19, 0x0D, 0xA6, 0xFC, 0x02, 0x6E, 0x47,
8068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x95, 0x58, 0xE4, 0x47, 0x56, 0x77, 0xE9, 0xAA,
8078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x9E, 0x30, 0x50, 0xE2, 0x76, 0x56, 0x94, 0xDF,
8088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xC8, 0x1F, 0x56, 0xE8, 0x80, 0xB9, 0x6E, 0x71,
8098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0x60, 0xC9, 0x80, 0xDD, 0x98, 0xED, 0xD3, 0xDF,
8108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
8118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
812a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group18_order[1024] = {
813a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
814a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x87, 0xED, 0x51, 0x10, 0xB4, 0x61, 0x1A,
815a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x62, 0x63, 0x31, 0x45, 0xC0, 0x6E, 0x0E, 0x68,
816a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x94, 0x81, 0x27, 0x04, 0x45, 0x33, 0xE6, 0x3A,
817a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x01, 0x05, 0xDF, 0x53, 0x1D, 0x89, 0xCD, 0x91,
818a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x28, 0xA5, 0x04, 0x3C, 0xC7, 0x1A, 0x02, 0x6E,
819a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0xCA, 0x8C, 0xD9, 0xE6, 0x9D, 0x21, 0x8D,
820a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x15, 0x85, 0x36, 0xF9, 0x2F, 0x8A, 0x1B,
821a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA7, 0xF0, 0x9A, 0xB6, 0xB6, 0xA8, 0xE1, 0x22,
822a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF2, 0x42, 0xDA, 0xBB, 0x31, 0x2F, 0x3F, 0x63,
823a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0x26, 0x21, 0x74, 0xD3, 0x1B, 0xF6, 0xB5,
824a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x85, 0xFF, 0xAE, 0x5B, 0x7A, 0x03, 0x5B, 0xF6,
825a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF7, 0x1C, 0x35, 0xFD, 0xAD, 0x44, 0xCF, 0xD2,
826a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD7, 0x4F, 0x92, 0x08, 0xBE, 0x25, 0x8F, 0xF3,
827a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x24, 0x94, 0x33, 0x28, 0xF6, 0x72, 0x2D, 0x9E,
828a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE1, 0x00, 0x3E, 0x5C, 0x50, 0xB1, 0xDF, 0x82,
829a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCC, 0x6D, 0x24, 0x1B, 0x0E, 0x2A, 0xE9, 0xCD,
830a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x34, 0x8B, 0x1F, 0xD4, 0x7E, 0x92, 0x67, 0xAF,
831a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC1, 0xB2, 0xAE, 0x91, 0xEE, 0x51, 0xD6, 0xCB,
832a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0E, 0x31, 0x79, 0xAB, 0x10, 0x42, 0xA9, 0x5D,
833a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCF, 0x6A, 0x94, 0x83, 0xB8, 0x4B, 0x4B, 0x36,
834a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0x86, 0x1A, 0xA7, 0x25, 0x5E, 0x4C, 0x02,
835a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x78, 0xBA, 0x36, 0x04, 0x65, 0x0C, 0x10, 0xBE,
836a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x19, 0x48, 0x2F, 0x23, 0x17, 0x1B, 0x67, 0x1D,
837a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF1, 0xCF, 0x3B, 0x96, 0x0C, 0x07, 0x43, 0x01,
838a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCD, 0x93, 0xC1, 0xD1, 0x76, 0x03, 0xD1, 0x47,
839a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDA, 0xE2, 0xAE, 0xF8, 0x37, 0xA6, 0x29, 0x64,
840a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xEF, 0x15, 0xE5, 0xFB, 0x4A, 0xAC, 0x0B, 0x8C,
841a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1C, 0xCA, 0xA4, 0xBE, 0x75, 0x4A, 0xB5, 0x72,
842a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8A, 0xE9, 0x13, 0x0C, 0x4C, 0x7D, 0x02, 0x88,
843a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0A, 0xB9, 0x47, 0x2D, 0x45, 0x55, 0x62, 0x16,
844a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD6, 0x99, 0x8B, 0x86, 0x82, 0x28, 0x3D, 0x19,
845a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD4, 0x2A, 0x90, 0xD5, 0xEF, 0x8E, 0x5D, 0x32,
846a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x76, 0x7D, 0xC2, 0x82, 0x2C, 0x6D, 0xF7, 0x85,
847a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x45, 0x75, 0x38, 0xAB, 0xAE, 0x83, 0x06, 0x3E,
848a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD9, 0xCB, 0x87, 0xC2, 0xD3, 0x70, 0xF2, 0x63,
849a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD5, 0xFA, 0xD7, 0x46, 0x6D, 0x84, 0x99, 0xEB,
850a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8F, 0x46, 0x4A, 0x70, 0x25, 0x12, 0xB0, 0xCE,
851a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE7, 0x71, 0xE9, 0x13, 0x0D, 0x69, 0x77, 0x35,
852a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF8, 0x97, 0xFD, 0x03, 0x6C, 0xC5, 0x04, 0x32,
853a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6C, 0x3B, 0x01, 0x39, 0x9F, 0x64, 0x35, 0x32,
854a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x29, 0x0F, 0x95, 0x8C, 0x0B, 0xBD, 0x90, 0x06,
855a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5D, 0xF0, 0x8B, 0xAB, 0xBD, 0x30, 0xAE, 0xB6,
856a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x3B, 0x84, 0xC4, 0x60, 0x5D, 0x6C, 0xA3, 0x71,
857a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x04, 0x71, 0x27, 0xD0, 0x3A, 0x72, 0xD5, 0x98,
858a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA1, 0xED, 0xAD, 0xFE, 0x70, 0x7E, 0x88, 0x47,
859a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x25, 0xC1, 0x68, 0x90, 0x54, 0x90, 0x84, 0x00,
860a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8D, 0x39, 0x1E, 0x09, 0x53, 0xC3, 0xF3, 0x6B,
861a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC4, 0x38, 0xCD, 0x08, 0x5E, 0xDD, 0x2D, 0x93,
862a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x4C, 0xE1, 0x93, 0x8C, 0x35, 0x7A, 0x71, 0x1E,
863a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0D, 0x4A, 0x34, 0x1A, 0x5B, 0x0A, 0x85, 0xED,
864a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x12, 0xC1, 0xF4, 0xE5, 0x15, 0x6A, 0x26, 0x74,
865a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6D, 0xDD, 0xE1, 0x6D, 0x82, 0x6F, 0x47, 0x7C,
866a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x97, 0x47, 0x7E, 0x0A, 0x0F, 0xDF, 0x65, 0x53,
867a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x14, 0x3E, 0x2C, 0xA3, 0xA7, 0x35, 0xE0, 0x2E,
868a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCC, 0xD9, 0x4B, 0x27, 0xD0, 0x48, 0x61, 0xD1,
869a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x11, 0x9D, 0xD0, 0xC3, 0x28, 0xAD, 0xF3, 0xF6,
870a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8F, 0xB0, 0x94, 0xB8, 0x67, 0x71, 0x6B, 0xD7,
871a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDC, 0x0D, 0xEE, 0xBB, 0x10, 0xB8, 0x24, 0x0E,
872a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x68, 0x03, 0x48, 0x93, 0xEA, 0xD8, 0x2D, 0x54,
873a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC9, 0xDA, 0x75, 0x4C, 0x46, 0xC7, 0xEE, 0xE0,
874a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC3, 0x7F, 0xDB, 0xEE, 0x48, 0x53, 0x60, 0x47,
875a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA6, 0xFA, 0x1A, 0xE4, 0x9A, 0x01, 0x42, 0x49,
876a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1B, 0x61, 0xFD, 0x5A, 0x69, 0x3E, 0x38, 0x13,
877a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x60, 0xEA, 0x6E, 0x59, 0x30, 0x13, 0x23, 0x6F,
878a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x64, 0xBA, 0x8F, 0x3B, 0x1E, 0xDD, 0x1B, 0xDE,
879a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFC, 0x7F, 0xCA, 0x03, 0x56, 0xCF, 0x29, 0x87,
880a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x72, 0xED, 0x9C, 0x17, 0xA0, 0x98, 0x00, 0xD7,
881a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x58, 0x35, 0x29, 0xF6, 0xC8, 0x13, 0xEC, 0x18,
882a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8B, 0xCB, 0x93, 0xD8, 0x43, 0x2D, 0x44, 0x8C,
883a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6D, 0x1F, 0x6D, 0xF5, 0xE7, 0xCD, 0x8A, 0x76,
884a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA2, 0x67, 0x36, 0x5D, 0x67, 0x6A, 0x5D, 0x8D,
885a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xED, 0xBF, 0x8A, 0x23, 0xF3, 0x66, 0x12, 0xA5,
886a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x99, 0x90, 0x28, 0xA8, 0x95, 0xEB, 0xD7, 0xA1,
887a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x37, 0xDC, 0x7A, 0x00, 0x9B, 0xC6, 0x69, 0x5F,
888a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xAC, 0xC1, 0xE5, 0x00, 0xE3, 0x25, 0xC9, 0x76,
889a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x78, 0x19, 0x75, 0x0A, 0xE8, 0xB9, 0x0E, 0x81,
890a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFA, 0x41, 0x6B, 0xE7, 0x37, 0x3A, 0x7F, 0x7B,
891a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6A, 0xAF, 0x38, 0x17, 0xA3, 0x4C, 0x06, 0x41,
892a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5A, 0xD4, 0x20, 0x18, 0xC8, 0x05, 0x8E, 0x4F,
893a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x2C, 0xF3, 0xE4, 0xBF, 0xDF, 0x63, 0xF4, 0x79,
894a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x91, 0xD4, 0xBD, 0x3F, 0x1B, 0x66, 0x44, 0x5F,
895a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x07, 0x8E, 0xA2, 0xDB, 0xFF, 0xAC, 0x2D, 0x62,
896a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA5, 0xEA, 0x03, 0xD9, 0x15, 0xA0, 0xAA, 0x55,
897a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x66, 0x47, 0xB6, 0xBF, 0x5F, 0xA4, 0x70, 0xEC,
898a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0A, 0x66, 0x2F, 0x69, 0x07, 0xC0, 0x1B, 0xF0,
899a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x53, 0xCB, 0x8A, 0xF7, 0x79, 0x4D, 0xF1, 0x94,
900a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x03, 0x50, 0xEA, 0xC5, 0xDB, 0xE2, 0xED, 0x3B,
901a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0xA8, 0x55, 0x1E, 0xC5, 0x0F, 0xDF, 0xF8,
902a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x75, 0x8C, 0xE6, 0x58, 0xD1, 0x89, 0xEA, 0xAE,
903a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6D, 0x2B, 0x64, 0xF6, 0x17, 0x79, 0x4B, 0x19,
904a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1C, 0x3F, 0xF4, 0x6B, 0xB7, 0x1E, 0x02, 0x34,
905a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x02, 0x1F, 0x47, 0xB3, 0x1F, 0xA4, 0x30, 0x77,
906a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x09, 0x5F, 0x96, 0xAD, 0x85, 0xBA, 0x3A, 0x6B,
907a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x73, 0x4A, 0x7C, 0x8F, 0x36, 0xDF, 0x08, 0xAC,
908a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xBA, 0x51, 0xC9, 0x37, 0x89, 0x7F, 0x72, 0xF2,
909a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1C, 0x3B, 0xBE, 0x5B, 0x54, 0x99, 0x6F, 0xC6,
910a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6C, 0x5F, 0x62, 0x68, 0x39, 0xDC, 0x98, 0xDD,
911a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1D, 0xE4, 0x19, 0x5B, 0x46, 0xCE, 0xE9, 0x80,
912a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x3A, 0x0F, 0xD3, 0xDF, 0xC5, 0x7E, 0x23, 0xF6,
913a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x92, 0xBB, 0x7B, 0x49, 0xB5, 0xD2, 0x12, 0x33,
914a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1D, 0x55, 0xB1, 0xCE, 0x2D, 0x72, 0x7A, 0xB4,
915a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1A, 0x11, 0xDA, 0x3A, 0x15, 0xF8, 0xE4, 0xBC,
916a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x11, 0xC7, 0x8B, 0x65, 0xF1, 0xCE, 0xB2, 0x96,
917a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF1, 0xFE, 0xDC, 0x5F, 0x7E, 0x42, 0x45, 0x6C,
918a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x91, 0x11, 0x17, 0x02, 0x52, 0x01, 0xBE, 0x03,
919a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x89, 0xF5, 0xAB, 0xD4, 0x0D, 0x11, 0xF8, 0x63,
920a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x9A, 0x39, 0xFE, 0x32, 0x36, 0x75, 0x18, 0x35,
921a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA5, 0xE5, 0xE4, 0x43, 0x17, 0xC1, 0xC2, 0xEE,
922a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFD, 0x4E, 0xA5, 0xBF, 0xD1, 0x60, 0x43, 0xF4,
923a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x3C, 0xB4, 0x19, 0x81, 0xF6, 0xAD, 0xEE, 0x9D,
924a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x03, 0x15, 0x9E, 0x7A, 0xD9, 0xD1, 0x3C, 0x53,
925a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x36, 0x95, 0x09, 0xFC, 0x1F, 0xA2, 0x7C, 0x16,
926a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xEF, 0x98, 0x87, 0x70, 0x3A, 0x55, 0xB5, 0x1B,
927a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x22, 0xCB, 0xF4, 0x4C, 0xD0, 0x12, 0xAE, 0xE0,
928a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB2, 0x79, 0x8E, 0x62, 0x84, 0x23, 0x42, 0x8E,
929a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFC, 0xD5, 0xA4, 0x0C, 0xAE, 0xF6, 0xBF, 0x50,
930a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD8, 0xEA, 0x88, 0x5E, 0xBF, 0x73, 0xA6, 0xB9,
931a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFD, 0x79, 0xB5, 0xE1, 0x8F, 0x67, 0xD1, 0x34,
932a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1A, 0xC8, 0x23, 0x7A, 0x75, 0xC3, 0xCF, 0xC9,
933a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x20, 0x04, 0xA1, 0xC5, 0xA4, 0x0E, 0x36, 0x6B,
934a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC4, 0x4D, 0x00, 0x17, 0x6A, 0xF7, 0x1C, 0x15,
935a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x8C, 0x86, 0xD3, 0x7E, 0x01, 0x37, 0x23,
936a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCA, 0xAC, 0x72, 0x23, 0xAB, 0x3B, 0xF4, 0xD5,
937a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x4F, 0x18, 0x28, 0x71, 0x3B, 0x2B, 0x4A, 0x6F,
938a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE4, 0x0F, 0xAB, 0x74, 0x40, 0x5C, 0xB7, 0x38,
939a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB0, 0x64, 0xC0, 0x6E, 0xCC, 0x76, 0xE9, 0xEF,
940a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
941a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
942a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
943a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt/*
944a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt * RFC 5114, 2.1.
945a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt * Group 22 - 1024-bit MODP Group with 160-bit Prime Order Subgroup
946a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt */
947a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group22_generator[] = {
948a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA4, 0xD1, 0xCB, 0xD5, 0xC3, 0xFD, 0x34, 0x12,
949a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x67, 0x65, 0xA4, 0x42, 0xEF, 0xB9, 0x99, 0x05,
950a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF8, 0x10, 0x4D, 0xD2, 0x58, 0xAC, 0x50, 0x7F,
951a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD6, 0x40, 0x6C, 0xFF, 0x14, 0x26, 0x6D, 0x31,
952a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x26, 0x6F, 0xEA, 0x1E, 0x5C, 0x41, 0x56, 0x4B,
953a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x77, 0x7E, 0x69, 0x0F, 0x55, 0x04, 0xF2, 0x13,
954a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x16, 0x02, 0x17, 0xB4, 0xB0, 0x1B, 0x88, 0x6A,
955a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5E, 0x91, 0x54, 0x7F, 0x9E, 0x27, 0x49, 0xF4,
956a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD7, 0xFB, 0xD7, 0xD3, 0xB9, 0xA9, 0x2E, 0xE1,
957a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x90, 0x9D, 0x0D, 0x22, 0x63, 0xF8, 0x0A, 0x76,
958a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA6, 0xA2, 0x4C, 0x08, 0x7A, 0x09, 0x1F, 0x53,
959a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1D, 0xBF, 0x0A, 0x01, 0x69, 0xB6, 0xA2, 0x8A,
960a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD6, 0x62, 0xA4, 0xD1, 0x8E, 0x73, 0xAF, 0xA3,
961a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x2D, 0x77, 0x9D, 0x59, 0x18, 0xD0, 0x8B, 0xC8,
962a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x85, 0x8F, 0x4D, 0xCE, 0xF9, 0x7C, 0x2A, 0x24,
963a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x85, 0x5E, 0x6E, 0xEB, 0x22, 0xB3, 0xB2, 0xE5
964a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
965a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group22_prime[] = {
966a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB1, 0x0B, 0x8F, 0x96, 0xA0, 0x80, 0xE0, 0x1D,
967a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDE, 0x92, 0xDE, 0x5E, 0xAE, 0x5D, 0x54, 0xEC,
968a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x52, 0xC9, 0x9F, 0xBC, 0xFB, 0x06, 0xA3, 0xC6,
969a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x9A, 0x6A, 0x9D, 0xCA, 0x52, 0xD2, 0x3B, 0x61,
970a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x60, 0x73, 0xE2, 0x86, 0x75, 0xA2, 0x3D, 0x18,
971a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x38, 0xEF, 0x1E, 0x2E, 0xE6, 0x52, 0xC0,
972a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x13, 0xEC, 0xB4, 0xAE, 0xA9, 0x06, 0x11, 0x23,
973a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x24, 0x97, 0x5C, 0x3C, 0xD4, 0x9B, 0x83, 0xBF,
974a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xAC, 0xCB, 0xDD, 0x7D, 0x90, 0xC4, 0xBD, 0x70,
975a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x98, 0x48, 0x8E, 0x9C, 0x21, 0x9A, 0x73, 0x72,
976a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x4E, 0xFF, 0xD6, 0xFA, 0xE5, 0x64, 0x47, 0x38,
977a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFA, 0xA3, 0x1A, 0x4F, 0xF5, 0x5B, 0xCC, 0xC0,
978a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA1, 0x51, 0xAF, 0x5F, 0x0D, 0xC8, 0xB4, 0xBD,
979a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x45, 0xBF, 0x37, 0xDF, 0x36, 0x5C, 0x1A, 0x65,
980a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE6, 0x8C, 0xFD, 0xA7, 0x6D, 0x4D, 0xA7, 0x08,
981a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDF, 0x1F, 0xB2, 0xBC, 0x2E, 0x4A, 0x43, 0x71
982a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
983a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group22_order[] = {
984a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF5, 0x18, 0xAA, 0x87, 0x81, 0xA8, 0xDF, 0x27,
985a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8A, 0xBA, 0x4E, 0x7D, 0x64, 0xB7, 0xCB, 0x9D,
986a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x49, 0x46, 0x23, 0x53
987a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
988a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
989a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt/*
990a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt * RFC 5114, 2.2.
991a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt * Group 23 - 2048-bit MODP Group with 224-bit Prime Order Subgroup
992a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt */
993a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group23_generator[] = {
994a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xAC, 0x40, 0x32, 0xEF, 0x4F, 0x2D, 0x9A, 0xE3,
995a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x9D, 0xF3, 0x0B, 0x5C, 0x8F, 0xFD, 0xAC, 0x50,
996a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6C, 0xDE, 0xBE, 0x7B, 0x89, 0x99, 0x8C, 0xAF,
997a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x74, 0x86, 0x6A, 0x08, 0xCF, 0xE4, 0xFF, 0xE3,
998a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA6, 0x82, 0x4A, 0x4E, 0x10, 0xB9, 0xA6, 0xF0,
999a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDD, 0x92, 0x1F, 0x01, 0xA7, 0x0C, 0x4A, 0xFA,
1000a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xAB, 0x73, 0x9D, 0x77, 0x00, 0xC2, 0x9F, 0x52,
1001a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC5, 0x7D, 0xB1, 0x7C, 0x62, 0x0A, 0x86, 0x52,
1002a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xBE, 0x5E, 0x90, 0x01, 0xA8, 0xD6, 0x6A, 0xD7,
1003a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC1, 0x76, 0x69, 0x10, 0x19, 0x99, 0x02, 0x4A,
1004a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF4, 0xD0, 0x27, 0x27, 0x5A, 0xC1, 0x34, 0x8B,
1005a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB8, 0xA7, 0x62, 0xD0, 0x52, 0x1B, 0xC9, 0x8A,
1006a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE2, 0x47, 0x15, 0x04, 0x22, 0xEA, 0x1E, 0xD4,
1007a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x09, 0x93, 0x9D, 0x54, 0xDA, 0x74, 0x60, 0xCD,
1008a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB5, 0xF6, 0xC6, 0xB2, 0x50, 0x71, 0x7C, 0xBE,
1009a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF1, 0x80, 0xEB, 0x34, 0x11, 0x8E, 0x98, 0xD1,
1010a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x19, 0x52, 0x9A, 0x45, 0xD6, 0xF8, 0x34, 0x56,
1011a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6E, 0x30, 0x25, 0xE3, 0x16, 0xA3, 0x30, 0xEF,
1012a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xBB, 0x77, 0xA8, 0x6F, 0x0C, 0x1A, 0xB1, 0x5B,
1013a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x05, 0x1A, 0xE3, 0xD4, 0x28, 0xC8, 0xF8, 0xAC,
1014a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB7, 0x0A, 0x81, 0x37, 0x15, 0x0B, 0x8E, 0xEB,
1015a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x10, 0xE1, 0x83, 0xED, 0xD1, 0x99, 0x63, 0xDD,
1016a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD9, 0xE2, 0x63, 0xE4, 0x77, 0x05, 0x89, 0xEF,
1017a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6A, 0xA2, 0x1E, 0x7F, 0x5F, 0x2F, 0xF3, 0x81,
1018a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB5, 0x39, 0xCC, 0xE3, 0x40, 0x9D, 0x13, 0xCD,
1019a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x56, 0x6A, 0xFB, 0xB4, 0x8D, 0x6C, 0x01, 0x91,
1020a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x81, 0xE1, 0xBC, 0xFE, 0x94, 0xB3, 0x02, 0x69,
1021a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xED, 0xFE, 0x72, 0xFE, 0x9B, 0x6A, 0xA4, 0xBD,
1022a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7B, 0x5A, 0x0F, 0x1C, 0x71, 0xCF, 0xFF, 0x4C,
1023a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x19, 0xC4, 0x18, 0xE1, 0xF6, 0xEC, 0x01, 0x79,
1024a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x81, 0xBC, 0x08, 0x7F, 0x2A, 0x70, 0x65, 0xB3,
1025a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x84, 0xB8, 0x90, 0xD3, 0x19, 0x1F, 0x2B, 0xFA
1026a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
1027a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group23_prime[] = {
1028a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xAD, 0x10, 0x7E, 0x1E, 0x91, 0x23, 0xA9, 0xD0,
1029a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD6, 0x60, 0xFA, 0xA7, 0x95, 0x59, 0xC5, 0x1F,
1030a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA2, 0x0D, 0x64, 0xE5, 0x68, 0x3B, 0x9F, 0xD1,
1031a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB5, 0x4B, 0x15, 0x97, 0xB6, 0x1D, 0x0A, 0x75,
1032a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE6, 0xFA, 0x14, 0x1D, 0xF9, 0x5A, 0x56, 0xDB,
1033a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xAF, 0x9A, 0x3C, 0x40, 0x7B, 0xA1, 0xDF, 0x15,
1034a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xEB, 0x3D, 0x68, 0x8A, 0x30, 0x9C, 0x18, 0x0E,
1035a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1D, 0xE6, 0xB8, 0x5A, 0x12, 0x74, 0xA0, 0xA6,
1036a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6D, 0x3F, 0x81, 0x52, 0xAD, 0x6A, 0xC2, 0x12,
1037a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x90, 0x37, 0xC9, 0xED, 0xEF, 0xDA, 0x4D, 0xF8,
1038a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD9, 0x1E, 0x8F, 0xEF, 0x55, 0xB7, 0x39, 0x4B,
1039a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7A, 0xD5, 0xB7, 0xD0, 0xB6, 0xC1, 0x22, 0x07,
1040a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC9, 0xF9, 0x8D, 0x11, 0xED, 0x34, 0xDB, 0xF6,
1041a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC6, 0xBA, 0x0B, 0x2C, 0x8B, 0xBC, 0x27, 0xBE,
1042a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6A, 0x00, 0xE0, 0xA0, 0xB9, 0xC4, 0x97, 0x08,
1043a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0xBF, 0x8A, 0x31, 0x70, 0x91, 0x88, 0x36,
1044a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x81, 0x28, 0x61, 0x30, 0xBC, 0x89, 0x85, 0xDB,
1045a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x16, 0x02, 0xE7, 0x14, 0x41, 0x5D, 0x93, 0x30,
1046a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x27, 0x82, 0x73, 0xC7, 0xDE, 0x31, 0xEF, 0xDC,
1047a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x73, 0x10, 0xF7, 0x12, 0x1F, 0xD5, 0xA0, 0x74,
1048a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x15, 0x98, 0x7D, 0x9A, 0xDC, 0x0A, 0x48, 0x6D,
1049a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCD, 0xF9, 0x3A, 0xCC, 0x44, 0x32, 0x83, 0x87,
1050a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x31, 0x5D, 0x75, 0xE1, 0x98, 0xC6, 0x41, 0xA4,
1051a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x80, 0xCD, 0x86, 0xA1, 0xB9, 0xE5, 0x87, 0xE8,
1052a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xBE, 0x60, 0xE6, 0x9C, 0xC9, 0x28, 0xB2, 0xB9,
1053a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC5, 0x21, 0x72, 0xE4, 0x13, 0x04, 0x2E, 0x9B,
1054a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x23, 0xF1, 0x0B, 0x0E, 0x16, 0xE7, 0x97, 0x63,
1055a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC9, 0xB5, 0x3D, 0xCF, 0x4B, 0xA8, 0x0A, 0x29,
1056a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE3, 0xFB, 0x73, 0xC1, 0x6B, 0x8E, 0x75, 0xB9,
1057a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7E, 0xF3, 0x63, 0xE2, 0xFF, 0xA3, 0x1F, 0x71,
1058a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xCF, 0x9D, 0xE5, 0x38, 0x4E, 0x71, 0xB8, 0x1C,
1059a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x0A, 0xC4, 0xDF, 0xFE, 0x0C, 0x10, 0xE6, 0x4F
1060a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
1061a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group23_order[] = {
1062a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x80, 0x1C, 0x0D, 0x34, 0xC5, 0x8D, 0x93, 0xFE,
1063a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x99, 0x71, 0x77, 0x10, 0x1F, 0x80, 0x53, 0x5A,
1064a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x47, 0x38, 0xCE, 0xBC, 0xBF, 0x38, 0x9A, 0x99,
1065a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0x63, 0x71, 0xEB
1066a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
1067a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
1068a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt/*
1069a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt * RFC 5114, 2.3.
1070a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt * Group 24 - 2048-bit MODP Group with 256-bit Prime Order Subgroup
1071a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt */
1072a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group24_generator[] = {
1073a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x3F, 0xB3, 0x2C, 0x9B, 0x73, 0x13, 0x4D, 0x0B,
1074a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x2E, 0x77, 0x50, 0x66, 0x60, 0xED, 0xBD, 0x48,
1075a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x4C, 0xA7, 0xB1, 0x8F, 0x21, 0xEF, 0x20, 0x54,
1076a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x07, 0xF4, 0x79, 0x3A, 0x1A, 0x0B, 0xA1, 0x25,
1077a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x10, 0xDB, 0xC1, 0x50, 0x77, 0xBE, 0x46, 0x3F,
1078a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFF, 0x4F, 0xED, 0x4A, 0xAC, 0x0B, 0xB5, 0x55,
1079a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xBE, 0x3A, 0x6C, 0x1B, 0x0C, 0x6B, 0x47, 0xB1,
1080a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xBC, 0x37, 0x73, 0xBF, 0x7E, 0x8C, 0x6F, 0x62,
1081a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x90, 0x12, 0x28, 0xF8, 0xC2, 0x8C, 0xBB, 0x18,
1082a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA5, 0x5A, 0xE3, 0x13, 0x41, 0x00, 0x0A, 0x65,
1083a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x01, 0x96, 0xF9, 0x31, 0xC7, 0x7A, 0x57, 0xF2,
1084a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDD, 0xF4, 0x63, 0xE5, 0xE9, 0xEC, 0x14, 0x4B,
1085a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x77, 0x7D, 0xE6, 0x2A, 0xAA, 0xB8, 0xA8, 0x62,
1086a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8A, 0xC3, 0x76, 0xD2, 0x82, 0xD6, 0xED, 0x38,
1087a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x64, 0xE6, 0x79, 0x82, 0x42, 0x8E, 0xBC, 0x83,
1088a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1D, 0x14, 0x34, 0x8F, 0x6F, 0x2F, 0x91, 0x93,
1089a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB5, 0x04, 0x5A, 0xF2, 0x76, 0x71, 0x64, 0xE1,
1090a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDF, 0xC9, 0x67, 0xC1, 0xFB, 0x3F, 0x2E, 0x55,
1091a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA4, 0xBD, 0x1B, 0xFF, 0xE8, 0x3B, 0x9C, 0x80,
1092a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD0, 0x52, 0xB9, 0x85, 0xD1, 0x82, 0xEA, 0x0A,
1093a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDB, 0x2A, 0x3B, 0x73, 0x13, 0xD3, 0xFE, 0x14,
1094a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC8, 0x48, 0x4B, 0x1E, 0x05, 0x25, 0x88, 0xB9,
1095a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB7, 0xD2, 0xBB, 0xD2, 0xDF, 0x01, 0x61, 0x99,
1096a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xEC, 0xD0, 0x6E, 0x15, 0x57, 0xCD, 0x09, 0x15,
1097a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0x35, 0x3B, 0xBB, 0x64, 0xE0, 0xEC, 0x37,
1098a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x7F, 0xD0, 0x28, 0x37, 0x0D, 0xF9, 0x2B, 0x52,
1099a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC7, 0x89, 0x14, 0x28, 0xCD, 0xC6, 0x7E, 0xB6,
1100a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x18, 0x4B, 0x52, 0x3D, 0x1D, 0xB2, 0x46, 0xC3,
1101a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x2F, 0x63, 0x07, 0x84, 0x90, 0xF0, 0x0E, 0xF8,
1102a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xD6, 0x47, 0xD1, 0x48, 0xD4, 0x79, 0x54, 0x51,
1103a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5E, 0x23, 0x27, 0xCF, 0xEF, 0x98, 0xC5, 0x82,
1104a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x66, 0x4B, 0x4C, 0x0F, 0x6C, 0xC4, 0x16, 0x59
1105a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
1106a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group24_prime[] = {
1107a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x87, 0xA8, 0xE6, 0x1D, 0xB4, 0xB6, 0x66, 0x3C,
1108a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFF, 0xBB, 0xD1, 0x9C, 0x65, 0x19, 0x59, 0x99,
1109a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8C, 0xEE, 0xF6, 0x08, 0x66, 0x0D, 0xD0, 0xF2,
1110a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5D, 0x2C, 0xEE, 0xD4, 0x43, 0x5E, 0x3B, 0x00,
1111a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xE0, 0x0D, 0xF8, 0xF1, 0xD6, 0x19, 0x57, 0xD4,
1112a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xFA, 0xF7, 0xDF, 0x45, 0x61, 0xB2, 0xAA, 0x30,
1113a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x16, 0xC3, 0xD9, 0x11, 0x34, 0x09, 0x6F, 0xAA,
1114a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x3B, 0xF4, 0x29, 0x6D, 0x83, 0x0E, 0x9A, 0x7C,
1115a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x20, 0x9E, 0x0C, 0x64, 0x97, 0x51, 0x7A, 0xBD,
1116a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x5A, 0x8A, 0x9D, 0x30, 0x6B, 0xCF, 0x67, 0xED,
1117a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x91, 0xF9, 0xE6, 0x72, 0x5B, 0x47, 0x58, 0xC0,
1118a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x22, 0xE0, 0xB1, 0xEF, 0x42, 0x75, 0xBF, 0x7B,
1119a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x6C, 0x5B, 0xFC, 0x11, 0xD4, 0x5F, 0x90, 0x88,
1120a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB9, 0x41, 0xF5, 0x4E, 0xB1, 0xE5, 0x9B, 0xB8,
1121a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xBC, 0x39, 0xA0, 0xBF, 0x12, 0x30, 0x7F, 0x5C,
1122a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x4F, 0xDB, 0x70, 0xC5, 0x81, 0xB2, 0x3F, 0x76,
1123a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB6, 0x3A, 0xCA, 0xE1, 0xCA, 0xA6, 0xB7, 0x90,
1124a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x2D, 0x52, 0x52, 0x67, 0x35, 0x48, 0x8A, 0x0E,
1125a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF1, 0x3C, 0x6D, 0x9A, 0x51, 0xBF, 0xA4, 0xAB,
1126a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x3A, 0xD8, 0x34, 0x77, 0x96, 0x52, 0x4D, 0x8E,
1127a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xF6, 0xA1, 0x67, 0xB5, 0xA4, 0x18, 0x25, 0xD9,
1128a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x67, 0xE1, 0x44, 0xE5, 0x14, 0x05, 0x64, 0x25,
1129a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x1C, 0xCA, 0xCB, 0x83, 0xE6, 0xB4, 0x86, 0xF6,
1130a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB3, 0xCA, 0x3F, 0x79, 0x71, 0x50, 0x60, 0x26,
1131a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC0, 0xB8, 0x57, 0xF6, 0x89, 0x96, 0x28, 0x56,
1132a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDE, 0xD4, 0x01, 0x0A, 0xBD, 0x0B, 0xE6, 0x21,
1133a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xC3, 0xA3, 0x96, 0x0A, 0x54, 0xE7, 0x10, 0xC3,
1134a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x75, 0xF2, 0x63, 0x75, 0xD7, 0x01, 0x41, 0x03,
1135a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA4, 0xB5, 0x43, 0x30, 0xC1, 0x98, 0xAF, 0x12,
1136a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x61, 0x16, 0xD2, 0x27, 0x6E, 0x11, 0x71, 0x5F,
1137a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x69, 0x38, 0x77, 0xFA, 0xD7, 0xEF, 0x09, 0xCA,
1138a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xDB, 0x09, 0x4A, 0xE9, 0x1E, 0x1A, 0x15, 0x97
1139a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
1140a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtstatic const u8 dh_group24_order[] = {
1141a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x8C, 0xF8, 0x36, 0x42, 0xA7, 0x09, 0xA0, 0x97,
1142a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xB4, 0x47, 0x99, 0x76, 0x40, 0x12, 0x9D, 0xA2,
1143a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0x99, 0xB1, 0xA4, 0x7D, 0x1E, 0xB3, 0x75, 0x0B,
1144a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	0xA3, 0x08, 0xB0, 0xFE, 0x64, 0xF5, 0xFB, 0xD3
1145a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
11468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* ALL_DH_GROUPS */
11488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1150a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt#define DH_GROUP(id,safe) \
11518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ id, dh_group ## id ## _generator, sizeof(dh_group ## id ## _generator), \
1152a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtdh_group ## id ## _prime, sizeof(dh_group ## id ## _prime), \
1153a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtdh_group ## id ## _order, sizeof(dh_group ## id ## _order), safe }
11548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic struct dh_group dh_groups[] = {
1157a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(5, 1),
11588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef ALL_DH_GROUPS
1159a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(1, 1),
1160a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(2, 1),
1161a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(14, 1),
1162a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(15, 1),
1163a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(16, 1),
1164a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(17, 1),
1165a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(18, 1),
1166a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(22, 0),
1167a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(23, 0),
1168a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt	DH_GROUP(24, 0)
11698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* ALL_DH_GROUPS */
11708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
11718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NUM_DH_GROUPS (sizeof(dh_groups) / sizeof(dh_groups[0]))
11738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtconst struct dh_group * dh_groups_get(int id)
11768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
11778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t i;
11788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	for (i = 0; i < NUM_DH_GROUPS; i++) {
11808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		if (dh_groups[i].id == id)
11818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			return &dh_groups[i];
11828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
11838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return NULL;
11848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
11858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/**
11888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_init - Initialize Diffie-Hellman handshake
11898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dh: Selected Diffie-Hellman group
11908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @priv: Pointer for returning Diffie-Hellman private key
11918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: Diffie-Hellman public value
11928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
11938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * dh_init(const struct dh_group *dh, struct wpabuf **priv)
11948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
11958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpabuf *pv;
11968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t pv_len;
11978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (dh == NULL)
11998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return NULL;
12008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpabuf_free(*priv);
12028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	*priv = wpabuf_alloc(dh->prime_len);
12038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (*priv == NULL)
12048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return NULL;
12058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (random_get_bytes(wpabuf_put(*priv, dh->prime_len), dh->prime_len))
12078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	{
12088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpabuf_free(*priv);
12098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		*priv = NULL;
12108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return NULL;
12118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
12128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (os_memcmp(wpabuf_head(*priv), dh->prime, dh->prime_len) > 0) {
12148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		/* Make sure private value is smaller than prime */
12158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		*(wpabuf_mhead_u8(*priv)) = 0;
12168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
12178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_hexdump_buf_key(MSG_DEBUG, "DH: private value", *priv);
12188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	pv_len = dh->prime_len;
12208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	pv = wpabuf_alloc(pv_len);
12218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (pv == NULL)
12228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return NULL;
12238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (crypto_mod_exp(dh->generator, dh->generator_len,
12248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   wpabuf_head(*priv), wpabuf_len(*priv),
12258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   dh->prime, dh->prime_len, wpabuf_mhead(pv),
12268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   &pv_len) < 0) {
12278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpabuf_free(pv);
12288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed");
12298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return NULL;
12308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
12318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpabuf_put(pv, pv_len);
12328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_hexdump_buf(MSG_DEBUG, "DH: public value", pv);
12338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return pv;
12358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
12368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/**
12398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_derive_shared - Derive shared Diffie-Hellman key
12408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @peer_public: Diffie-Hellman public value from peer
12418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @own_private: Diffie-Hellman private key from dh_init()
12428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dh: Selected Diffie-Hellman group
12438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: Diffie-Hellman shared key
12448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
12458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * dh_derive_shared(const struct wpabuf *peer_public,
12468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const struct wpabuf *own_private,
12478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const struct dh_group *dh)
12488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
12498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpabuf *shared;
12508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t shared_len;
12518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (dh == NULL || peer_public == NULL || own_private == NULL)
12538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return NULL;
12548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	shared_len = dh->prime_len;
12568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	shared = wpabuf_alloc(shared_len);
12578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (shared == NULL)
12588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return NULL;
12598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (crypto_mod_exp(wpabuf_head(peer_public), wpabuf_len(peer_public),
12608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   wpabuf_head(own_private), wpabuf_len(own_private),
12618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   dh->prime, dh->prime_len,
12628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   wpabuf_mhead(shared), &shared_len) < 0) {
12638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpabuf_free(shared);
12648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed");
12658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return NULL;
12668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
12678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpabuf_put(shared, shared_len);
12688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_hexdump_buf_key(MSG_DEBUG, "DH: shared key", shared);
12698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
12708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return shared;
12718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1272