|
|
@@ -1,6 +1,6 @@
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Copyright (C) 2010 Tobias Brunner
|
|
|
|
* Copyright (C) 2010 Tobias Brunner
|
|
|
|
* Copyright (C) 2005-2008 Martin Willi
|
|
|
|
* Copyright (C) 2005-2010 Martin Willi
|
|
|
|
* Copyright (C) 2005 Jan Hutter
|
|
|
|
* Copyright (C) 2005 Jan Hutter
|
|
|
|
* Hochschule fuer Technik Rapperswil
|
|
|
|
* Hochschule fuer Technik Rapperswil
|
|
|
|
*
|
|
|
|
*
|
|
|
@@ -41,21 +41,31 @@ ENUM_END(diffie_hellman_group_names, MODP_NULL);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Modulus of Group 1 (MODP_768_BIT).
|
|
|
|
* List of known diffie hellman group parameters.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
static const u_int8_t group1_modulus[] = {
|
|
|
|
static struct {
|
|
|
|
|
|
|
|
/* Public part of the struct */
|
|
|
|
|
|
|
|
diffie_hellman_params_t public;
|
|
|
|
|
|
|
|
/* The group identifier as specified in IKEv2 */
|
|
|
|
|
|
|
|
diffie_hellman_group_t group;
|
|
|
|
|
|
|
|
/* Optimal length of the exponent (in bytes), as specified in RFC 3526. */
|
|
|
|
|
|
|
|
size_t opt_exp;
|
|
|
|
|
|
|
|
} dh_params[] = {
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
.group = MODP_768_BIT, .opt_exp = 32, .public = {
|
|
|
|
|
|
|
|
.generator = chunk_from_chars(0x02),
|
|
|
|
|
|
|
|
.prime = chunk_from_chars(
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
|
0xEF,0x95,0x19,0xB3,0xCD,0x3A,0x43,0x1B,0x30,0x2B,0x0A,0x6D,0xF2,0x5F,0x14,0x37,
|
|
|
|
0xEF,0x95,0x19,0xB3,0xCD,0x3A,0x43,0x1B,0x30,0x2B,0x0A,0x6D,0xF2,0x5F,0x14,0x37,
|
|
|
|
0x4F,0xE1,0x35,0x6D,0x6D,0x51,0xC2,0x45,0xE4,0x85,0xB5,0x76,0x62,0x5E,0x7E,0xC6,
|
|
|
|
0x4F,0xE1,0x35,0x6D,0x6D,0x51,0xC2,0x45,0xE4,0x85,0xB5,0x76,0x62,0x5E,0x7E,0xC6,
|
|
|
|
0xF4,0x4C,0x42,0xE9,0xA6,0x3A,0x36,0x20,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
|
|
|
0xF4,0x4C,0x42,0xE9,0xA6,0x3A,0x36,0x20,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF)
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
},{
|
|
|
|
/**
|
|
|
|
.group = MODP_1024_BIT, .opt_exp = 32, .public = {
|
|
|
|
* Modulus of Group 2 (MODP_1024_BIT).
|
|
|
|
.generator = chunk_from_chars(0x02),
|
|
|
|
*/
|
|
|
|
.prime = chunk_from_chars(
|
|
|
|
static const u_int8_t group2_modulus[] = {
|
|
|
|
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
@@ -63,13 +73,12 @@ static const u_int8_t group2_modulus[] = {
|
|
|
|
0x4F,0xE1,0x35,0x6D,0x6D,0x51,0xC2,0x45,0xE4,0x85,0xB5,0x76,0x62,0x5E,0x7E,0xC6,
|
|
|
|
0x4F,0xE1,0x35,0x6D,0x6D,0x51,0xC2,0x45,0xE4,0x85,0xB5,0x76,0x62,0x5E,0x7E,0xC6,
|
|
|
|
0xF4,0x4C,0x42,0xE9,0xA6,0x37,0xED,0x6B,0x0B,0xFF,0x5C,0xB6,0xF4,0x06,0xB7,0xED,
|
|
|
|
0xF4,0x4C,0x42,0xE9,0xA6,0x37,0xED,0x6B,0x0B,0xFF,0x5C,0xB6,0xF4,0x06,0xB7,0xED,
|
|
|
|
0xEE,0x38,0x6B,0xFB,0x5A,0x89,0x9F,0xA5,0xAE,0x9F,0x24,0x11,0x7C,0x4B,0x1F,0xE6,
|
|
|
|
0xEE,0x38,0x6B,0xFB,0x5A,0x89,0x9F,0xA5,0xAE,0x9F,0x24,0x11,0x7C,0x4B,0x1F,0xE6,
|
|
|
|
0x49,0x28,0x66,0x51,0xEC,0xE6,0x53,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
|
|
|
0x49,0x28,0x66,0x51,0xEC,0xE6,0x53,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF)
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
},{
|
|
|
|
/**
|
|
|
|
.group = MODP_1536_BIT, .opt_exp = 32, .public = {
|
|
|
|
* Modulus of Group 5 (MODP_1536_BIT).
|
|
|
|
.generator = chunk_from_chars(0x02),
|
|
|
|
*/
|
|
|
|
.prime = chunk_from_chars(
|
|
|
|
static const u_int8_t group5_modulus[] = {
|
|
|
|
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
@@ -81,12 +90,12 @@ static const u_int8_t group5_modulus[] = {
|
|
|
|
0x98,0xDA,0x48,0x36,0x1C,0x55,0xD3,0x9A,0x69,0x16,0x3F,0xA8,0xFD,0x24,0xCF,0x5F,
|
|
|
|
0x98,0xDA,0x48,0x36,0x1C,0x55,0xD3,0x9A,0x69,0x16,0x3F,0xA8,0xFD,0x24,0xCF,0x5F,
|
|
|
|
0x83,0x65,0x5D,0x23,0xDC,0xA3,0xAD,0x96,0x1C,0x62,0xF3,0x56,0x20,0x85,0x52,0xBB,
|
|
|
|
0x83,0x65,0x5D,0x23,0xDC,0xA3,0xAD,0x96,0x1C,0x62,0xF3,0x56,0x20,0x85,0x52,0xBB,
|
|
|
|
0x9E,0xD5,0x29,0x07,0x70,0x96,0x96,0x6D,0x67,0x0C,0x35,0x4E,0x4A,0xBC,0x98,0x04,
|
|
|
|
0x9E,0xD5,0x29,0x07,0x70,0x96,0x96,0x6D,0x67,0x0C,0x35,0x4E,0x4A,0xBC,0x98,0x04,
|
|
|
|
0xF1,0x74,0x6C,0x08,0xCA,0x23,0x73,0x27,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
|
|
|
0xF1,0x74,0x6C,0x08,0xCA,0x23,0x73,0x27,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF)
|
|
|
|
};
|
|
|
|
},
|
|
|
|
/**
|
|
|
|
},{
|
|
|
|
* Modulus of Group 14 (MODP_2048_BIT).
|
|
|
|
.group = MODP_2048_BIT, .opt_exp = 48, .public = {
|
|
|
|
*/
|
|
|
|
.generator = chunk_from_chars(0x02),
|
|
|
|
static const u_int8_t group14_modulus[] = {
|
|
|
|
.prime = chunk_from_chars(
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
@@ -102,13 +111,12 @@ static const u_int8_t group14_modulus[] = {
|
|
|
|
0xE3,0x9E,0x77,0x2C,0x18,0x0E,0x86,0x03,0x9B,0x27,0x83,0xA2,0xEC,0x07,0xA2,0x8F,
|
|
|
|
0xE3,0x9E,0x77,0x2C,0x18,0x0E,0x86,0x03,0x9B,0x27,0x83,0xA2,0xEC,0x07,0xA2,0x8F,
|
|
|
|
0xB5,0xC5,0x5D,0xF0,0x6F,0x4C,0x52,0xC9,0xDE,0x2B,0xCB,0xF6,0x95,0x58,0x17,0x18,
|
|
|
|
0xB5,0xC5,0x5D,0xF0,0x6F,0x4C,0x52,0xC9,0xDE,0x2B,0xCB,0xF6,0x95,0x58,0x17,0x18,
|
|
|
|
0x39,0x95,0x49,0x7C,0xEA,0x95,0x6A,0xE5,0x15,0xD2,0x26,0x18,0x98,0xFA,0x05,0x10,
|
|
|
|
0x39,0x95,0x49,0x7C,0xEA,0x95,0x6A,0xE5,0x15,0xD2,0x26,0x18,0x98,0xFA,0x05,0x10,
|
|
|
|
0x15,0x72,0x8E,0x5A,0x8A,0xAC,0xAA,0x68,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
|
|
|
0x15,0x72,0x8E,0x5A,0x8A,0xAC,0xAA,0x68,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF)
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
},{
|
|
|
|
/**
|
|
|
|
.group = MODP_3072_BIT, .opt_exp = 48, .public = {
|
|
|
|
* Modulus of Group 15 (MODP_3072_BIT).
|
|
|
|
.generator = chunk_from_chars(0x02),
|
|
|
|
*/
|
|
|
|
.prime = chunk_from_chars(
|
|
|
|
static const u_int8_t group15_modulus[] = {
|
|
|
|
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
@@ -132,13 +140,12 @@ static const u_int8_t group15_modulus[] = {
|
|
|
|
0xD8,0x76,0x02,0x73,0x3E,0xC8,0x6A,0x64,0x52,0x1F,0x2B,0x18,0x17,0x7B,0x20,0x0C,
|
|
|
|
0xD8,0x76,0x02,0x73,0x3E,0xC8,0x6A,0x64,0x52,0x1F,0x2B,0x18,0x17,0x7B,0x20,0x0C,
|
|
|
|
0xBB,0xE1,0x17,0x57,0x7A,0x61,0x5D,0x6C,0x77,0x09,0x88,0xC0,0xBA,0xD9,0x46,0xE2,
|
|
|
|
0xBB,0xE1,0x17,0x57,0x7A,0x61,0x5D,0x6C,0x77,0x09,0x88,0xC0,0xBA,0xD9,0x46,0xE2,
|
|
|
|
0x08,0xE2,0x4F,0xA0,0x74,0xE5,0xAB,0x31,0x43,0xDB,0x5B,0xFC,0xE0,0xFD,0x10,0x8E,
|
|
|
|
0x08,0xE2,0x4F,0xA0,0x74,0xE5,0xAB,0x31,0x43,0xDB,0x5B,0xFC,0xE0,0xFD,0x10,0x8E,
|
|
|
|
0x4B,0x82,0xD1,0x20,0xA9,0x3A,0xD2,0xCA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
|
|
|
0x4B,0x82,0xD1,0x20,0xA9,0x3A,0xD2,0xCA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF)
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
},{
|
|
|
|
/**
|
|
|
|
.group = MODP_4096_BIT, .opt_exp = 64, .public = {
|
|
|
|
* Modulus of Group 16 (MODP_4096_BIT).
|
|
|
|
.generator = chunk_from_chars(0x02),
|
|
|
|
*/
|
|
|
|
.prime = chunk_from_chars(
|
|
|
|
static const u_int8_t group16_modulus[] = {
|
|
|
|
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
@@ -170,13 +177,12 @@ static const u_int8_t group16_modulus[] = {
|
|
|
|
0x23,0x3B,0xA1,0x86,0x51,0x5B,0xE7,0xED,0x1F,0x61,0x29,0x70,0xCE,0xE2,0xD7,0xAF,
|
|
|
|
0x23,0x3B,0xA1,0x86,0x51,0x5B,0xE7,0xED,0x1F,0x61,0x29,0x70,0xCE,0xE2,0xD7,0xAF,
|
|
|
|
0xB8,0x1B,0xDD,0x76,0x21,0x70,0x48,0x1C,0xD0,0x06,0x91,0x27,0xD5,0xB0,0x5A,0xA9,
|
|
|
|
0xB8,0x1B,0xDD,0x76,0x21,0x70,0x48,0x1C,0xD0,0x06,0x91,0x27,0xD5,0xB0,0x5A,0xA9,
|
|
|
|
0x93,0xB4,0xEA,0x98,0x8D,0x8F,0xDD,0xC1,0x86,0xFF,0xB7,0xDC,0x90,0xA6,0xC0,0x8F,
|
|
|
|
0x93,0xB4,0xEA,0x98,0x8D,0x8F,0xDD,0xC1,0x86,0xFF,0xB7,0xDC,0x90,0xA6,0xC0,0x8F,
|
|
|
|
0x4D,0xF4,0x35,0xC9,0x34,0x06,0x31,0x99,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
|
|
|
0x4D,0xF4,0x35,0xC9,0x34,0x06,0x31,0x99,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF)
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
},{
|
|
|
|
/**
|
|
|
|
.group = MODP_6144_BIT, .opt_exp = 64, .public = {
|
|
|
|
* Modulus of Group 17 (MODP_6144_BIT).
|
|
|
|
.generator = chunk_from_chars(0x02),
|
|
|
|
*/
|
|
|
|
.prime = chunk_from_chars(
|
|
|
|
static const u_int8_t group17_modulus[] = {
|
|
|
|
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
@@ -224,13 +230,12 @@ static const u_int8_t group17_modulus[] = {
|
|
|
|
0xF5,0x50,0xAA,0x3D,0x8A,0x1F,0xBF,0xF0,0xEB,0x19,0xCC,0xB1,0xA3,0x13,0xD5,0x5C,
|
|
|
|
0xF5,0x50,0xAA,0x3D,0x8A,0x1F,0xBF,0xF0,0xEB,0x19,0xCC,0xB1,0xA3,0x13,0xD5,0x5C,
|
|
|
|
0xDA,0x56,0xC9,0xEC,0x2E,0xF2,0x96,0x32,0x38,0x7F,0xE8,0xD7,0x6E,0x3C,0x04,0x68,
|
|
|
|
0xDA,0x56,0xC9,0xEC,0x2E,0xF2,0x96,0x32,0x38,0x7F,0xE8,0xD7,0x6E,0x3C,0x04,0x68,
|
|
|
|
0x04,0x3E,0x8F,0x66,0x3F,0x48,0x60,0xEE,0x12,0xBF,0x2D,0x5B,0x0B,0x74,0x74,0xD6,
|
|
|
|
0x04,0x3E,0x8F,0x66,0x3F,0x48,0x60,0xEE,0x12,0xBF,0x2D,0x5B,0x0B,0x74,0x74,0xD6,
|
|
|
|
0xE6,0x94,0xF9,0x1E,0x6D,0xCC,0x40,0x24,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
|
|
|
0xE6,0x94,0xF9,0x1E,0x6D,0xCC,0x40,0x24,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF)
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
},{
|
|
|
|
/**
|
|
|
|
.group = MODP_8192_BIT, .opt_exp = 64, .public = {
|
|
|
|
* Modulus of Group 18 (MODP_8192_BIT).
|
|
|
|
.generator = chunk_from_chars(0x02),
|
|
|
|
*/
|
|
|
|
.prime = chunk_from_chars(
|
|
|
|
static const u_int8_t group18_modulus[] = {
|
|
|
|
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,0x21,0x68,0xC2,0x34,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
|
0x02,0x0B,0xBE,0xA6,0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
|
|
|
@@ -294,22 +299,9 @@ static const u_int8_t group18_modulus[] = {
|
|
|
|
0x40,0x09,0x43,0x8B,0x48,0x1C,0x6C,0xD7,0x88,0x9A,0x00,0x2E,0xD5,0xEE,0x38,0x2B,
|
|
|
|
0x40,0x09,0x43,0x8B,0x48,0x1C,0x6C,0xD7,0x88,0x9A,0x00,0x2E,0xD5,0xEE,0x38,0x2B,
|
|
|
|
0xC9,0x19,0x0D,0xA6,0xFC,0x02,0x6E,0x47,0x95,0x58,0xE4,0x47,0x56,0x77,0xE9,0xAA,
|
|
|
|
0xC9,0x19,0x0D,0xA6,0xFC,0x02,0x6E,0x47,0x95,0x58,0xE4,0x47,0x56,0x77,0xE9,0xAA,
|
|
|
|
0x9E,0x30,0x50,0xE2,0x76,0x56,0x94,0xDF,0xC8,0x1F,0x56,0xE8,0x80,0xB9,0x6E,0x71,
|
|
|
|
0x9E,0x30,0x50,0xE2,0x76,0x56,0x94,0xDF,0xC8,0x1F,0x56,0xE8,0x80,0xB9,0x6E,0x71,
|
|
|
|
0x60,0xC9,0x80,0xDD,0x98,0xED,0xD3,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
|
|
|
0x60,0xC9,0x80,0xDD,0x98,0xED,0xD3,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF)
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
},
|
|
|
|
/**
|
|
|
|
|
|
|
|
* All supported diffie hellman groups.
|
|
|
|
|
|
|
|
* Optimum exponent size according to RFC 3526.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
static diffie_hellman_params_t dh_params[] = {
|
|
|
|
|
|
|
|
{MODP_768_BIT, group1_modulus, sizeof(group1_modulus), 32, 0, 2},
|
|
|
|
|
|
|
|
{MODP_1024_BIT, group2_modulus, sizeof(group2_modulus), 32, 0, 2},
|
|
|
|
|
|
|
|
{MODP_1536_BIT, group5_modulus, sizeof(group5_modulus), 32, 0, 2},
|
|
|
|
|
|
|
|
{MODP_2048_BIT, group14_modulus, sizeof(group14_modulus), 48, 0, 2},
|
|
|
|
|
|
|
|
{MODP_3072_BIT, group15_modulus, sizeof(group15_modulus), 48, 0, 2},
|
|
|
|
|
|
|
|
{MODP_4096_BIT, group16_modulus, sizeof(group16_modulus), 64, 0, 2},
|
|
|
|
|
|
|
|
{MODP_6144_BIT, group17_modulus, sizeof(group17_modulus), 64, 0, 2},
|
|
|
|
|
|
|
|
{MODP_8192_BIT, group18_modulus, sizeof(group18_modulus), 64, 0, 2},
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@@ -318,18 +310,24 @@ static diffie_hellman_params_t dh_params[] = {
|
|
|
|
diffie_hellman_params_t *diffie_hellman_get_params(diffie_hellman_group_t group)
|
|
|
|
diffie_hellman_params_t *diffie_hellman_get_params(diffie_hellman_group_t group)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < countof(dh_params); i++)
|
|
|
|
for (i = 0; i < countof(dh_params); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (dh_params[i].group == group)
|
|
|
|
if (dh_params[i].group == group)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (!dh_params[i].exp_len)
|
|
|
|
if (!dh_params[i].public.exp_len)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
bool ansi_x9_42 = lib->settings->get_int(lib->settings,
|
|
|
|
if (lib->settings->get_int(lib->settings,
|
|
|
|
"libstrongswan.dh_exponent_ansi_x9_42", TRUE);
|
|
|
|
"libstrongswan.dh_exponent_ansi_x9_42", TRUE))
|
|
|
|
dh_params[i].exp_len = ansi_x9_42 ? dh_params[i].prime_len
|
|
|
|
{
|
|
|
|
: dh_params[i].opt_exp_len;
|
|
|
|
dh_params[i].public.exp_len = dh_params[i].public.prime.len;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return &dh_params[i];
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
dh_params[i].public.exp_len = dh_params[i].opt_exp;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return &dh_params[i].public;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
return NULL;
|
|
|
|