dh_groups.c revision 209158
1189251Ssam/* 2189251Ssam * Diffie-Hellman groups 3189251Ssam * Copyright (c) 2007, Jouni Malinen <j@w1.fi> 4189251Ssam * 5189251Ssam * This program is free software; you can redistribute it and/or modify 6189251Ssam * it under the terms of the GNU General Public License version 2 as 7189251Ssam * published by the Free Software Foundation. 8189251Ssam * 9189251Ssam * Alternatively, this software may be distributed under the terms of BSD 10189251Ssam * license. 11189251Ssam * 12189251Ssam * See README and COPYING for more details. 13189251Ssam */ 14189251Ssam 15189251Ssam#include "includes.h" 16189251Ssam 17189251Ssam#include "common.h" 18189251Ssam#include "crypto.h" 19189251Ssam#include "dh_groups.h" 20189251Ssam 21189251Ssam 22209158Srpaulo#ifdef ALL_DH_GROUPS 23209158Srpaulo 24189251Ssam/* RFC 4306, B.1. Group 1 - 768 Bit MODP 25189251Ssam * Generator: 2 26189251Ssam * Prime: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 } 27189251Ssam */ 28189251Ssamstatic const u8 dh_group1_generator[1] = { 0x02 }; 29189251Ssamstatic const u8 dh_group1_prime[96] = { 30189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 31189251Ssam 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 32189251Ssam 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 33189251Ssam 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 34189251Ssam 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 35189251Ssam 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 36189251Ssam 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 37189251Ssam 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 38189251Ssam 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 39189251Ssam 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 40189251Ssam 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x3A, 0x36, 0x20, 41189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 42189251Ssam}; 43189251Ssam 44189251Ssam/* RFC 4306, B.2. Group 2 - 1024 Bit MODP 45189251Ssam * Generator: 2 46189251Ssam * Prime: 2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 } 47189251Ssam */ 48189251Ssamstatic const u8 dh_group2_generator[1] = { 0x02 }; 49189251Ssamstatic const u8 dh_group2_prime[128] = { 50189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 51189251Ssam 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 52189251Ssam 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 53189251Ssam 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 54189251Ssam 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 55189251Ssam 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 56189251Ssam 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 57189251Ssam 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 58189251Ssam 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 59189251Ssam 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 60189251Ssam 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 61189251Ssam 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 62189251Ssam 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 63189251Ssam 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 64189251Ssam 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81, 65189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 66189251Ssam}; 67189251Ssam 68209158Srpaulo#endif /* ALL_DH_GROUPS */ 69209158Srpaulo 70189251Ssam/* RFC 3526, 2. Group 5 - 1536 Bit MODP 71189251Ssam * Generator: 2 72189251Ssam * Prime: 2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 pi] + 741804 } 73189251Ssam */ 74189251Ssamstatic const u8 dh_group5_generator[1] = { 0x02 }; 75189251Ssamstatic const u8 dh_group5_prime[192] = { 76189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 77189251Ssam 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 78189251Ssam 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 79189251Ssam 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 80189251Ssam 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 81189251Ssam 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 82189251Ssam 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 83189251Ssam 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 84189251Ssam 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 85189251Ssam 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 86189251Ssam 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 87189251Ssam 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 88189251Ssam 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 89189251Ssam 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 90189251Ssam 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 91189251Ssam 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 92189251Ssam 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 93189251Ssam 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 94189251Ssam 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 95189251Ssam 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 96189251Ssam 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 97189251Ssam 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 98189251Ssam 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x23, 0x73, 0x27, 99189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 100189251Ssam}; 101189251Ssam 102209158Srpaulo#ifdef ALL_DH_GROUPS 103209158Srpaulo 104189251Ssam/* RFC 3526, 3. Group 14 - 2048 Bit MODP 105189251Ssam * Generator: 2 106189251Ssam * Prime: 2^2048 - 2^1984 - 1 + 2^64 * { [2^1918 pi] + 124476 } 107189251Ssam */ 108189251Ssamstatic const u8 dh_group14_generator[1] = { 0x02 }; 109189251Ssamstatic const u8 dh_group14_prime[256] = { 110189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 111189251Ssam 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 112189251Ssam 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 113189251Ssam 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 114189251Ssam 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 115189251Ssam 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 116189251Ssam 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 117189251Ssam 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 118189251Ssam 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 119189251Ssam 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 120189251Ssam 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 121189251Ssam 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 122189251Ssam 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 123189251Ssam 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 124189251Ssam 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 125189251Ssam 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 126189251Ssam 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 127189251Ssam 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 128189251Ssam 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 129189251Ssam 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 130189251Ssam 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 131189251Ssam 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 132189251Ssam 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 133189251Ssam 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 134189251Ssam 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 135189251Ssam 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 136189251Ssam 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 137189251Ssam 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 138189251Ssam 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 139189251Ssam 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 140189251Ssam 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68, 141189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 142189251Ssam}; 143189251Ssam 144189251Ssam/* RFC 3526, 4. Group 15 - 3072 Bit MODP 145189251Ssam * Generator: 2 146189251Ssam * Prime: 2^3072 - 2^3008 - 1 + 2^64 * { [2^2942 pi] + 1690314 } 147189251Ssam */ 148189251Ssamstatic const u8 dh_group15_generator[1] = { 0x02 }; 149189251Ssamstatic const u8 dh_group15_prime[384] = { 150189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 151189251Ssam 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 152189251Ssam 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 153189251Ssam 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 154189251Ssam 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 155189251Ssam 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 156189251Ssam 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 157189251Ssam 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 158189251Ssam 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 159189251Ssam 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 160189251Ssam 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 161189251Ssam 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 162189251Ssam 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 163189251Ssam 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 164189251Ssam 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 165189251Ssam 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 166189251Ssam 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 167189251Ssam 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 168189251Ssam 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 169189251Ssam 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 170189251Ssam 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 171189251Ssam 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 172189251Ssam 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 173189251Ssam 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 174189251Ssam 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 175189251Ssam 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 176189251Ssam 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 177189251Ssam 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 178189251Ssam 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 179189251Ssam 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 180189251Ssam 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 181189251Ssam 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 182189251Ssam 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 183189251Ssam 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 184189251Ssam 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 185189251Ssam 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 186189251Ssam 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 187189251Ssam 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 188189251Ssam 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 189189251Ssam 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 190189251Ssam 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 191189251Ssam 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 192189251Ssam 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 193189251Ssam 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 194189251Ssam 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 195189251Ssam 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 196189251Ssam 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x3A, 0xD2, 0xCA, 197189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 198189251Ssam}; 199189251Ssam 200189251Ssam/* RFC 3526, 5. Group 16 - 4096 Bit MODP 201189251Ssam * Generator: 2 202189251Ssam * Prime: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 } 203189251Ssam */ 204189251Ssamstatic const u8 dh_group16_generator[1] = { 0x02 }; 205189251Ssamstatic const u8 dh_group16_prime[512] = { 206189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 207189251Ssam 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 208189251Ssam 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 209189251Ssam 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 210189251Ssam 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 211189251Ssam 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 212189251Ssam 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 213189251Ssam 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 214189251Ssam 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 215189251Ssam 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 216189251Ssam 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 217189251Ssam 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 218189251Ssam 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 219189251Ssam 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 220189251Ssam 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 221189251Ssam 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 222189251Ssam 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 223189251Ssam 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 224189251Ssam 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 225189251Ssam 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 226189251Ssam 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 227189251Ssam 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 228189251Ssam 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 229189251Ssam 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 230189251Ssam 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 231189251Ssam 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 232189251Ssam 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 233189251Ssam 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 234189251Ssam 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 235189251Ssam 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 236189251Ssam 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 237189251Ssam 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 238189251Ssam 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 239189251Ssam 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 240189251Ssam 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 241189251Ssam 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 242189251Ssam 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 243189251Ssam 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 244189251Ssam 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 245189251Ssam 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 246189251Ssam 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 247189251Ssam 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 248189251Ssam 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 249189251Ssam 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 250189251Ssam 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 251189251Ssam 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 252189251Ssam 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 253189251Ssam 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 254189251Ssam 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 255189251Ssam 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 256189251Ssam 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 257189251Ssam 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 258189251Ssam 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 259189251Ssam 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 260189251Ssam 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 261189251Ssam 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 262189251Ssam 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 263189251Ssam 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 264189251Ssam 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 265189251Ssam 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 266189251Ssam 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 267189251Ssam 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 268189251Ssam 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x06, 0x31, 0x99, 269189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 270189251Ssam}; 271189251Ssam 272189251Ssam/* RFC 3526, 6. Group 17 - 6144 Bit MODP 273189251Ssam * Generator: 2 274189251Ssam * Prime: 2^6144 - 2^6080 - 1 + 2^64 * { [2^6014 pi] + 929484 } 275189251Ssam */ 276189251Ssamstatic const u8 dh_group17_generator[1] = { 0x02 }; 277189251Ssamstatic const u8 dh_group17_prime[768] = { 278189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 279189251Ssam 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 280189251Ssam 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 281189251Ssam 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 282189251Ssam 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 283189251Ssam 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 284189251Ssam 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 285189251Ssam 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 286189251Ssam 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 287189251Ssam 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 288189251Ssam 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 289189251Ssam 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 290189251Ssam 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 291189251Ssam 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 292189251Ssam 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 293189251Ssam 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 294189251Ssam 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 295189251Ssam 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 296189251Ssam 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 297189251Ssam 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 298189251Ssam 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 299189251Ssam 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 300189251Ssam 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 301189251Ssam 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 302189251Ssam 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 303189251Ssam 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 304189251Ssam 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 305189251Ssam 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 306189251Ssam 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 307189251Ssam 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 308189251Ssam 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 309189251Ssam 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 310189251Ssam 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 311189251Ssam 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 312189251Ssam 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 313189251Ssam 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 314189251Ssam 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 315189251Ssam 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 316189251Ssam 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 317189251Ssam 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 318189251Ssam 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 319189251Ssam 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 320189251Ssam 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 321189251Ssam 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 322189251Ssam 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 323189251Ssam 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 324189251Ssam 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 325189251Ssam 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 326189251Ssam 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 327189251Ssam 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 328189251Ssam 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 329189251Ssam 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 330189251Ssam 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 331189251Ssam 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 332189251Ssam 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 333189251Ssam 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 334189251Ssam 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 335189251Ssam 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 336189251Ssam 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 337189251Ssam 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 338189251Ssam 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 339189251Ssam 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 340189251Ssam 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92, 341189251Ssam 0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26, 342189251Ssam 0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE, 343189251Ssam 0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD, 344189251Ssam 0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E, 345189251Ssam 0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE, 346189251Ssam 0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31, 347189251Ssam 0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18, 348189251Ssam 0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED, 349189251Ssam 0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B, 350189251Ssam 0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B, 351189251Ssam 0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42, 352189251Ssam 0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF, 353189251Ssam 0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC, 354189251Ssam 0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03, 355189251Ssam 0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6, 356189251Ssam 0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82, 357189251Ssam 0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E, 358189251Ssam 0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3, 359189251Ssam 0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE, 360189251Ssam 0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5, 361189251Ssam 0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA, 362189251Ssam 0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8, 363189251Ssam 0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0, 364189251Ssam 0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28, 365189251Ssam 0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76, 366189251Ssam 0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0, 367189251Ssam 0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C, 368189251Ssam 0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32, 369189251Ssam 0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68, 370189251Ssam 0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE, 371189251Ssam 0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6, 372189251Ssam 0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xCC, 0x40, 0x24, 373189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 374189251Ssam}; 375189251Ssam 376189251Ssam/* RFC 3526, 7. Group 18 - 8192 Bit MODP 377189251Ssam * Generator: 2 378189251Ssam * Prime: 2^8192 - 2^8128 - 1 + 2^64 * { [2^8062 pi] + 4743158 } 379189251Ssam */ 380189251Ssamstatic const u8 dh_group18_generator[1] = { 0x02 }; 381189251Ssamstatic const u8 dh_group18_prime[1024] = { 382189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 383189251Ssam 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 384189251Ssam 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 385189251Ssam 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 386189251Ssam 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 387189251Ssam 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 388189251Ssam 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 389189251Ssam 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 390189251Ssam 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 391189251Ssam 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 392189251Ssam 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 393189251Ssam 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 394189251Ssam 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 395189251Ssam 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 396189251Ssam 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 397189251Ssam 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 398189251Ssam 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 399189251Ssam 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 400189251Ssam 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 401189251Ssam 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 402189251Ssam 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 403189251Ssam 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 404189251Ssam 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 405189251Ssam 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 406189251Ssam 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 407189251Ssam 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 408189251Ssam 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 409189251Ssam 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 410189251Ssam 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 411189251Ssam 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 412189251Ssam 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 413189251Ssam 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 414189251Ssam 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 415189251Ssam 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 416189251Ssam 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 417189251Ssam 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 418189251Ssam 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 419189251Ssam 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 420189251Ssam 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 421189251Ssam 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 422189251Ssam 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 423189251Ssam 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 424189251Ssam 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 425189251Ssam 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 426189251Ssam 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 427189251Ssam 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 428189251Ssam 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 429189251Ssam 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 430189251Ssam 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 431189251Ssam 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 432189251Ssam 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 433189251Ssam 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 434189251Ssam 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 435189251Ssam 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 436189251Ssam 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 437189251Ssam 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 438189251Ssam 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 439189251Ssam 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 440189251Ssam 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 441189251Ssam 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 442189251Ssam 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 443189251Ssam 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 444189251Ssam 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92, 445189251Ssam 0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26, 446189251Ssam 0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE, 447189251Ssam 0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD, 448189251Ssam 0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E, 449189251Ssam 0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE, 450189251Ssam 0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31, 451189251Ssam 0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18, 452189251Ssam 0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED, 453189251Ssam 0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B, 454189251Ssam 0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B, 455189251Ssam 0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42, 456189251Ssam 0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF, 457189251Ssam 0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC, 458189251Ssam 0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03, 459189251Ssam 0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6, 460189251Ssam 0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82, 461189251Ssam 0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E, 462189251Ssam 0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3, 463189251Ssam 0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE, 464189251Ssam 0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5, 465189251Ssam 0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA, 466189251Ssam 0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8, 467189251Ssam 0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0, 468189251Ssam 0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28, 469189251Ssam 0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76, 470189251Ssam 0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0, 471189251Ssam 0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C, 472189251Ssam 0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32, 473189251Ssam 0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68, 474189251Ssam 0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE, 475189251Ssam 0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6, 476189251Ssam 0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xBE, 0x11, 0x59, 477189251Ssam 0x74, 0xA3, 0x92, 0x6F, 0x12, 0xFE, 0xE5, 0xE4, 478189251Ssam 0x38, 0x77, 0x7C, 0xB6, 0xA9, 0x32, 0xDF, 0x8C, 479189251Ssam 0xD8, 0xBE, 0xC4, 0xD0, 0x73, 0xB9, 0x31, 0xBA, 480189251Ssam 0x3B, 0xC8, 0x32, 0xB6, 0x8D, 0x9D, 0xD3, 0x00, 481189251Ssam 0x74, 0x1F, 0xA7, 0xBF, 0x8A, 0xFC, 0x47, 0xED, 482189251Ssam 0x25, 0x76, 0xF6, 0x93, 0x6B, 0xA4, 0x24, 0x66, 483189251Ssam 0x3A, 0xAB, 0x63, 0x9C, 0x5A, 0xE4, 0xF5, 0x68, 484189251Ssam 0x34, 0x23, 0xB4, 0x74, 0x2B, 0xF1, 0xC9, 0x78, 485189251Ssam 0x23, 0x8F, 0x16, 0xCB, 0xE3, 0x9D, 0x65, 0x2D, 486189251Ssam 0xE3, 0xFD, 0xB8, 0xBE, 0xFC, 0x84, 0x8A, 0xD9, 487189251Ssam 0x22, 0x22, 0x2E, 0x04, 0xA4, 0x03, 0x7C, 0x07, 488189251Ssam 0x13, 0xEB, 0x57, 0xA8, 0x1A, 0x23, 0xF0, 0xC7, 489189251Ssam 0x34, 0x73, 0xFC, 0x64, 0x6C, 0xEA, 0x30, 0x6B, 490189251Ssam 0x4B, 0xCB, 0xC8, 0x86, 0x2F, 0x83, 0x85, 0xDD, 491189251Ssam 0xFA, 0x9D, 0x4B, 0x7F, 0xA2, 0xC0, 0x87, 0xE8, 492189251Ssam 0x79, 0x68, 0x33, 0x03, 0xED, 0x5B, 0xDD, 0x3A, 493189251Ssam 0x06, 0x2B, 0x3C, 0xF5, 0xB3, 0xA2, 0x78, 0xA6, 494189251Ssam 0x6D, 0x2A, 0x13, 0xF8, 0x3F, 0x44, 0xF8, 0x2D, 495189251Ssam 0xDF, 0x31, 0x0E, 0xE0, 0x74, 0xAB, 0x6A, 0x36, 496189251Ssam 0x45, 0x97, 0xE8, 0x99, 0xA0, 0x25, 0x5D, 0xC1, 497189251Ssam 0x64, 0xF3, 0x1C, 0xC5, 0x08, 0x46, 0x85, 0x1D, 498189251Ssam 0xF9, 0xAB, 0x48, 0x19, 0x5D, 0xED, 0x7E, 0xA1, 499189251Ssam 0xB1, 0xD5, 0x10, 0xBD, 0x7E, 0xE7, 0x4D, 0x73, 500189251Ssam 0xFA, 0xF3, 0x6B, 0xC3, 0x1E, 0xCF, 0xA2, 0x68, 501189251Ssam 0x35, 0x90, 0x46, 0xF4, 0xEB, 0x87, 0x9F, 0x92, 502189251Ssam 0x40, 0x09, 0x43, 0x8B, 0x48, 0x1C, 0x6C, 0xD7, 503189251Ssam 0x88, 0x9A, 0x00, 0x2E, 0xD5, 0xEE, 0x38, 0x2B, 504189251Ssam 0xC9, 0x19, 0x0D, 0xA6, 0xFC, 0x02, 0x6E, 0x47, 505189251Ssam 0x95, 0x58, 0xE4, 0x47, 0x56, 0x77, 0xE9, 0xAA, 506189251Ssam 0x9E, 0x30, 0x50, 0xE2, 0x76, 0x56, 0x94, 0xDF, 507189251Ssam 0xC8, 0x1F, 0x56, 0xE8, 0x80, 0xB9, 0x6E, 0x71, 508189251Ssam 0x60, 0xC9, 0x80, 0xDD, 0x98, 0xED, 0xD3, 0xDF, 509189251Ssam 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 510189251Ssam}; 511189251Ssam 512209158Srpaulo#endif /* ALL_DH_GROUPS */ 513189251Ssam 514209158Srpaulo 515189251Ssam#define DH_GROUP(id) \ 516189251Ssam{ id, dh_group ## id ## _generator, sizeof(dh_group ## id ## _generator), \ 517189251Ssamdh_group ## id ## _prime, sizeof(dh_group ## id ## _prime) } 518189251Ssam 519189251Ssam 520189251Ssamstatic struct dh_group dh_groups[] = { 521209158Srpaulo DH_GROUP(5), 522209158Srpaulo#ifdef ALL_DH_GROUPS 523189251Ssam DH_GROUP(1), 524189251Ssam DH_GROUP(2), 525189251Ssam DH_GROUP(14), 526189251Ssam DH_GROUP(15), 527189251Ssam DH_GROUP(16), 528189251Ssam DH_GROUP(17), 529189251Ssam DH_GROUP(18) 530209158Srpaulo#endif /* ALL_DH_GROUPS */ 531189251Ssam}; 532189251Ssam 533189251Ssam#define NUM_DH_GROUPS (sizeof(dh_groups) / sizeof(dh_groups[0])) 534189251Ssam 535189251Ssam 536189251Ssamconst struct dh_group * dh_groups_get(int id) 537189251Ssam{ 538189251Ssam size_t i; 539189251Ssam 540189251Ssam for (i = 0; i < NUM_DH_GROUPS; i++) { 541189251Ssam if (dh_groups[i].id == id) 542189251Ssam return &dh_groups[i]; 543189251Ssam } 544189251Ssam return NULL; 545189251Ssam} 546189251Ssam 547189251Ssam 548189251Ssam/** 549189251Ssam * dh_init - Initialize Diffie-Hellman handshake 550189251Ssam * @dh: Selected Diffie-Hellman group 551189251Ssam * @priv: Pointer for returning Diffie-Hellman private key 552189251Ssam * Returns: Diffie-Hellman public value 553189251Ssam */ 554189251Ssamstruct wpabuf * dh_init(const struct dh_group *dh, struct wpabuf **priv) 555189251Ssam{ 556189251Ssam struct wpabuf *pv; 557189251Ssam size_t pv_len; 558189251Ssam 559189251Ssam if (dh == NULL) 560189251Ssam return NULL; 561189251Ssam 562189251Ssam wpabuf_free(*priv); 563189251Ssam *priv = wpabuf_alloc(dh->prime_len); 564189251Ssam if (*priv == NULL) 565189251Ssam return NULL; 566189251Ssam 567189251Ssam if (os_get_random(wpabuf_put(*priv, dh->prime_len), dh->prime_len)) { 568189251Ssam wpabuf_free(*priv); 569189251Ssam *priv = NULL; 570189251Ssam return NULL; 571189251Ssam } 572189251Ssam 573189251Ssam if (os_memcmp(wpabuf_head(*priv), dh->prime, dh->prime_len) > 0) { 574189251Ssam /* Make sure private value is smaller than prime */ 575189251Ssam *(wpabuf_mhead_u8(*priv)) = 0; 576189251Ssam } 577189251Ssam wpa_hexdump_buf_key(MSG_DEBUG, "DH: private value", *priv); 578189251Ssam 579189251Ssam pv_len = dh->prime_len; 580189251Ssam pv = wpabuf_alloc(pv_len); 581189251Ssam if (pv == NULL) 582189251Ssam return NULL; 583189251Ssam if (crypto_mod_exp(dh->generator, dh->generator_len, 584189251Ssam wpabuf_head(*priv), wpabuf_len(*priv), 585189251Ssam dh->prime, dh->prime_len, wpabuf_mhead(pv), 586189251Ssam &pv_len) < 0) { 587189251Ssam wpabuf_free(pv); 588189251Ssam wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed"); 589189251Ssam return NULL; 590189251Ssam } 591189251Ssam wpabuf_put(pv, pv_len); 592189251Ssam wpa_hexdump_buf(MSG_DEBUG, "DH: public value", pv); 593189251Ssam 594189251Ssam return pv; 595189251Ssam} 596189251Ssam 597189251Ssam 598189251Ssam/** 599189251Ssam * dh_derive_shared - Derive shared Diffie-Hellman key 600189251Ssam * @peer_public: Diffie-Hellman public value from peer 601189251Ssam * @own_private: Diffie-Hellman private key from dh_init() 602189251Ssam * @dh: Selected Diffie-Hellman group 603189251Ssam * Returns: Diffie-Hellman shared key 604189251Ssam */ 605189251Ssamstruct wpabuf * dh_derive_shared(const struct wpabuf *peer_public, 606189251Ssam const struct wpabuf *own_private, 607189251Ssam const struct dh_group *dh) 608189251Ssam{ 609189251Ssam struct wpabuf *shared; 610189251Ssam size_t shared_len; 611189251Ssam 612189251Ssam if (dh == NULL || peer_public == NULL || own_private == NULL) 613189251Ssam return NULL; 614189251Ssam 615189251Ssam shared_len = dh->prime_len; 616189251Ssam shared = wpabuf_alloc(shared_len); 617189251Ssam if (shared == NULL) 618189251Ssam return NULL; 619189251Ssam if (crypto_mod_exp(wpabuf_head(peer_public), wpabuf_len(peer_public), 620189251Ssam wpabuf_head(own_private), wpabuf_len(own_private), 621189251Ssam dh->prime, dh->prime_len, 622189251Ssam wpabuf_put(shared, shared_len), &shared_len) < 0) { 623189251Ssam wpabuf_free(shared); 624189251Ssam wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed"); 625189251Ssam return NULL; 626189251Ssam } 627189251Ssam wpa_hexdump_buf_key(MSG_DEBUG, "DH: shared key", shared); 628189251Ssam 629189251Ssam return shared; 630189251Ssam} 631