23 #include <openssl/obj_mac.h> 24 #include <openssl/ec.h> 25 #include <openssl/x509.h> 26 #include <openssl/pem.h> 27 #include <openssl/bn.h> 28 #include <openssl/dh.h> 32 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" 33 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" 34 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" 35 "E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF";
39 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" 40 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" 41 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" 42 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 43 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381" "FFFFFFFFFFFFFFFF";
48 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" 49 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" 50 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" 51 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 52 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" 53 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" 54 "83655D23DCA3AD961C62F356208552BB9ED529077096966D" 55 "670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF";
59 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" 60 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" 61 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" 62 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 63 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" 64 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" 65 "83655D23DCA3AD961C62F356208552BB9ED529077096966D" 66 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" 67 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" 68 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" 69 "15728E5A8AACAA68FFFFFFFFFFFFFFFF";
73 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" 74 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" 75 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" 76 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 77 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" 78 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" 79 "83655D23DCA3AD961C62F356208552BB9ED529077096966D" 80 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" 81 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" 82 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" 83 "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" 84 "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" 85 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" 86 "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" 87 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" 88 "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF";
92 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" 93 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" 94 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" 95 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 96 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" 97 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" 98 "83655D23DCA3AD961C62F356208552BB9ED529077096966D" 99 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" 100 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" 101 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" 102 "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" 103 "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" 104 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" 105 "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" 106 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" 107 "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" 108 "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" 109 "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" 110 "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" 111 "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" 112 "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" "FFFFFFFFFFFFFFFF";
116 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" 117 "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" 118 "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" 119 "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" 120 "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" 121 "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" 122 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" 123 "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" 124 "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" 125 "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" 126 "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" 127 "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" 128 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" 129 "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" 130 "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" 131 "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" 132 "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" 133 "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" 134 "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406" 135 "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918" 136 "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151" 137 "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03" 138 "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F" 139 "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" 140 "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B" 141 "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632" 142 "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E" 143 "6DCC4024FFFFFFFFFFFFFFFF";
147 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" 148 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" 149 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" 150 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" 151 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" 152 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" 153 "83655D23DCA3AD961C62F356208552BB9ED529077096966D" 154 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" 155 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" 156 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" 157 "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" 158 "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" 159 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" 160 "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" 161 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" 162 "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" 163 "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" 164 "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" 165 "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" 166 "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" 167 "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" 168 "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD" 169 "F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831" 170 "179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B" 171 "DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF" 172 "5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6" 173 "D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3" 174 "23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" 175 "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328" 176 "06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C" 177 "DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE" 178 "12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4" 179 "38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300" 180 "741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568" 181 "3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9" 182 "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B" 183 "4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A" 184 "062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36" 185 "4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1" 186 "B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92" 187 "4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47" 188 "9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71" 189 "60C980DD98EDD3DFFFFFFFFFFFFFFFFF";
194 "B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C6" 195 "9A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C0" 196 "13ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD70" 197 "98488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0" 198 "A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708" "DF1FB2BC2E4A4371";
200 "A4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507F" 201 "D6406CFF14266D31266FEA1E5C41564B777E690F5504F213" 202 "160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1" 203 "909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28A" 204 "D662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24" "855E6EEB22B3B2E5";
207 "AD107E1E9123A9D0D660FAA79559C51FA20D64E5683B9FD1" 208 "B54B1597B61D0A75E6FA141DF95A56DBAF9A3C407BA1DF15" 209 "EB3D688A309C180E1DE6B85A1274A0A66D3F8152AD6AC212" 210 "9037C9EDEFDA4DF8D91E8FEF55B7394B7AD5B7D0B6C12207" 211 "C9F98D11ED34DBF6C6BA0B2C8BBC27BE6A00E0A0B9C49708" 212 "B3BF8A317091883681286130BC8985DB1602E714415D9330" 213 "278273C7DE31EFDC7310F7121FD5A07415987D9ADC0A486D" 214 "CDF93ACC44328387315D75E198C641A480CD86A1B9E587E8" 215 "BE60E69CC928B2B9C52172E413042E9B23F10B0E16E79763" 216 "C9B53DCF4BA80A29E3FB73C16B8E75B97EF363E2FFA31F71" 217 "CF9DE5384E71B81C0AC4DFFE0C10E64F";
219 "AC4032EF4F2D9AE39DF30B5C8FFDAC506CDEBE7B89998CAF" 220 "74866A08CFE4FFE3A6824A4E10B9A6F0DD921F01A70C4AFA" 221 "AB739D7700C29F52C57DB17C620A8652BE5E9001A8D66AD7" 222 "C17669101999024AF4D027275AC1348BB8A762D0521BC98A" 223 "E247150422EA1ED409939D54DA7460CDB5F6C6B250717CBE" 224 "F180EB34118E98D119529A45D6F834566E3025E316A330EF" 225 "BB77A86F0C1AB15B051AE3D428C8F8ACB70A8137150B8EEB" 226 "10E183EDD19963DDD9E263E4770589EF6AA21E7F5F2FF381" 227 "B539CCE3409D13CD566AFBB48D6C019181E1BCFE94B30269" 228 "EDFE72FE9B6AA4BD7B5A0F1C71CFFF4C19C418E1F6EC0179" 229 "81BC087F2A7065B384B890D3191F2BFA";
232 "87A8E61DB4B6663CFFBBD19C651959998CEEF608660DD0F2" 233 "5D2CEED4435E3B00E00DF8F1D61957D4FAF7DF4561B2AA30" 234 "16C3D91134096FAA3BF4296D830E9A7C209E0C6497517ABD" 235 "5A8A9D306BCF67ED91F9E6725B4758C022E0B1EF4275BF7B" 236 "6C5BFC11D45F9088B941F54EB1E59BB8BC39A0BF12307F5C" 237 "4FDB70C581B23F76B63ACAE1CAA6B7902D52526735488A0E" 238 "F13C6D9A51BFA4AB3AD8347796524D8EF6A167B5A41825D9" 239 "67E144E5140564251CCACB83E6B486F6B3CA3F7971506026" 240 "C0B857F689962856DED4010ABD0BE621C3A3960A54E710C3" 241 "75F26375D7014103A4B54330C198AF126116D2276E11715F" 242 "693877FAD7EF09CADB094AE91E1A1597";
244 "3FB32C9B73134D0B2E77506660EDBD484CA7B18F21EF2054" 245 "07F4793A1A0BA12510DBC15077BE463FFF4FED4AAC0BB555" 246 "BE3A6C1B0C6B47B1BC3773BF7E8C6F62901228F8C28CBB18" 247 "A55AE31341000A650196F931C77A57F2DDF463E5E9EC144B" 248 "777DE62AAAB8A8628AC376D282D6ED3864E67982428EBC83" 249 "1D14348F6F2F9193B5045AF2767164E1DFC967C1FB3F2E55" 250 "A4BD1BFFE83B9C80D052B985D182EA0ADB2A3B7313D3FE14" 251 "C8484B1E052588B9B7D2BBD2DF016199ECD06E1557CD0915" 252 "B3353BBB64E0EC377FD028370DF92B52C7891428CDC67EB6" 253 "184B523D1DB246C32F63078490F00EF8D647D148D4795451" 254 "5E2327CFEF98C582664B4C0F6CC41659";
259 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 265 unsigned int len = 0;
268 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 269 ctx = HMAC_CTX_new ();
271 HMAC_Update (ctx, data,
vec_len (data));
272 HMAC_Final (ctx, prf, &len);
274 HMAC_CTX_init (&ctx);
276 HMAC_Update (&ctx, data,
vec_len (data));
277 HMAC_Final (&ctx, prf, &len);
278 HMAC_CTX_cleanup (&ctx);
288 v8 *t = 0, *s = 0, *tmp = 0, *ret = 0;
300 while (
vec_len (ret) < len && x < 255)
331 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 338 ASSERT (tr->
type == IKEV2_TRANSFORM_TYPE_INTEG);
342 if (tr->
md == EVP_sha1 ())
346 else if (tr->
md == EVP_sha256 ())
352 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 353 hctx = HMAC_CTX_new ();
355 HMAC_Update (hctx, (
const u8 *) data, len);
356 HMAC_Final (hctx, r, &l);
358 HMAC_CTX_init (&hctx);
360 HMAC_Update (&hctx, (
const u8 *) data, len);
361 HMAC_Final (&hctx, r, &l);
362 HMAC_CTX_cleanup (&hctx);
373 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 379 int out_len = 0, block_size;
388 if (len % block_size)
394 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 395 ctx = EVP_CIPHER_CTX_new ();
397 EVP_CIPHER_CTX_init (&ctx);
402 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 403 EVP_DecryptInit_ex (ctx, tr_encr->
cipher,
NULL, key, data);
404 EVP_DecryptUpdate (ctx, r, &out_len, data + block_size, len - block_size);
405 EVP_DecryptFinal_ex (ctx, r + out_len, &out_len);
407 EVP_DecryptInit_ex (&ctx, tr_encr->
cipher,
NULL, key, data);
408 EVP_DecryptUpdate (&ctx, r, &out_len, data + block_size, len - block_size);
409 EVP_DecryptFinal_ex (&ctx, r + out_len, &out_len);
412 _vec_len (r) -= r[
vec_len (r) - 1] + 1;
414 #if OPENSSL_VERSION_NUMBER < 0x10100000L 415 EVP_CIPHER_CTX_cleanup (&ctx);
423 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 438 RAND_bytes (dst, bs);
440 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 441 ctx = EVP_CIPHER_CTX_new ();
442 EVP_EncryptInit_ex (ctx, tr_encr->
cipher,
NULL, key, dst );
443 EVP_EncryptUpdate (ctx, dst + bs, &out_len, src,
vec_len (src));
445 EVP_CIPHER_CTX_init (&ctx);
446 EVP_EncryptInit_ex (&ctx, tr_encr->
cipher,
NULL, key, dst );
447 EVP_EncryptUpdate (&ctx, dst + bs, &out_len, src,
vec_len (src));
448 EVP_CIPHER_CTX_cleanup (&ctx);
464 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 467 const BIGNUM *pub_key, *priv_key;
469 BN_hex2bn (&p, t->
dh_p);
470 BN_hex2bn (&g, t->
dh_g);
471 DH_set0_pqg (dh, p,
NULL, g);
473 BN_hex2bn (&dh->p, t->
dh_p);
474 BN_hex2bn (&dh->g, t->
dh_g);
476 DH_generate_key (dh);
482 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 483 DH_get0_key (dh, &pub_key, &priv_key);
488 r = BN_bn2bin (dh->pub_key, sa->
i_dh_data);
497 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 498 DH_get0_key (dh, &pub_key, &priv_key);
501 r = BN_bn2bin (dh->pub_key, sa->
r_dh_data);
516 EC_KEY *ec = EC_KEY_new_by_curve_name (t->
nid);
519 EC_KEY_generate_key (ec);
521 const EC_POINT *r_point = EC_KEY_get0_public_key (ec);
522 const EC_GROUP *group = EC_KEY_get0_group (ec);
524 BN_CTX *bn_ctx = BN_CTX_new ();
526 EC_POINT *i_point = EC_POINT_new (group);
527 EC_POINT *shared_point = EC_POINT_new (group);
533 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 534 EC_POINT_get_affine_coordinates (group, r_point, x, y, bn_ctx);
536 EC_POINT_get_affine_coordinates_GFp (group, r_point, x, y, bn_ctx);
542 x_off = len - BN_num_bytes (x);
545 y_off = t->
key_len - BN_num_bytes (y);
549 const BIGNUM *prv = EC_KEY_get0_private_key (ec);
552 ASSERT (r == BN_num_bytes (prv));
557 x_off = len - BN_num_bytes (x);
560 y_off = t->
key_len - BN_num_bytes (y);
565 y = BN_bin2bn (sa->
i_dh_data + len, len, y);
566 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 567 EC_POINT_set_affine_coordinates (group, i_point, x, y, bn_ctx);
569 EC_POINT_set_affine_coordinates_GFp (group, i_point, x, y, bn_ctx);
572 EC_POINT_mul (group, shared_point,
NULL, i_point,
573 EC_KEY_get0_private_key (ec),
NULL);
574 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 575 EC_POINT_get_affine_coordinates (group, shared_point, x, y, bn_ctx);
577 EC_POINT_get_affine_coordinates_GFp (group, shared_point, x, y,
580 x_off = len - BN_num_bytes (x);
583 y_off = t->
key_len - BN_num_bytes (y);
591 BN_CTX_free (bn_ctx);
592 EC_POINT_free (i_point);
593 EC_POINT_free (shared_point);
605 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 610 BN_hex2bn (&p, t->
dh_p);
611 BN_hex2bn (&g, t->
dh_g);
612 DH_set0_pqg (dh, p,
NULL, g);
616 DH_set0_key (dh,
NULL, priv_key);
618 BN_hex2bn (&dh->p, t->
dh_p);
619 BN_hex2bn (&dh->g, t->
dh_g);
634 EC_KEY *ec = EC_KEY_new_by_curve_name (t->
nid);
637 const EC_GROUP *group = EC_KEY_get0_group (ec);
639 BN_CTX *bn_ctx = BN_CTX_new ();
645 EC_KEY_set_private_key (ec, prv);
652 y = BN_bin2bn (sa->
r_dh_data + len, len, y);
653 EC_POINT *r_point = EC_POINT_new (group);
654 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 655 EC_POINT_set_affine_coordinates (group, r_point, x, y, bn_ctx);
657 EC_POINT_set_affine_coordinates_GFp (group, r_point, x, y, bn_ctx);
659 EC_KEY_set_public_key (ec, r_point);
661 EC_POINT *i_point = EC_POINT_new (group);
662 EC_POINT *shared_point = EC_POINT_new (group);
665 y = BN_bin2bn (sa->
i_dh_data + len, len, y);
666 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 667 EC_POINT_set_affine_coordinates (group, i_point, x, y, bn_ctx);
669 EC_POINT_set_affine_coordinates_GFp (group, i_point, x, y, bn_ctx);
671 EC_POINT_mul (group, shared_point,
NULL, r_point,
672 EC_KEY_get0_private_key (ec),
NULL);
673 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 674 EC_POINT_get_affine_coordinates (group, shared_point, x, y, bn_ctx);
676 EC_POINT_get_affine_coordinates_GFp (group, shared_point, x, y, bn_ctx);
679 x_off = len - BN_num_bytes (x);
682 y_off = t->
key_len - BN_num_bytes (y);
690 BN_CTX_free (bn_ctx);
691 EC_POINT_free (i_point);
692 EC_POINT_free (r_point);
693 EC_POINT_free (shared_point);
700 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 701 EVP_MD_CTX *md_ctx = EVP_MD_CTX_new ();
704 EVP_MD_CTX_init (&md_ctx);
707 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 708 EVP_VerifyInit (md_ctx, EVP_sha1 ());
709 EVP_VerifyUpdate (md_ctx, data,
vec_len (data));
711 EVP_VerifyInit_ex (&md_ctx, EVP_sha1 (),
NULL);
712 EVP_VerifyUpdate (&md_ctx, data,
vec_len (data));
715 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 716 return EVP_VerifyFinal (md_ctx, sigbuf,
vec_len (sigbuf), pkey);
718 return EVP_VerifyFinal (&md_ctx, sigbuf,
vec_len (sigbuf), pkey);
725 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 726 EVP_MD_CTX *md_ctx = EVP_MD_CTX_new ();
730 unsigned int sig_len = 0;
733 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 734 EVP_SignInit (md_ctx, EVP_sha1 ());
735 EVP_SignUpdate (md_ctx, data,
vec_len (data));
737 EVP_SignFinal (md_ctx,
NULL, &sig_len, pkey);
740 EVP_SignFinal (md_ctx, sign, &sig_len, pkey);
742 EVP_SignInit (&md_ctx, EVP_sha1 ());
743 EVP_SignUpdate (&md_ctx, data,
vec_len (data));
745 EVP_SignFinal (&md_ctx,
NULL, &sig_len, pkey);
748 EVP_SignFinal (&md_ctx, sign, &sig_len, pkey);
758 EVP_PKEY *pkey =
NULL;
760 fp = fopen ((
char *) file,
"r");
775 pkey = X509_get_pubkey (x509);
787 EVP_PKEY *pkey =
NULL;
789 fp = fopen ((
char *) file,
"r");
815 tr->
type = IKEV2_TRANSFORM_TYPE_ENCR;
816 tr->
encr_type = IKEV2_TRANSFORM_ENCR_TYPE_AES_CBC;
819 tr->
cipher = EVP_aes_256_cbc ();
822 tr->
type = IKEV2_TRANSFORM_TYPE_ENCR;
823 tr->
encr_type = IKEV2_TRANSFORM_ENCR_TYPE_AES_CBC;
826 tr->
cipher = EVP_aes_192_cbc ();
829 tr->
type = IKEV2_TRANSFORM_TYPE_ENCR;
830 tr->
encr_type = IKEV2_TRANSFORM_ENCR_TYPE_AES_CBC;
833 tr->
cipher = EVP_aes_128_cbc ();
837 tr->
type = IKEV2_TRANSFORM_TYPE_PRF;
838 tr->
prf_type = IKEV2_TRANSFORM_PRF_TYPE_PRF_HMAC_SHA2_256;
841 tr->
md = EVP_sha256 ();
844 tr->
type = IKEV2_TRANSFORM_TYPE_PRF;
845 tr->
prf_type = IKEV2_TRANSFORM_PRF_TYPE_PRF_HMAC_SHA2_384;
848 tr->
md = EVP_sha384 ();
851 tr->
type = IKEV2_TRANSFORM_TYPE_PRF;
852 tr->
prf_type = IKEV2_TRANSFORM_PRF_TYPE_PRF_HMAC_SHA2_512;
855 tr->
md = EVP_sha512 ();
858 tr->
type = IKEV2_TRANSFORM_TYPE_PRF;
859 tr->
prf_type = IKEV2_TRANSFORM_PRF_TYPE_PRF_HMAC_SHA1;
862 tr->
md = EVP_sha1 ();
866 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
867 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA2_256_128;
870 tr->
md = EVP_sha256 ();
873 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
874 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA2_384_192;
877 tr->
md = EVP_sha384 ();
880 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
881 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA2_512_256;
884 tr->
md = EVP_sha512 ();
887 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
888 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA1_160;
891 tr->
md = EVP_sha1 ();
894 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
895 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA1_96;
898 tr->
md = EVP_sha1 ();
901 #if defined(OPENSSL_NO_CISCO_FECDH) 903 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
904 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_BRAINPOOL_512;
906 tr->
nid = NID_brainpoolP512r1;
910 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
911 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_BRAINPOOL_384;
913 tr->
nid = NID_brainpoolP384r1;
917 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
918 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_BRAINPOOL_256;
920 tr->
nid = NID_brainpoolP256r1;
924 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
925 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_BRAINPOOL_224;
927 tr->
nid = NID_brainpoolP224r1;
931 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
932 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_224;
934 tr->
nid = NID_secp224r1;
939 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
940 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_521;
942 tr->
nid = NID_secp521r1;
946 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
947 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_384;
949 tr->
nid = NID_secp384r1;
953 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
954 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_256;
956 tr->
nid = NID_X9_62_prime256v1;
960 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
961 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_192;
963 tr->
nid = NID_X9_62_prime192v1;
967 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
968 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_2048_256;
975 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
976 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_2048_224;
983 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
984 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_1024_160;
991 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
992 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_8192;
999 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1000 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_6144;
1007 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1008 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_4096;
1015 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1016 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_3072;
1023 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1024 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_2048;
1031 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1032 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_1536;
1039 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1040 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_1024;
1047 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1048 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_768;
1055 tr->
type = IKEV2_TRANSFORM_TYPE_ESN;
1056 tr->
esn_type = IKEV2_TRANSFORM_ESN_TYPE_ESN;
1059 tr->
type = IKEV2_TRANSFORM_TYPE_ESN;
1060 tr->
esn_type = IKEV2_TRANSFORM_ESN_TYPE_NO_ESN;
static const char modp_dh_1536_prime[]
static const char modp_dh_3072_generator[]
static const char modp_dh_8192_prime[]
static const char modp_dh_4096_prime[]
v8 * ikev2_calc_prf(ikev2_sa_transform_t *tr, v8 *key, v8 *data)
static const char modp_dh_8192_generator[]
static const char modp_dh_768_generator[]
#define vec_add2(V, P, N)
Add N elements to end of vector V, return pointer to new elements in P.
clib_memset(h->entries, 0, sizeof(h->entries[0])*entries)
static const char modp_dh_1024_prime[]
ikev2_sa_transform_t * ikev2_sa_get_td_for_type(ikev2_sa_proposal_t *p, ikev2_transform_type_t type)
static const char modp_dh_6144_prime[]
int ikev2_encrypt_data(ikev2_sa_t *sa, v8 *src, u8 *dst)
static const char modp_dh_768_prime[]
void ikev2_generate_dh(ikev2_sa_t *sa, ikev2_sa_transform_t *t)
EVP_PKEY * ikev2_load_cert_file(u8 *file)
#define vec_new(T, N)
Create new vector of given type and length (unspecified alignment, no header).
EVP_PKEY * ikev2_load_key_file(u8 *file)
static const char modp_dh_1024_160_prime[]
u8 * ikev2_calc_prfplus(ikev2_sa_transform_t *tr, u8 *key, u8 *seed, int len)
static const char modp_dh_1024_generator[]
static const char modp_dh_2048_256_prime[]
ikev2_sa_transform_t * supported_transforms
int ikev2_verify_sign(EVP_PKEY *pkey, u8 *sigbuf, u8 *data)
static const char modp_dh_1536_generator[]
static const char modp_dh_3072_prime[]
#define vec_free(V)
Free vector's memory (no header).
#define clib_warning(format, args...)
ikev2_sa_proposal_t * r_proposals
static const char modp_dh_2048_generator[]
static const char modp_dh_6144_generator[]
void ikev2_complete_dh(ikev2_sa_t *sa, ikev2_sa_transform_t *t)
#define vec_append(v1, v2)
Append v2 after v1.
static const char modp_dh_1024_160_generator[]
static const char modp_dh_4096_generator[]
static const char modp_dh_2048_prime[]
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
static const char modp_dh_2048_224_generator[]
static const char modp_dh_2048_256_generator[]
void ikev2_crypto_init(ikev2_main_t *km)
v8 * ikev2_decrypt_data(ikev2_sa_t *sa, u8 *data, int len)
u8 * ikev2_calc_sign(EVP_PKEY *pkey, u8 *data)
v8 * ikev2_calc_integr(ikev2_sa_transform_t *tr, v8 *key, u8 *data, int len)
static const char modp_dh_2048_224_prime[]