18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Diffie-Hellman groups 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2007, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "includes.h" 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "common.h" 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "crypto.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "random.h" 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "dh_groups.h" 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef ALL_DH_GROUPS 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 4306, B.1. Group 1 - 768 Bit MODP 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^768 - 2 ^704 - 1 + 2^64 * { [2^638 pi] + 149686 } 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group1_generator[1] = { 0x02 }; 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group1_prime[96] = { 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x3A, 0x36, 0x20, 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 4306, B.2. Group 2 - 1024 Bit MODP 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 } 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group2_generator[1] = { 0x02 }; 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group2_prime[128] = { 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81, 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* ALL_DH_GROUPS */ 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 2. Group 5 - 1536 Bit MODP 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^1536 - 2^1472 - 1 + 2^64 * { [2^1406 pi] + 741804 } 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group5_generator[1] = { 0x02 }; 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group5_prime[192] = { 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x23, 0x73, 0x27, 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef ALL_DH_GROUPS 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 3. Group 14 - 2048 Bit MODP 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^2048 - 2^1984 - 1 + 2^64 * { [2^1918 pi] + 124476 } 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group14_generator[1] = { 0x02 }; 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group14_prime[256] = { 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68, 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 4. Group 15 - 3072 Bit MODP 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^3072 - 2^3008 - 1 + 2^64 * { [2^2942 pi] + 1690314 } 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group15_generator[1] = { 0x02 }; 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group15_prime[384] = { 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x3A, 0xD2, 0xCA, 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 5. Group 16 - 4096 Bit MODP 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 } 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group16_generator[1] = { 0x02 }; 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group16_prime[512] = { 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x06, 0x31, 0x99, 2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 6. Group 17 - 6144 Bit MODP 2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2 2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^6144 - 2^6080 - 1 + 2^64 * { [2^6014 pi] + 929484 } 2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group17_generator[1] = { 0x02 }; 2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group17_prime[768] = { 2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 2918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 2928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 2938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 2948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 2958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 2968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 2988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 3028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 3158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 3188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 3218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 3308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 3318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92, 3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26, 3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE, 3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD, 3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E, 3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE, 3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31, 3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18, 3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED, 3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B, 3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B, 3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42, 3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF, 3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC, 3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03, 3508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6, 3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82, 3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E, 3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3, 3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE, 3558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5, 3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA, 3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8, 3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0, 3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28, 3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76, 3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0, 3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C, 3638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32, 3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68, 3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE, 3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6, 3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xCC, 0x40, 0x24, 3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 3526, 7. Group 18 - 8192 Bit MODP 3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Generator: 2 3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Prime: 2^8192 - 2^8128 - 1 + 2^64 * { [2^8062 pi] + 4743158 } 3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group18_generator[1] = { 0x02 }; 3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const u8 dh_group18_prime[1024] = { 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 3918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 3928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 3938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 3948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 3958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 3968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, 4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, 4168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 4178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, 4188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, 4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, 4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, 4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, 4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, 4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, 4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, 4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, 4288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, 4298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, 4308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, 4318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, 4328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, 4338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, 4348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, 4358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, 4368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, 4378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, 4388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, 4398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92, 4408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26, 4418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE, 4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD, 4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E, 4448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE, 4458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31, 4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18, 4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED, 4488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B, 4498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B, 4508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42, 4518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF, 4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC, 4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03, 4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6, 4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82, 4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E, 4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3, 4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE, 4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5, 4608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA, 4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8, 4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0, 4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28, 4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76, 4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0, 4668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C, 4678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32, 4688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68, 4698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE, 4708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6, 4718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xBE, 0x11, 0x59, 4728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x74, 0xA3, 0x92, 0x6F, 0x12, 0xFE, 0xE5, 0xE4, 4738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x38, 0x77, 0x7C, 0xB6, 0xA9, 0x32, 0xDF, 0x8C, 4748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xD8, 0xBE, 0xC4, 0xD0, 0x73, 0xB9, 0x31, 0xBA, 4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x3B, 0xC8, 0x32, 0xB6, 0x8D, 0x9D, 0xD3, 0x00, 4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x74, 0x1F, 0xA7, 0xBF, 0x8A, 0xFC, 0x47, 0xED, 4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x25, 0x76, 0xF6, 0x93, 0x6B, 0xA4, 0x24, 0x66, 4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x3A, 0xAB, 0x63, 0x9C, 0x5A, 0xE4, 0xF5, 0x68, 4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x34, 0x23, 0xB4, 0x74, 0x2B, 0xF1, 0xC9, 0x78, 4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x23, 0x8F, 0x16, 0xCB, 0xE3, 0x9D, 0x65, 0x2D, 4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xE3, 0xFD, 0xB8, 0xBE, 0xFC, 0x84, 0x8A, 0xD9, 4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x22, 0x22, 0x2E, 0x04, 0xA4, 0x03, 0x7C, 0x07, 4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x13, 0xEB, 0x57, 0xA8, 0x1A, 0x23, 0xF0, 0xC7, 4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x34, 0x73, 0xFC, 0x64, 0x6C, 0xEA, 0x30, 0x6B, 4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x4B, 0xCB, 0xC8, 0x86, 0x2F, 0x83, 0x85, 0xDD, 4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFA, 0x9D, 0x4B, 0x7F, 0xA2, 0xC0, 0x87, 0xE8, 4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x79, 0x68, 0x33, 0x03, 0xED, 0x5B, 0xDD, 0x3A, 4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x06, 0x2B, 0x3C, 0xF5, 0xB3, 0xA2, 0x78, 0xA6, 4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x6D, 0x2A, 0x13, 0xF8, 0x3F, 0x44, 0xF8, 0x2D, 4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xDF, 0x31, 0x0E, 0xE0, 0x74, 0xAB, 0x6A, 0x36, 4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x45, 0x97, 0xE8, 0x99, 0xA0, 0x25, 0x5D, 0xC1, 4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x64, 0xF3, 0x1C, 0xC5, 0x08, 0x46, 0x85, 0x1D, 4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xF9, 0xAB, 0x48, 0x19, 0x5D, 0xED, 0x7E, 0xA1, 4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xB1, 0xD5, 0x10, 0xBD, 0x7E, 0xE7, 0x4D, 0x73, 4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFA, 0xF3, 0x6B, 0xC3, 0x1E, 0xCF, 0xA2, 0x68, 4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x35, 0x90, 0x46, 0xF4, 0xEB, 0x87, 0x9F, 0x92, 4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x40, 0x09, 0x43, 0x8B, 0x48, 0x1C, 0x6C, 0xD7, 4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x88, 0x9A, 0x00, 0x2E, 0xD5, 0xEE, 0x38, 0x2B, 4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC9, 0x19, 0x0D, 0xA6, 0xFC, 0x02, 0x6E, 0x47, 5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x95, 0x58, 0xE4, 0x47, 0x56, 0x77, 0xE9, 0xAA, 5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x9E, 0x30, 0x50, 0xE2, 0x76, 0x56, 0x94, 0xDF, 5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xC8, 0x1F, 0x56, 0xE8, 0x80, 0xB9, 0x6E, 0x71, 5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0x60, 0xC9, 0x80, 0xDD, 0x98, 0xED, 0xD3, 0xDF, 5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* ALL_DH_GROUPS */ 5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define DH_GROUP(id) \ 5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ id, dh_group ## id ## _generator, sizeof(dh_group ## id ## _generator), \ 5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtdh_group ## id ## _prime, sizeof(dh_group ## id ## _prime) } 5138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic struct dh_group dh_groups[] = { 5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DH_GROUP(5), 5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef ALL_DH_GROUPS 5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DH_GROUP(1), 5198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DH_GROUP(2), 5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DH_GROUP(14), 5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DH_GROUP(15), 5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DH_GROUP(16), 5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DH_GROUP(17), 5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DH_GROUP(18) 5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* ALL_DH_GROUPS */ 5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define NUM_DH_GROUPS (sizeof(dh_groups) / sizeof(dh_groups[0])) 5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtconst struct dh_group * dh_groups_get(int id) 5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t i; 5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (i = 0; i < NUM_DH_GROUPS; i++) { 5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (dh_groups[i].id == id) 5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return &dh_groups[i]; 5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_init - Initialize Diffie-Hellman handshake 5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dh: Selected Diffie-Hellman group 5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @priv: Pointer for returning Diffie-Hellman private key 5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: Diffie-Hellman public value 5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * dh_init(const struct dh_group *dh, struct wpabuf **priv) 5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *pv; 5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pv_len; 5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (dh == NULL) 5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpabuf_free(*priv); 5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *priv = wpabuf_alloc(dh->prime_len); 5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (*priv == NULL) 5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (random_get_bytes(wpabuf_put(*priv, dh->prime_len), dh->prime_len)) 5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt { 5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpabuf_free(*priv); 5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *priv = NULL; 5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (os_memcmp(wpabuf_head(*priv), dh->prime, dh->prime_len) > 0) { 5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Make sure private value is smaller than prime */ 5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *(wpabuf_mhead_u8(*priv)) = 0; 5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_hexdump_buf_key(MSG_DEBUG, "DH: private value", *priv); 5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pv_len = dh->prime_len; 5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pv = wpabuf_alloc(pv_len); 5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (pv == NULL) 5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (crypto_mod_exp(dh->generator, dh->generator_len, 5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpabuf_head(*priv), wpabuf_len(*priv), 5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt dh->prime, dh->prime_len, wpabuf_mhead(pv), 5828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt &pv_len) < 0) { 5838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpabuf_free(pv); 5848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed"); 5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpabuf_put(pv, pv_len); 5888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_hexdump_buf(MSG_DEBUG, "DH: public value", pv); 5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return pv; 5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_derive_shared - Derive shared Diffie-Hellman key 5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @peer_public: Diffie-Hellman public value from peer 5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @own_private: Diffie-Hellman private key from dh_init() 5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dh: Selected Diffie-Hellman group 5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: Diffie-Hellman shared key 6008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * dh_derive_shared(const struct wpabuf *peer_public, 6028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *own_private, 6038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct dh_group *dh) 6048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *shared; 6068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t shared_len; 6078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (dh == NULL || peer_public == NULL || own_private == NULL) 6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 6108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt shared_len = dh->prime_len; 6128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt shared = wpabuf_alloc(shared_len); 6138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (shared == NULL) 6148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 6158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (crypto_mod_exp(wpabuf_head(peer_public), wpabuf_len(peer_public), 6168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpabuf_head(own_private), wpabuf_len(own_private), 6178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt dh->prime, dh->prime_len, 6188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpabuf_mhead(shared), &shared_len) < 0) { 6198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpabuf_free(shared); 6208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_printf(MSG_INFO, "DH: crypto_mod_exp failed"); 6218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 6228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpabuf_put(shared, shared_len); 6248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_hexdump_buf_key(MSG_DEBUG, "DH: shared key", shared); 6258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return shared; 6278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 628