dh_groups.c
Go to the documentation of this file.
00001 /*
00002  * Diffie-Hellman groups
00003  * Copyright (c) 2007, Jouni Malinen <j@w1.fi>
00004  *
00005  * This program is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License version 2 as
00007  * published by the Free Software Foundation.
00008  *
00009  * Alternatively, this software may be distributed under the terms of BSD
00010  * license.
00011  *
00012  * See README and COPYING for more details.
00013  */
00014 
00015 #include "includes.h"
00016 
00017 #include "common.h"
00018 #include "crypto.h"
00019 #include "dh_groups.h"
00020 
00021 
00022 #ifdef ALL_DH_GROUPS
00023 
00024 /* RFC 4306, B.1. Group 1 - 768 Bit MODP
00025  * Generator: 2
00026  * Prime: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 }
00027  */
00028 static const u8 dh_group1_generator[1] = { 0x02 };
00029 static const u8 dh_group1_prime[96] = {
00030         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
00031         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
00032         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
00033         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
00034         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
00035         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
00036         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
00037         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
00038         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
00039         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
00040         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x3A, 0x36, 0x20,
00041         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
00042 };
00043 
00044 /* RFC 4306, B.2. Group 2 - 1024 Bit MODP
00045  * Generator: 2
00046  * Prime: 2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 }
00047  */
00048 static const u8 dh_group2_generator[1] = { 0x02 };
00049 static const u8 dh_group2_prime[128] = {
00050         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
00051         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
00052         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
00053         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
00054         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
00055         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
00056         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
00057         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
00058         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
00059         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
00060         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
00061         0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
00062         0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
00063         0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
00064         0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81,
00065         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
00066 };
00067 
00068 #endif /* ALL_DH_GROUPS */
00069 
00070 /* RFC 3526, 2. Group 5 - 1536 Bit MODP
00071  * Generator: 2
00072  * Prime: 2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 pi] + 741804 }
00073  */
00074 static const u8 dh_group5_generator[1] = { 0x02 };
00075 static const u8 dh_group5_prime[192] = {
00076         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
00077         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
00078         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
00079         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
00080         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
00081         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
00082         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
00083         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
00084         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
00085         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
00086         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
00087         0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
00088         0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
00089         0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
00090         0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
00091         0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
00092         0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
00093         0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
00094         0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
00095         0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
00096         0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
00097         0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
00098         0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x23, 0x73, 0x27,
00099         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
00100 };
00101 
00102 #ifdef ALL_DH_GROUPS
00103 
00104 /* RFC 3526, 3. Group 14 - 2048 Bit MODP
00105  * Generator: 2
00106  * Prime: 2^2048 - 2^1984 - 1 + 2^64 * { [2^1918 pi] + 124476 }
00107  */
00108 static const u8 dh_group14_generator[1] = { 0x02 };
00109 static const u8 dh_group14_prime[256] = {
00110         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
00111         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
00112         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
00113         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
00114         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
00115         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
00116         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
00117         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
00118         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
00119         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
00120         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
00121         0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
00122         0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
00123         0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
00124         0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
00125         0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
00126         0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
00127         0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
00128         0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
00129         0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
00130         0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
00131         0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
00132         0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
00133         0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
00134         0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
00135         0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
00136         0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
00137         0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
00138         0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
00139         0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
00140         0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68,
00141         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
00142 };
00143 
00144 /* RFC 3526, 4. Group 15 - 3072 Bit MODP
00145  * Generator: 2
00146  * Prime: 2^3072 - 2^3008 - 1 + 2^64 * { [2^2942 pi] + 1690314 }
00147  */
00148 static const u8 dh_group15_generator[1] = { 0x02 };
00149 static const u8 dh_group15_prime[384] = {
00150         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
00151         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
00152         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
00153         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
00154         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
00155         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
00156         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
00157         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
00158         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
00159         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
00160         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
00161         0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
00162         0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
00163         0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
00164         0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
00165         0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
00166         0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
00167         0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
00168         0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
00169         0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
00170         0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
00171         0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
00172         0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
00173         0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
00174         0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
00175         0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
00176         0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
00177         0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
00178         0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
00179         0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
00180         0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
00181         0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
00182         0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
00183         0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
00184         0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
00185         0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
00186         0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
00187         0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
00188         0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
00189         0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
00190         0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
00191         0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
00192         0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
00193         0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
00194         0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
00195         0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
00196         0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x3A, 0xD2, 0xCA,
00197         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
00198 };
00199 
00200 /* RFC 3526, 5. Group 16 - 4096 Bit MODP
00201  * Generator: 2
00202  * Prime: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 }
00203  */
00204 static const u8 dh_group16_generator[1] = { 0x02 };
00205 static const u8 dh_group16_prime[512] = {
00206         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
00207         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
00208         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
00209         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
00210         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
00211         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
00212         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
00213         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
00214         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
00215         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
00216         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
00217         0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
00218         0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
00219         0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
00220         0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
00221         0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
00222         0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
00223         0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
00224         0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
00225         0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
00226         0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
00227         0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
00228         0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
00229         0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
00230         0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
00231         0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
00232         0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
00233         0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
00234         0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
00235         0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
00236         0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
00237         0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
00238         0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
00239         0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
00240         0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
00241         0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
00242         0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
00243         0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
00244         0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
00245         0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
00246         0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
00247         0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
00248         0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
00249         0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
00250         0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
00251         0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
00252         0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
00253         0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
00254         0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
00255         0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
00256         0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
00257         0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
00258         0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
00259         0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
00260         0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
00261         0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
00262         0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
00263         0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
00264         0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
00265         0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
00266         0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
00267         0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
00268         0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x06, 0x31, 0x99,
00269         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
00270 };
00271 
00272 /* RFC 3526, 6. Group 17 - 6144 Bit MODP
00273  * Generator: 2
00274  * Prime: 2^6144 - 2^6080 - 1 + 2^64 * { [2^6014 pi] + 929484 }
00275  */
00276 static const u8 dh_group17_generator[1] = { 0x02 };
00277 static const u8 dh_group17_prime[768] = {
00278         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
00279         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
00280         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
00281         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
00282         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
00283         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
00284         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
00285         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
00286         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
00287         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
00288         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
00289         0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
00290         0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
00291         0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
00292         0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
00293         0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
00294         0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
00295         0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
00296         0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
00297         0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
00298         0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
00299         0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
00300         0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
00301         0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
00302         0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
00303         0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
00304         0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
00305         0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
00306         0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
00307         0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
00308         0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
00309         0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
00310         0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
00311         0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
00312         0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
00313         0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
00314         0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
00315         0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
00316         0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
00317         0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
00318         0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
00319         0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
00320         0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
00321         0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
00322         0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
00323         0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
00324         0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
00325         0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
00326         0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
00327         0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
00328         0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
00329         0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
00330         0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
00331         0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
00332         0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
00333         0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
00334         0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
00335         0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
00336         0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
00337         0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
00338         0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
00339         0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
00340         0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92,
00341         0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26,
00342         0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE,
00343         0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD,
00344         0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E,
00345         0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE,
00346         0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31,
00347         0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18,
00348         0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED,
00349         0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B,
00350         0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B,
00351         0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42,
00352         0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF,
00353         0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC,
00354         0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03,
00355         0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6,
00356         0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82,
00357         0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E,
00358         0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3,
00359         0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE,
00360         0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5,
00361         0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA,
00362         0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8,
00363         0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0,
00364         0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28,
00365         0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76,
00366         0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0,
00367         0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C,
00368         0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32,
00369         0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68,
00370         0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE,
00371         0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6,
00372         0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xCC, 0x40, 0x24,
00373         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
00374 };
00375 
00376 /* RFC 3526, 7. Group 18 - 8192 Bit MODP
00377  * Generator: 2
00378  * Prime: 2^8192 - 2^8128 - 1 + 2^64 * { [2^8062 pi] + 4743158 }
00379  */
00380 static const u8 dh_group18_generator[1] = { 0x02 };
00381 static const u8 dh_group18_prime[1024] = {
00382         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
00383         0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
00384         0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
00385         0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
00386         0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
00387         0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
00388         0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
00389         0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
00390         0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
00391         0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
00392         0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
00393         0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
00394         0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
00395         0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
00396         0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
00397         0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
00398         0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
00399         0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
00400         0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
00401         0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
00402         0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
00403         0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
00404         0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C,
00405         0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
00406         0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03,
00407         0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F,
00408         0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
00409         0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18,
00410         0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5,
00411         0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
00412         0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D,
00413         0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33,
00414         0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
00415         0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A,
00416         0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D,
00417         0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
00418         0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7,
00419         0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D,
00420         0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
00421         0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64,
00422         0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64,
00423         0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
00424         0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C,
00425         0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2,
00426         0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
00427         0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E,
00428         0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01,
00429         0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7,
00430         0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26,
00431         0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C,
00432         0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA,
00433         0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8,
00434         0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9,
00435         0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6,
00436         0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D,
00437         0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2,
00438         0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED,
00439         0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF,
00440         0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C,
00441         0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9,
00442         0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1,
00443         0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F,
00444         0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92,
00445         0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26,
00446         0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE,
00447         0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD,
00448         0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E,
00449         0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE,
00450         0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31,
00451         0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18,
00452         0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED,
00453         0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B,
00454         0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B,
00455         0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42,
00456         0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF,
00457         0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC,
00458         0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03,
00459         0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6,
00460         0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82,
00461         0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E,
00462         0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3,
00463         0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE,
00464         0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5,
00465         0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA,
00466         0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8,
00467         0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0,
00468         0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28,
00469         0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76,
00470         0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0,
00471         0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C,
00472         0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32,
00473         0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68,
00474         0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE,
00475         0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6,
00476         0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xBE, 0x11, 0x59,
00477         0x74, 0xA3, 0x92, 0x6F, 0x12, 0xFE, 0xE5, 0xE4,
00478         0x38, 0x77, 0x7C, 0xB6, 0xA9, 0x32, 0xDF, 0x8C,
00479         0xD8, 0xBE, 0xC4, 0xD0, 0x73, 0xB9, 0x31, 0xBA,
00480         0x3B, 0xC8, 0x32, 0xB6, 0x8D, 0x9D, 0xD3, 0x00,
00481         0x74, 0x1F, 0xA7, 0xBF, 0x8A, 0xFC, 0x47, 0xED,
00482         0x25, 0x76, 0xF6, 0x93, 0x6B, 0xA4, 0x24, 0x66,
00483         0x3A, 0xAB, 0x63, 0x9C, 0x5A, 0xE4, 0xF5, 0x68,
00484         0x34, 0x23, 0xB4, 0x74, 0x2B, 0xF1, 0xC9, 0x78,
00485         0x23, 0x8F, 0x16, 0xCB, 0xE3, 0x9D, 0x65, 0x2D,
00486         0xE3, 0xFD, 0xB8, 0xBE, 0xFC, 0x84, 0x8A, 0xD9,
00487         0x22, 0x22, 0x2E, 0x04, 0xA4, 0x03, 0x7C, 0x07,
00488         0x13, 0xEB, 0x57, 0xA8, 0x1A, 0x23, 0xF0, 0xC7,
00489         0x34, 0x73, 0xFC, 0x64, 0x6C, 0xEA, 0x30, 0x6B,
00490         0x4B, 0xCB, 0xC8, 0x86, 0x2F, 0x83, 0x85, 0xDD,
00491         0xFA, 0x9D, 0x4B, 0x7F, 0xA2, 0xC0, 0x87, 0xE8,
00492         0x79, 0x68, 0x33, 0x03, 0xED, 0x5B, 0xDD, 0x3A,
00493         0x06, 0x2B, 0x3C, 0xF5, 0xB3, 0xA2, 0x78, 0xA6,
00494         0x6D, 0x2A, 0x13, 0xF8, 0x3F, 0x44, 0xF8, 0x2D,
00495         0xDF, 0x31, 0x0E, 0xE0, 0x74, 0xAB, 0x6A, 0x36,
00496         0x45, 0x97, 0xE8, 0x99, 0xA0, 0x25, 0x5D, 0xC1,
00497         0x64, 0xF3, 0x1C, 0xC5, 0x08, 0x46, 0x85, 0x1D,
00498         0xF9, 0xAB, 0x48, 0x19, 0x5D, 0xED, 0x7E, 0xA1,
00499         0xB1, 0xD5, 0x10, 0xBD, 0x7E, 0xE7, 0x4D, 0x73,
00500         0xFA, 0xF3, 0x6B, 0xC3, 0x1E, 0xCF, 0xA2, 0x68,
00501         0x35, 0x90, 0x46, 0xF4, 0xEB, 0x87, 0x9F, 0x92,
00502         0x40, 0x09, 0x43, 0x8B, 0x48, 0x1C, 0x6C, 0xD7,
00503         0x88, 0x9A, 0x00, 0x2E, 0xD5, 0xEE, 0x38, 0x2B,
00504         0xC9, 0x19, 0x0D, 0xA6, 0xFC, 0x02, 0x6E, 0x47,
00505         0x95, 0x58, 0xE4, 0x47, 0x56, 0x77, 0xE9, 0xAA,
00506         0x9E, 0x30, 0x50, 0xE2, 0x76, 0x56, 0x94, 0xDF,
00507         0xC8, 0x1F, 0x56, 0xE8, 0x80, 0xB9, 0x6E, 0x71,
00508         0x60, 0xC9, 0x80, 0xDD, 0x98, 0xED, 0xD3, 0xDF,
00509         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
00510 };
00511 
00512 #endif /* ALL_DH_GROUPS */
00513 
00514 
00515 #define DH_GROUP(id) \
00516 { id, dh_group ## id ## _generator, sizeof(dh_group ## id ## _generator), \
00517 dh_group ## id ## _prime, sizeof(dh_group ## id ## _prime) }
00518                 
00519 
00520 static struct dh_group dh_groups[] = {
00521         DH_GROUP(5),
00522 #ifdef ALL_DH_GROUPS
00523         DH_GROUP(1),
00524         DH_GROUP(2),
00525         DH_GROUP(14),
00526         DH_GROUP(15),
00527         DH_GROUP(16),
00528         DH_GROUP(17),
00529         DH_GROUP(18)
00530 #endif /* ALL_DH_GROUPS */
00531 };
00532 
00533 #define NUM_DH_GROUPS (sizeof(dh_groups) / sizeof(dh_groups[0]))
00534 
00535 
00536 const struct dh_group * dh_groups_get(int id)
00537 {
00538         size_t i;
00539 
00540         for (i = 0; i < NUM_DH_GROUPS; i++) {
00541                 if (dh_groups[i].id == id)
00542                         return &dh_groups[i];
00543         }
00544         return NULL;
00545 }
00546 
00547 
00554 struct wpabuf * dh_init(const struct dh_group *dh, struct wpabuf **priv)
00555 {
00556         struct wpabuf *pv;
00557         size_t pv_len;
00558 
00559         if (dh == NULL)
00560                 return NULL;
00561 
00562         wpabuf_free(*priv);
00563         *priv = wpabuf_alloc(dh->prime_len);
00564         if (*priv == NULL)
00565                 return NULL;
00566 
00567         if (os_get_random(wpabuf_put(*priv, dh->prime_len), dh->prime_len)) {
00568                 wpabuf_free(*priv);
00569                 *priv = NULL;
00570                 return NULL;
00571         }
00572 
00573         if (os_memcmp(wpabuf_head(*priv), dh->prime, dh->prime_len) > 0) {
00574                 /* Make sure private value is smaller than prime */
00575                 *(wpabuf_mhead_u8(*priv)) = 0;
00576         }
00577         wpa_hexdump_buf_key(MSG_DEBUG, "DH: private value", *priv);
00578 
00579         pv_len = dh->prime_len;
00580         pv = wpabuf_alloc(pv_len);
00581         if (pv == NULL)
00582                 return NULL;
00583         if (crypto_mod_exp(dh->generator, dh->generator_len,
00584                            wpabuf_head(*priv), wpabuf_len(*priv),
00585                            dh->prime, dh->prime_len, wpabuf_mhead(pv),
00586                            &pv_len) < 0) {
00587                 wpabuf_free(pv);
00588                 wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed");
00589                 return NULL;
00590         }
00591         wpabuf_put(pv, pv_len);
00592         wpa_hexdump_buf(MSG_DEBUG, "DH: public value", pv);
00593 
00594         return pv;
00595 }
00596 
00597 
00605 struct wpabuf * dh_derive_shared(const struct wpabuf *peer_public,
00606                                  const struct wpabuf *own_private,
00607                                  const struct dh_group *dh)
00608 {
00609         struct wpabuf *shared;
00610         size_t shared_len;
00611 
00612         if (dh == NULL || peer_public == NULL || own_private == NULL)
00613                 return NULL;
00614 
00615         shared_len = dh->prime_len;
00616         shared = wpabuf_alloc(shared_len);
00617         if (shared == NULL)
00618                 return NULL;
00619         if (crypto_mod_exp(wpabuf_head(peer_public), wpabuf_len(peer_public),
00620                            wpabuf_head(own_private), wpabuf_len(own_private),
00621                            dh->prime, dh->prime_len,
00622                            wpabuf_mhead(shared), &shared_len) < 0) {
00623                 wpabuf_free(shared);
00624                 wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed");
00625                 return NULL;
00626         }
00627         wpabuf_put(shared, shared_len);
00628         wpa_hexdump_buf_key(MSG_DEBUG, "DH: shared key", shared);
00629 
00630         return shared;
00631 }


wpa_supplicant_node
Author(s): Package maintained by Blaise Gassend
autogenerated on Thu Apr 24 2014 15:33:19