1526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/*
2526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Diffie-Hellman groups
3526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Copyright (c) 2007, Jouni Malinen <j@w1.fi>
4526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *
5526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This program is free software; you can redistribute it and/or modify
6526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * it under the terms of the GNU General Public License version 2 as
7526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * published by the Free Software Foundation.
8526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *
9526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD
10526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * license.
11526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *
12526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * See README and COPYING for more details.
13526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
14526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
15526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "includes.h"
16526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
17526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "common.h"
18526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "crypto.h"
19526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "dh_groups.h"
20526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
21526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
22dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt#ifdef ALL_DH_GROUPS
23dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt
24526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* RFC 4306, B.1. Group 1 - 768 Bit MODP
25526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Generator: 2
26526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Prime: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 }
27526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
28526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group1_generator[1] = { 0x02 };
29526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group1_prime[96] = {
30526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
31526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
32526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
33526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
34526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
35526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
36526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
37526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
38526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
39526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
40526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x3A, 0x36, 0x20,
41526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
42526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
43526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
44526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* RFC 4306, B.2. Group 2 - 1024 Bit MODP
45526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Generator: 2
46526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Prime: 2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 }
47526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
48526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group2_generator[1] = { 0x02 };
49526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group2_prime[128] = {
50526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
51526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
52526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
53526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
54526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
55526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
56526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
57526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
58526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
59526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
60526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
61526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
62526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
63526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
64526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81,
65526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
66526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
67526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
68dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt#endif /* ALL_DH_GROUPS */
69dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt
70526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* RFC 3526, 2. Group 5 - 1536 Bit MODP
71526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Generator: 2
72526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Prime: 2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 pi] + 741804 }
73526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
74526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group5_generator[1] = { 0x02 };
75526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group5_prime[192] = {
76526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
77526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
78526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
79526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
80526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
81526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
82526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
83526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
84526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
85526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
86526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
87526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
88526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
89526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
90526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
91526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
92526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
93526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
94526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
95526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
96526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
97526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
98526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x23, 0x73, 0x27,
99526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
100526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
101526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
102dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt#ifdef ALL_DH_GROUPS
103dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt
104526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* RFC 3526, 3. Group 14 - 2048 Bit MODP
105526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Generator: 2
106526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Prime: 2^2048 - 2^1984 - 1 + 2^64 * { [2^1918 pi] + 124476 }
107526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
108526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group14_generator[1] = { 0x02 };
109526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group14_prime[256] = {
110526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
111526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
112526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
113526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
114526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
115526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
116526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
117526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
118526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
119526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
120526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
121526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
122526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
123526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
124526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
125526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
126526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
127526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
128526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
129526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
130526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
131526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
132526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
133526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
134526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
135526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
136526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
137526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
138526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
139526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
140526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68,
141526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
142526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
143526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
144526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* RFC 3526, 4. Group 15 - 3072 Bit MODP
145526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Generator: 2
146526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Prime: 2^3072 - 2^3008 - 1 + 2^64 * { [2^2942 pi] + 1690314 }
147526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
148526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group15_generator[1] = { 0x02 };
149526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group15_prime[384] = {
150526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
151526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
152526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
153526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
154526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
155526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
156526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
157526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
158526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
159526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
160526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
161526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
162526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
163526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
164526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
165526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
166526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
167526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
168526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
169526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
170526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
171526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
172526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
173526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
174526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
175526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
176526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
177526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
178526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
179526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
180526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
181526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
182526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
183526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
184526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
185526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
186526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
187526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
188526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
189526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
190526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
191526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
192526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
193526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
194526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
195526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
196526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x3A, 0xD2, 0xCA,
197526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
198526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
199526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
200526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* RFC 3526, 5. Group 16 - 4096 Bit MODP
201526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Generator: 2
202526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Prime: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 }
203526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
204526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group16_generator[1] = { 0x02 };
205526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group16_prime[512] = {
206526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
207526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
208526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
209526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
210526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
211526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
212526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
213526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
214526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
215526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
216526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
217526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
218526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
219526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
220526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
221526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
222526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
223526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
224526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
225526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
226526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
227526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
228526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
229526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
230526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
231526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
232526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
233526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
234526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
235526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
236526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
237526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
238526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
239526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
240526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
241526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
242526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
243526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
244526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
245526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
246526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
247526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
248526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
249526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
250526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
251526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
252526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
253526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
254526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
255526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
256526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
257526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
258526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
259526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
260526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
261526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
262526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
263526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
264526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
265526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
266526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
267526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
268526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x06, 0x31, 0x99,
269526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
270526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
271526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
272526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* RFC 3526, 6. Group 17 - 6144 Bit MODP
273526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Generator: 2
274526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Prime: 2^6144 - 2^6080 - 1 + 2^64 * { [2^6014 pi] + 929484 }
275526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
276526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group17_generator[1] = { 0x02 };
277526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group17_prime[768] = {
278526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
279526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
280526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
281526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
282526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
283526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
284526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
285526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
286526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
287526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
288526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
289526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
290526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
291526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
292526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
293526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
294526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
295526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
296526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
297526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
298526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
299526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
300526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
301526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
302526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
303526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
304526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
305526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
306526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
307526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
308526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
309526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
310526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
311526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
312526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
313526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
314526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
315526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
316526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
317526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
318526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
319526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
320526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
321526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
322526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
323526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
324526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
325526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
326526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
327526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
328526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
329526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
330526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
331526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
332526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
333526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
334526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
335526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
336526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
337526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
338526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
339526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
340526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92,
341526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26,
342526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE,
343526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD,
344526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E,
345526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE,
346526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31,
347526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18,
348526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED,
349526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B,
350526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B,
351526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42,
352526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF,
353526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC,
354526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03,
355526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6,
356526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82,
357526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E,
358526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3,
359526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE,
360526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5,
361526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA,
362526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8,
363526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0,
364526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28,
365526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76,
366526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0,
367526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C,
368526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32,
369526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68,
370526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE,
371526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6,
372526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xCC, 0x40, 0x24,
373526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
374526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
375526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
376526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* RFC 3526, 7. Group 18 - 8192 Bit MODP
377526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Generator: 2
378526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Prime: 2^8192 - 2^8128 - 1 + 2^64 * { [2^8062 pi] + 4743158 }
379526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
380526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group18_generator[1] = { 0x02 };
381526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic const u8 dh_group18_prime[1024] = {
382526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
383526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
384526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
385526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
386526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
387526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
388526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
389526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
390526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
391526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
392526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
393526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
394526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
395526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
396526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
397526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
398526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
399526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
400526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
401526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
402526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
403526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
404526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
405526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
406526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
407526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
408526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
409526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
410526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
411526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
412526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
413526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
414526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
415526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
416526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
417526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
418526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
419526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
420526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
421526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
422526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
423526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
424526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
425526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
426526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
427526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
428526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
429526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
430526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
431526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
432526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
433526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
434526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
435526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
436526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
437526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
438526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
439526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
440526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
441526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
442526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
443526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
444526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92,
445526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26,
446526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE,
447526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD,
448526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E,
449526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE,
450526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31,
451526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18,
452526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED,
453526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B,
454526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B,
455526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42,
456526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF,
457526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC,
458526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03,
459526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6,
460526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82,
461526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E,
462526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3,
463526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE,
464526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5,
465526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA,
466526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8,
467526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0,
468526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28,
469526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76,
470526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0,
471526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C,
472526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32,
473526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68,
474526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE,
475526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6,
476526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xBE, 0x11, 0x59,
477526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x74, 0xA3, 0x92, 0x6F, 0x12, 0xFE, 0xE5, 0xE4,
478526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x38, 0x77, 0x7C, 0xB6, 0xA9, 0x32, 0xDF, 0x8C,
479526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xD8, 0xBE, 0xC4, 0xD0, 0x73, 0xB9, 0x31, 0xBA,
480526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x3B, 0xC8, 0x32, 0xB6, 0x8D, 0x9D, 0xD3, 0x00,
481526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x74, 0x1F, 0xA7, 0xBF, 0x8A, 0xFC, 0x47, 0xED,
482526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x25, 0x76, 0xF6, 0x93, 0x6B, 0xA4, 0x24, 0x66,
483526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x3A, 0xAB, 0x63, 0x9C, 0x5A, 0xE4, 0xF5, 0x68,
484526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x34, 0x23, 0xB4, 0x74, 0x2B, 0xF1, 0xC9, 0x78,
485526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x23, 0x8F, 0x16, 0xCB, 0xE3, 0x9D, 0x65, 0x2D,
486526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xE3, 0xFD, 0xB8, 0xBE, 0xFC, 0x84, 0x8A, 0xD9,
487526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x22, 0x22, 0x2E, 0x04, 0xA4, 0x03, 0x7C, 0x07,
488526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x13, 0xEB, 0x57, 0xA8, 0x1A, 0x23, 0xF0, 0xC7,
489526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x34, 0x73, 0xFC, 0x64, 0x6C, 0xEA, 0x30, 0x6B,
490526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x4B, 0xCB, 0xC8, 0x86, 0x2F, 0x83, 0x85, 0xDD,
491526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFA, 0x9D, 0x4B, 0x7F, 0xA2, 0xC0, 0x87, 0xE8,
492526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x79, 0x68, 0x33, 0x03, 0xED, 0x5B, 0xDD, 0x3A,
493526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x06, 0x2B, 0x3C, 0xF5, 0xB3, 0xA2, 0x78, 0xA6,
494526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x6D, 0x2A, 0x13, 0xF8, 0x3F, 0x44, 0xF8, 0x2D,
495526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xDF, 0x31, 0x0E, 0xE0, 0x74, 0xAB, 0x6A, 0x36,
496526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x45, 0x97, 0xE8, 0x99, 0xA0, 0x25, 0x5D, 0xC1,
497526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x64, 0xF3, 0x1C, 0xC5, 0x08, 0x46, 0x85, 0x1D,
498526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xF9, 0xAB, 0x48, 0x19, 0x5D, 0xED, 0x7E, 0xA1,
499526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xB1, 0xD5, 0x10, 0xBD, 0x7E, 0xE7, 0x4D, 0x73,
500526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFA, 0xF3, 0x6B, 0xC3, 0x1E, 0xCF, 0xA2, 0x68,
501526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x35, 0x90, 0x46, 0xF4, 0xEB, 0x87, 0x9F, 0x92,
502526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x40, 0x09, 0x43, 0x8B, 0x48, 0x1C, 0x6C, 0xD7,
503526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x88, 0x9A, 0x00, 0x2E, 0xD5, 0xEE, 0x38, 0x2B,
504526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC9, 0x19, 0x0D, 0xA6, 0xFC, 0x02, 0x6E, 0x47,
505526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x95, 0x58, 0xE4, 0x47, 0x56, 0x77, 0xE9, 0xAA,
506526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x9E, 0x30, 0x50, 0xE2, 0x76, 0x56, 0x94, 0xDF,
507526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xC8, 0x1F, 0x56, 0xE8, 0x80, 0xB9, 0x6E, 0x71,
508526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0x60, 0xC9, 0x80, 0xDD, 0x98, 0xED, 0xD3, 0xDF,
509526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
510526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
511526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
512dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt#endif /* ALL_DH_GROUPS */
513dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt
514526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
515526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define DH_GROUP(id) \
516526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ id, dh_group ## id ## _generator, sizeof(dh_group ## id ## _generator), \
517526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtdh_group ## id ## _prime, sizeof(dh_group ## id ## _prime) }
518526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
519526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
520526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic struct dh_group dh_groups[] = {
521dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt	DH_GROUP(5),
522dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt#ifdef ALL_DH_GROUPS
523526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	DH_GROUP(1),
524526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	DH_GROUP(2),
525526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	DH_GROUP(14),
526526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	DH_GROUP(15),
527526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	DH_GROUP(16),
528526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	DH_GROUP(17),
529526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	DH_GROUP(18)
530dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt#endif /* ALL_DH_GROUPS */
531526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt};
532526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
533526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define NUM_DH_GROUPS (sizeof(dh_groups) / sizeof(dh_groups[0]))
534526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
535526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
536526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtconst struct dh_group * dh_groups_get(int id)
537526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
538526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	size_t i;
539526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
540526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	for (i = 0; i < NUM_DH_GROUPS; i++) {
541526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		if (dh_groups[i].id == id)
542526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			return &dh_groups[i];
543526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	}
544526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	return NULL;
545526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
546526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
547526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
548526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/**
549526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * dh_init - Initialize Diffie-Hellman handshake
550526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @dh: Selected Diffie-Hellman group
551526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @priv: Pointer for returning Diffie-Hellman private key
552526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: Diffie-Hellman public value
553526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
554526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct wpabuf * dh_init(const struct dh_group *dh, struct wpabuf **priv)
555526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
556526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	struct wpabuf *pv;
557526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	size_t pv_len;
558526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
559526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	if (dh == NULL)
560526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		return NULL;
561526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
562526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	wpabuf_free(*priv);
563526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	*priv = wpabuf_alloc(dh->prime_len);
564526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	if (*priv == NULL)
565526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		return NULL;
566526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
567526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	if (os_get_random(wpabuf_put(*priv, dh->prime_len), dh->prime_len)) {
568526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		wpabuf_free(*priv);
569526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		*priv = NULL;
570526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		return NULL;
571526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	}
572526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
573526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	if (os_memcmp(wpabuf_head(*priv), dh->prime, dh->prime_len) > 0) {
574526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		/* Make sure private value is smaller than prime */
575526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		*(wpabuf_mhead_u8(*priv)) = 0;
576526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	}
577526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	wpa_hexdump_buf_key(MSG_DEBUG, "DH: private value", *priv);
578526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
579526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	pv_len = dh->prime_len;
580526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	pv = wpabuf_alloc(pv_len);
581526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	if (pv == NULL)
582526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		return NULL;
583526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	if (crypto_mod_exp(dh->generator, dh->generator_len,
584526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			   wpabuf_head(*priv), wpabuf_len(*priv),
585526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			   dh->prime, dh->prime_len, wpabuf_mhead(pv),
586526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			   &pv_len) < 0) {
587526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		wpabuf_free(pv);
588526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed");
589526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		return NULL;
590526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	}
591526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	wpabuf_put(pv, pv_len);
592526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	wpa_hexdump_buf(MSG_DEBUG, "DH: public value", pv);
593526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
594526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	return pv;
595526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
596526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
597526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
598526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/**
599526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * dh_derive_shared - Derive shared Diffie-Hellman key
600526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @peer_public: Diffie-Hellman public value from peer
601526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @own_private: Diffie-Hellman private key from dh_init()
602526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @dh: Selected Diffie-Hellman group
603526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: Diffie-Hellman shared key
604526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
605526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct wpabuf * dh_derive_shared(const struct wpabuf *peer_public,
606526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt				 const struct wpabuf *own_private,
607526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt				 const struct dh_group *dh)
608526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
609526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	struct wpabuf *shared;
610526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	size_t shared_len;
611526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
612526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	if (dh == NULL || peer_public == NULL || own_private == NULL)
613526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		return NULL;
614526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
615526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	shared_len = dh->prime_len;
616526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	shared = wpabuf_alloc(shared_len);
617526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	if (shared == NULL)
618526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		return NULL;
619526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	if (crypto_mod_exp(wpabuf_head(peer_public), wpabuf_len(peer_public),
620526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			   wpabuf_head(own_private), wpabuf_len(own_private),
621526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			   dh->prime, dh->prime_len,
622526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt			   wpabuf_put(shared, shared_len), &shared_len) < 0) {
623526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		wpabuf_free(shared);
624526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed");
625526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt		return NULL;
626526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	}
627526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	wpa_hexdump_buf_key(MSG_DEBUG, "DH: shared key", shared);
628526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
629526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	return shared;
630526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
631