dh_groups.c revision c5ec7f57ead87efa365800228aa0b09a12d9e6c4
18d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko/* 28d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko * Diffie-Hellman groups 38d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko * Copyright (c) 2007, Jouni Malinen <j@w1.fi> 48d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko * 58d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko * This software may be distributed under the terms of the BSD license. 68d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko * See README for more details. 78d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko */ 88d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 98d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "includes.h" 108d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 118d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "common.h" 128d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "crypto.h" 138d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "random.h" 148d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "dh_groups.h" 158d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 168d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1730a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth#ifdef ALL_DH_GROUPS 18a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 198d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko/* RFC 4306, B.1. Group 1 - 768 Bit MODP 208d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko * Generator: 2 2196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko * Prime: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 } 2230a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth */ 238d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkostatic const u8 dh_group1_generator[1] = { 0x02 }; 248d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkostatic const u8 dh_group1_prime[96] = { 258d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 26a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 27a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 281952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenko 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 29a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 308d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 31aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 328d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 338d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 34da5922f4864b5da254c6676af8833c42adaa6d86Dmitri Gribenko 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 35da5922f4864b5da254c6676af8833c42adaa6d86Dmitri Gribenko 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x3A, 0x36, 0x20, 366f36366c85dc81d67d70efdeeea4cfc382053febDmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 37a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko}; 388d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 398d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko/* RFC 4306, B.2. Group 2 - 1024 Bit MODP 40a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko * Generator: 2 41a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko * Prime: 2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 } 42a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko */ 43a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkostatic const u8 dh_group2_generator[1] = { 0x02 }; 44a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkostatic const u8 dh_group2_prime[128] = { 45e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 46aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 471952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenko 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 481952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenko 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 491ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 501ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 518487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 5296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 5396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 5496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 551ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 5696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 5796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 589443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 599443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81, 609443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 61f843a580c4a54ca147f22422ee8ccfd2347784fcFariborz Jahanian}; 62f843a580c4a54ca147f22422ee8ccfd2347784fcFariborz Jahanian 639443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko#endif /* ALL_DH_GROUPS */ 64a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 65a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko/* RFC 3526, 2. Group 5 - 1536 Bit MODP 66a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko * Generator: 2 67a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko * Prime: 2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 pi] + 741804 } 68a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko */ 69a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkostatic const u8 dh_group5_generator[1] = { 0x02 }; 703f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenkostatic const u8 dh_group5_prime[192] = { 71a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 728d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 73a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 741952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenko 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 751952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenko 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 76a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 77a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 788d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 7996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 8096b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 8196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 8296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 8396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 8496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 8596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 8696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 8996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 9096b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 918d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 928d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 938d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x23, 0x73, 0x27, 948d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 958d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko}; 968536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian 97808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko#ifdef ALL_DH_GROUPS 988d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 997d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko/* RFC 3526, 3. Group 14 - 2048 Bit MODP 1007d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko * Generator: 2 1018d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko * Prime: 2^2048 - 2^1984 - 1 + 2^64 * { [2^1918 pi] + 124476 } 1027d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko */ 1037d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenkostatic const u8 dh_group14_generator[1] = { 0x02 }; 1048d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkostatic const u8 dh_group14_prime[256] = { 1058d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 1068d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 1078536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 108808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 1098d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 1107d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 1117d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 1127d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 1137d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 114a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 1157d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 1167d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 1177d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 1187d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 1198d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 1207d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 1217d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 1228d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 12396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 12496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 1258536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 126808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 12796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 1287d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 1297d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 1307d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 1317d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 13296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 1337d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 1347d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 13596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68, 1368d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 1378d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko}; 138e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 1398d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko/* RFC 3526, 4. Group 15 - 3072 Bit MODP 1408d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko * Generator: 2 1418d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko * Prime: 2^3072 - 2^3008 - 1 + 2^64 * { [2^2942 pi] + 1690314 } 142e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko */ 1438d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkostatic const u8 dh_group15_generator[1] = { 0x02 }; 1448d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkostatic const u8 dh_group15_prime[384] = { 1458d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 1468d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 1478d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 1488d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 149b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 150b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 151b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 152b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 153b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 1548d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 1558d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 1568d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 1578d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 1588d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 1598d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 160e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 1618d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 1628d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 1638d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 1648d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 1657d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 1667d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 1677d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 1687d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 1698d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 1708d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 171e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 1728d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 1738d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 1748d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 1753f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 1763f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 1778d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 1787d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 1797d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 1807d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 1817d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 1828d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 1833f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 1843f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 1853f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 1868d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 1878d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 1888d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 189a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 190a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 19189ab7d0012ffe02a335b765eeb9b48977a5ecd79Dmitri Gribenko 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x3A, 0xD2, 0xCA, 19289ab7d0012ffe02a335b765eeb9b48977a5ecd79Dmitri Gribenko 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 1939443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko}; 1949443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 1959443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko/* RFC 3526, 5. Group 16 - 4096 Bit MODP 1969443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko * Generator: 2 1970bd9838751384181ff387f2fb346896792b89617Dmitri Gribenko * Prime: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 } 1982a268f2629b49958427e8eb02f2c3d565be71accFariborz Jahanian */ 1992a268f2629b49958427e8eb02f2c3d565be71accFariborz Jahanianstatic const u8 dh_group16_generator[1] = { 0x02 }; 20028c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanianstatic const u8 dh_group16_prime[512] = { 20128c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 20228c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 20328c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 2040bd9838751384181ff387f2fb346896792b89617Dmitri Gribenko 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 2059edd2c8a2ff6c6326ff2d5b081929e4baaa798edDmitri Gribenko 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 2069edd2c8a2ff6c6326ff2d5b081929e4baaa798edDmitri Gribenko 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 2079edd2c8a2ff6c6326ff2d5b081929e4baaa798edDmitri Gribenko 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 2089edd2c8a2ff6c6326ff2d5b081929e4baaa798edDmitri Gribenko 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 2098487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 210eb8f69f094e95d0132e4a6817a2111ad188ab087Fariborz Jahanian 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 211a558d2e29817e36798875c96efb62251e53ff024Dmitri Gribenko 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 212a558d2e29817e36798875c96efb62251e53ff024Dmitri Gribenko 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 213a558d2e29817e36798875c96efb62251e53ff024Dmitri Gribenko 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 21499a7057098c56211e641705e1ff38d4b7c8b309dFariborz Jahanian 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 215c5b0054693b3b3cafe6a13549358c22e07fcd4ffDmitri Gribenko 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 21699a7057098c56211e641705e1ff38d4b7c8b309dFariborz Jahanian 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 217664e860beb2550bef24fb8946192f61648a71d7fFariborz Jahanian 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 21804bf29eb1b197e0a103139ab5d63b0b97432f004Dmitri Gribenko 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 219b421b56d5a83c5bcae576b714ebd9df7b745368dFariborz Jahanian 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 220b421b56d5a83c5bcae576b714ebd9df7b745368dFariborz Jahanian 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 22128c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 22228c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 22328c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 2242d588b4bc7127adf1a1c621002dfe452a99fef6fFariborz Jahanian 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 2252d588b4bc7127adf1a1c621002dfe452a99fef6fFariborz Jahanian 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 22696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 2278487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 2288487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 2291ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 2301ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 2318487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 2328487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 233a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 234a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 2358487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 236a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 237a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 238a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 239a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 2408487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 241a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 24296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 24396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 24496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 24596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 24696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 24796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 24896b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 24996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 2502d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 2512d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 2528d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 2538d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 2548d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 2558d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 2568d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 2578d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 2588d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 259 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 260 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 261 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 262 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 263 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x06, 0x31, 0x99, 264 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 265}; 266 267/* RFC 3526, 6. Group 17 - 6144 Bit MODP 268 * Generator: 2 269 * Prime: 2^6144 - 2^6080 - 1 + 2^64 * { [2^6014 pi] + 929484 } 270 */ 271static const u8 dh_group17_generator[1] = { 0x02 }; 272static const u8 dh_group17_prime[768] = { 273 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 274 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 275 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 276 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 277 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 278 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 279 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 280 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 281 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 282 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 283 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 284 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 285 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 286 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 287 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 288 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 289 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 290 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 291 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 292 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 293 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 294 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 295 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 296 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 297 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 298 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 299 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 300 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 301 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 302 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 303 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 304 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 305 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 306 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 307 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 308 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 309 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 310 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 311 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 312 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 313 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 314 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 315 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 316 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 317 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 318 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 319 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 320 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 321 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 322 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 323 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 324 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 325 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 326 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 327 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 328 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 329 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 330 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 331 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 332 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 333 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 334 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 335 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92, 336 0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26, 337 0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE, 338 0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD, 339 0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E, 340 0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE, 341 0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31, 342 0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18, 343 0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED, 344 0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B, 345 0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B, 346 0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42, 347 0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF, 348 0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC, 349 0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03, 350 0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6, 351 0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82, 352 0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E, 353 0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3, 354 0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE, 355 0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5, 356 0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA, 357 0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8, 358 0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0, 359 0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28, 360 0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76, 361 0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0, 362 0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C, 363 0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32, 364 0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68, 365 0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE, 366 0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6, 367 0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xCC, 0x40, 0x24, 368 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 369}; 370 371/* RFC 3526, 7. Group 18 - 8192 Bit MODP 372 * Generator: 2 373 * Prime: 2^8192 - 2^8128 - 1 + 2^64 * { [2^8062 pi] + 4743158 } 374 */ 375static const u8 dh_group18_generator[1] = { 0x02 }; 376static const u8 dh_group18_prime[1024] = { 377 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 378 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 379 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 380 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 381 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 382 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 383 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 384 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 385 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 386 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 387 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 388 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 389 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 390 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 391 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 392 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 393 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 394 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 395 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 396 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 397 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 398 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 399 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 400 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 401 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 402 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 403 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 404 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 405 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 406 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 407 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 408 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 409 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 410 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 411 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 412 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 413 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 414 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 415 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 416 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 417 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 418 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 419 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 420 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 421 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 422 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 423 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 424 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 425 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 426 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 427 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 428 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 429 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 430 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 431 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 432 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 433 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 434 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 435 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 436 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 437 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 438 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 439 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92, 440 0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26, 441 0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE, 442 0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD, 443 0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E, 444 0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE, 445 0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31, 446 0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18, 447 0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED, 448 0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B, 449 0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B, 450 0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42, 451 0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF, 452 0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC, 453 0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03, 454 0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6, 455 0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82, 456 0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E, 457 0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3, 458 0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE, 459 0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5, 460 0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA, 461 0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8, 462 0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0, 463 0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28, 464 0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76, 465 0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0, 466 0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C, 467 0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32, 468 0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68, 469 0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE, 470 0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6, 471 0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xBE, 0x11, 0x59, 472 0x74, 0xA3, 0x92, 0x6F, 0x12, 0xFE, 0xE5, 0xE4, 473 0x38, 0x77, 0x7C, 0xB6, 0xA9, 0x32, 0xDF, 0x8C, 474 0xD8, 0xBE, 0xC4, 0xD0, 0x73, 0xB9, 0x31, 0xBA, 475 0x3B, 0xC8, 0x32, 0xB6, 0x8D, 0x9D, 0xD3, 0x00, 476 0x74, 0x1F, 0xA7, 0xBF, 0x8A, 0xFC, 0x47, 0xED, 477 0x25, 0x76, 0xF6, 0x93, 0x6B, 0xA4, 0x24, 0x66, 478 0x3A, 0xAB, 0x63, 0x9C, 0x5A, 0xE4, 0xF5, 0x68, 479 0x34, 0x23, 0xB4, 0x74, 0x2B, 0xF1, 0xC9, 0x78, 480 0x23, 0x8F, 0x16, 0xCB, 0xE3, 0x9D, 0x65, 0x2D, 481 0xE3, 0xFD, 0xB8, 0xBE, 0xFC, 0x84, 0x8A, 0xD9, 482 0x22, 0x22, 0x2E, 0x04, 0xA4, 0x03, 0x7C, 0x07, 483 0x13, 0xEB, 0x57, 0xA8, 0x1A, 0x23, 0xF0, 0xC7, 484 0x34, 0x73, 0xFC, 0x64, 0x6C, 0xEA, 0x30, 0x6B, 485 0x4B, 0xCB, 0xC8, 0x86, 0x2F, 0x83, 0x85, 0xDD, 486 0xFA, 0x9D, 0x4B, 0x7F, 0xA2, 0xC0, 0x87, 0xE8, 487 0x79, 0x68, 0x33, 0x03, 0xED, 0x5B, 0xDD, 0x3A, 488 0x06, 0x2B, 0x3C, 0xF5, 0xB3, 0xA2, 0x78, 0xA6, 489 0x6D, 0x2A, 0x13, 0xF8, 0x3F, 0x44, 0xF8, 0x2D, 490 0xDF, 0x31, 0x0E, 0xE0, 0x74, 0xAB, 0x6A, 0x36, 491 0x45, 0x97, 0xE8, 0x99, 0xA0, 0x25, 0x5D, 0xC1, 492 0x64, 0xF3, 0x1C, 0xC5, 0x08, 0x46, 0x85, 0x1D, 493 0xF9, 0xAB, 0x48, 0x19, 0x5D, 0xED, 0x7E, 0xA1, 494 0xB1, 0xD5, 0x10, 0xBD, 0x7E, 0xE7, 0x4D, 0x73, 495 0xFA, 0xF3, 0x6B, 0xC3, 0x1E, 0xCF, 0xA2, 0x68, 496 0x35, 0x90, 0x46, 0xF4, 0xEB, 0x87, 0x9F, 0x92, 497 0x40, 0x09, 0x43, 0x8B, 0x48, 0x1C, 0x6C, 0xD7, 498 0x88, 0x9A, 0x00, 0x2E, 0xD5, 0xEE, 0x38, 0x2B, 499 0xC9, 0x19, 0x0D, 0xA6, 0xFC, 0x02, 0x6E, 0x47, 500 0x95, 0x58, 0xE4, 0x47, 0x56, 0x77, 0xE9, 0xAA, 501 0x9E, 0x30, 0x50, 0xE2, 0x76, 0x56, 0x94, 0xDF, 502 0xC8, 0x1F, 0x56, 0xE8, 0x80, 0xB9, 0x6E, 0x71, 503 0x60, 0xC9, 0x80, 0xDD, 0x98, 0xED, 0xD3, 0xDF, 504 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 505}; 506 507#endif /* ALL_DH_GROUPS */ 508 509 510#define DH_GROUP(id) \ 511{ id, dh_group ## id ## _generator, sizeof(dh_group ## id ## _generator), \ 512dh_group ## id ## _prime, sizeof(dh_group ## id ## _prime) } 513 514 515static struct dh_group dh_groups[] = { 516 DH_GROUP(5), 517#ifdef ALL_DH_GROUPS 518 DH_GROUP(1), 519 DH_GROUP(2), 520 DH_GROUP(14), 521 DH_GROUP(15), 522 DH_GROUP(16), 523 DH_GROUP(17), 524 DH_GROUP(18) 525#endif /* ALL_DH_GROUPS */ 526}; 527 528#define NUM_DH_GROUPS (sizeof(dh_groups) / sizeof(dh_groups[0])) 529 530 531const struct dh_group * dh_groups_get(int id) 532{ 533 size_t i; 534 535 for (i = 0; i < NUM_DH_GROUPS; i++) { 536 if (dh_groups[i].id == id) 537 return &dh_groups[i]; 538 } 539 return NULL; 540} 541 542 543/** 544 * dh_init - Initialize Diffie-Hellman handshake 545 * @dh: Selected Diffie-Hellman group 546 * @priv: Pointer for returning Diffie-Hellman private key 547 * Returns: Diffie-Hellman public value 548 */ 549struct wpabuf * dh_init(const struct dh_group *dh, struct wpabuf **priv) 550{ 551 struct wpabuf *pv; 552 size_t pv_len; 553 554 if (dh == NULL) 555 return NULL; 556 557 wpabuf_free(*priv); 558 *priv = wpabuf_alloc(dh->prime_len); 559 if (*priv == NULL) 560 return NULL; 561 562 if (random_get_bytes(wpabuf_put(*priv, dh->prime_len), dh->prime_len)) 563 { 564 wpabuf_free(*priv); 565 *priv = NULL; 566 return NULL; 567 } 568 569 if (os_memcmp(wpabuf_head(*priv), dh->prime, dh->prime_len) > 0) { 570 /* Make sure private value is smaller than prime */ 571 *(wpabuf_mhead_u8(*priv)) = 0; 572 } 573 wpa_hexdump_buf_key(MSG_DEBUG, "DH: private value", *priv); 574 575 pv_len = dh->prime_len; 576 pv = wpabuf_alloc(pv_len); 577 if (pv == NULL) 578 return NULL; 579 if (crypto_mod_exp(dh->generator, dh->generator_len, 580 wpabuf_head(*priv), wpabuf_len(*priv), 581 dh->prime, dh->prime_len, wpabuf_mhead(pv), 582 &pv_len) < 0) { 583 wpabuf_free(pv); 584 wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed"); 585 return NULL; 586 } 587 wpabuf_put(pv, pv_len); 588 wpa_hexdump_buf(MSG_DEBUG, "DH: public value", pv); 589 590 return pv; 591} 592 593 594/** 595 * dh_derive_shared - Derive shared Diffie-Hellman key 596 * @peer_public: Diffie-Hellman public value from peer 597 * @own_private: Diffie-Hellman private key from dh_init() 598 * @dh: Selected Diffie-Hellman group 599 * Returns: Diffie-Hellman shared key 600 */ 601struct wpabuf * dh_derive_shared(const struct wpabuf *peer_public, 602 const struct wpabuf *own_private, 603 const struct dh_group *dh) 604{ 605 struct wpabuf *shared; 606 size_t shared_len; 607 608 if (dh == NULL || peer_public == NULL || own_private == NULL) 609 return NULL; 610 611 shared_len = dh->prime_len; 612 shared = wpabuf_alloc(shared_len); 613 if (shared == NULL) 614 return NULL; 615 if (crypto_mod_exp(wpabuf_head(peer_public), wpabuf_len(peer_public), 616 wpabuf_head(own_private), wpabuf_len(own_private), 617 dh->prime, dh->prime_len, 618 wpabuf_mhead(shared), &shared_len) < 0) { 619 wpabuf_free(shared); 620 wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed"); 621 return NULL; 622 } 623 wpabuf_put(shared, shared_len); 624 wpa_hexdump_buf_key(MSG_DEBUG, "DH: shared key", shared); 625 626 return shared; 627} 628