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";
262 unsigned int len = 0;
265 HMAC_Init_ex (ctx, key,
vec_len (key), tr->
md, NULL);
266 HMAC_Update (ctx, data,
vec_len (data));
267 HMAC_Final (ctx, prf, &len);
276 v8 *t = 0, *s = 0, *tmp = 0, *ret = 0;
288 while (
vec_len (ret) < len && x < 255)
323 ASSERT (tr->
type == IKEV2_TRANSFORM_TYPE_INTEG);
327 if (tr->
md == EVP_sha1 ())
331 else if (tr->
md == EVP_sha256 ())
337 HMAC_Init_ex (ctx, key,
vec_len (key), tr->
md, NULL);
338 HMAC_Update (ctx, (
const u8 *) data, len);
339 HMAC_Final (ctx, r, &l);
374 EVP_DecryptInit_ex (ctx, tr_encr->
cipher, 0, 0, 0);
375 EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_GCM_SET_IVLEN, 12, 0);
376 EVP_DecryptInit_ex (ctx, 0, 0, key, nonce);
377 EVP_DecryptUpdate (ctx, 0, &len, aad, aad_len);
378 EVP_DecryptUpdate (ctx, data, &len, data, data_len);
381 if (EVP_DecryptFinal_ex (ctx, data + len, &len) > 0)
383 *out_len = data_len - data[data_len - 1] - 1;
410 EVP_DecryptInit_ex (ctx, tr_encr->
cipher, NULL, key, iv);
411 EVP_CIPHER_CTX_set_padding (ctx, 0);
412 EVP_DecryptUpdate (ctx, data, &tmp_len, data, len);
414 if (EVP_DecryptFinal_ex (ctx, data + tmp_len, &tmp_len) > 0)
416 *out_len = len - data[len - 1] - 1;
429 int out_len = 0,
len = 0;
441 EVP_EncryptInit_ex (ctx, tr_encr->
cipher, 0, 0, 0);
442 EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_GCM_SET_IVLEN, 12, NULL);
443 EVP_EncryptInit_ex (ctx, 0, 0, key, nonce);
444 EVP_EncryptUpdate (ctx, NULL, &out_len, aad, aad_len);
445 EVP_EncryptUpdate (ctx, dst, &out_len, src,
vec_len (src));
446 EVP_EncryptFinal_ex (ctx, dst + out_len, &
len);
447 EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_GCM_GET_TAG, 16, tag);
459 int out_len = 0,
len = 0;
470 EVP_EncryptInit_ex (ctx, tr_encr->
cipher, NULL, key, iv);
472 EVP_CIPHER_CTX_set_padding (ctx, 0);
473 EVP_EncryptUpdate (ctx, dst, &out_len, src,
vec_len (src));
474 EVP_EncryptFinal_ex (ctx, dst + out_len, &
len);
486 int r = BN_bn2bin (a, to);
493 _vec_len (to) -=
pad;
507 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 510 const BIGNUM *pub_key, *priv_key;
512 BN_hex2bn (&p, t->
dh_p);
513 BN_hex2bn (&g, t->
dh_g);
514 DH_set0_pqg (dh, p, NULL, g);
516 BN_hex2bn (&dh->p, t->
dh_p);
517 BN_hex2bn (&dh->g, t->
dh_g);
519 DH_generate_key (dh);
525 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 526 DH_get0_key (dh, &pub_key, &priv_key);
540 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 541 DH_get0_key (dh, &pub_key, &priv_key);
566 EC_KEY *ec = EC_KEY_new_by_curve_name (t->
nid);
569 EC_KEY_generate_key (ec);
571 const EC_POINT *r_point = EC_KEY_get0_public_key (ec);
572 const EC_GROUP *group = EC_KEY_get0_group (ec);
573 BIGNUM *x = NULL, *y = NULL;
574 BN_CTX *bn_ctx = BN_CTX_new ();
576 EC_POINT *i_point = EC_POINT_new (group);
577 EC_POINT *shared_point = EC_POINT_new (group);
583 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 584 EC_POINT_get_affine_coordinates (group, r_point, x, y, bn_ctx);
586 EC_POINT_get_affine_coordinates_GFp (group, r_point, x, y, bn_ctx);
592 x_off = len - BN_num_bytes (x);
595 y_off = t->
key_len - BN_num_bytes (y);
599 const BIGNUM *prv = EC_KEY_get0_private_key (ec);
602 ASSERT (r == BN_num_bytes (prv));
607 x_off = len - BN_num_bytes (x);
610 y_off = t->
key_len - BN_num_bytes (y);
615 y = BN_bin2bn (sa->
i_dh_data + len, len, y);
616 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 617 EC_POINT_set_affine_coordinates (group, i_point, x, y, bn_ctx);
619 EC_POINT_set_affine_coordinates_GFp (group, i_point, x, y, bn_ctx);
622 EC_POINT_mul (group, shared_point, NULL, i_point,
623 EC_KEY_get0_private_key (ec), NULL);
624 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 625 EC_POINT_get_affine_coordinates (group, shared_point, x, y, bn_ctx);
627 EC_POINT_get_affine_coordinates_GFp (group, shared_point, x, y,
630 x_off = len - BN_num_bytes (x);
633 y_off = t->
key_len - BN_num_bytes (y);
641 BN_CTX_free (bn_ctx);
642 EC_POINT_free (i_point);
643 EC_POINT_free (shared_point);
655 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 660 BN_hex2bn (&p, t->
dh_p);
661 BN_hex2bn (&g, t->
dh_g);
662 DH_set0_pqg (dh, p, NULL, g);
666 DH_set0_key (dh, NULL, priv_key);
668 BN_hex2bn (&dh->p, t->
dh_p);
669 BN_hex2bn (&dh->g, t->
dh_g);
691 EC_KEY *ec = EC_KEY_new_by_curve_name (t->
nid);
694 const EC_GROUP *group = EC_KEY_get0_group (ec);
695 BIGNUM *x = NULL, *y = NULL;
696 BN_CTX *bn_ctx = BN_CTX_new ();
702 EC_KEY_set_private_key (ec, prv);
709 y = BN_bin2bn (sa->
r_dh_data + len, len, y);
710 EC_POINT *r_point = EC_POINT_new (group);
711 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 712 EC_POINT_set_affine_coordinates (group, r_point, x, y, bn_ctx);
714 EC_POINT_set_affine_coordinates_GFp (group, r_point, x, y, bn_ctx);
716 EC_KEY_set_public_key (ec, r_point);
718 EC_POINT *i_point = EC_POINT_new (group);
719 EC_POINT *shared_point = EC_POINT_new (group);
722 y = BN_bin2bn (sa->
i_dh_data + len, len, y);
723 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 724 EC_POINT_set_affine_coordinates (group, i_point, x, y, bn_ctx);
726 EC_POINT_set_affine_coordinates_GFp (group, i_point, x, y, bn_ctx);
728 EC_POINT_mul (group, shared_point, NULL, r_point,
729 EC_KEY_get0_private_key (ec), NULL);
730 #if OPENSSL_VERSION_NUMBER >= 0x30000000L 731 EC_POINT_get_affine_coordinates (group, shared_point, x, y, bn_ctx);
733 EC_POINT_get_affine_coordinates_GFp (group, shared_point, x, y, bn_ctx);
736 x_off = len - BN_num_bytes (x);
739 y_off = t->
key_len - BN_num_bytes (y);
747 BN_CTX_free (bn_ctx);
748 EC_POINT_free (i_point);
749 EC_POINT_free (r_point);
750 EC_POINT_free (shared_point);
758 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 759 EVP_MD_CTX *md_ctx = EVP_MD_CTX_new ();
762 EVP_MD_CTX_init (&md_ctx);
765 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 766 EVP_VerifyInit (md_ctx, EVP_sha1 ());
767 EVP_VerifyUpdate (md_ctx, data,
vec_len (data));
769 EVP_VerifyInit_ex (&md_ctx, EVP_sha1 (), NULL);
770 EVP_VerifyUpdate (&md_ctx, data,
vec_len (data));
773 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 774 verify = EVP_VerifyFinal (md_ctx, sigbuf,
vec_len (sigbuf), pkey);
775 EVP_MD_CTX_free (md_ctx);
777 verify = EVP_VerifyFinal (&md_ctx, sigbuf,
vec_len (sigbuf), pkey);
778 EVP_MD_CTX_cleanup (&md_ctx);
786 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 787 EVP_MD_CTX *md_ctx = EVP_MD_CTX_new ();
790 EVP_MD_CTX_init (&md_ctx);
792 unsigned int sig_len = 0;
795 #if OPENSSL_VERSION_NUMBER >= 0x10100000L 796 EVP_SignInit (md_ctx, EVP_sha1 ());
797 EVP_SignUpdate (md_ctx, data,
vec_len (data));
799 EVP_SignFinal (md_ctx, NULL, &sig_len, pkey);
802 EVP_SignFinal (md_ctx, sign, &sig_len, pkey);
803 EVP_MD_CTX_free (md_ctx);
805 EVP_SignInit (&md_ctx, EVP_sha1 ());
806 EVP_SignUpdate (&md_ctx, data,
vec_len (data));
808 EVP_SignFinal (&md_ctx, NULL, &sig_len, pkey);
811 EVP_SignFinal (&md_ctx, sign, &sig_len, pkey);
812 EVP_MD_CTX_cleanup (&md_ctx);
822 EVP_PKEY *pkey = NULL;
824 fp = fopen ((
char *) file,
"r");
831 x509 = PEM_read_X509 (fp, NULL, NULL, NULL);
839 pkey = X509_get_pubkey (x509);
852 EVP_PKEY *pkey = NULL;
854 fp = fopen ((
char *) file,
"r");
861 pkey = PEM_read_PrivateKey (fp, NULL, NULL, NULL);
880 tr->
type = IKEV2_TRANSFORM_TYPE_ENCR;
881 tr->
encr_type = IKEV2_TRANSFORM_ENCR_TYPE_AES_CBC;
884 tr->
cipher = EVP_aes_256_cbc ();
887 tr->
type = IKEV2_TRANSFORM_TYPE_ENCR;
888 tr->
encr_type = IKEV2_TRANSFORM_ENCR_TYPE_AES_CBC;
891 tr->
cipher = EVP_aes_192_cbc ();
894 tr->
type = IKEV2_TRANSFORM_TYPE_ENCR;
895 tr->
encr_type = IKEV2_TRANSFORM_ENCR_TYPE_AES_CBC;
898 tr->
cipher = EVP_aes_128_cbc ();
901 tr->
type = IKEV2_TRANSFORM_TYPE_ENCR;
902 tr->
encr_type = IKEV2_TRANSFORM_ENCR_TYPE_AES_GCM_16;
905 tr->
cipher = EVP_aes_256_gcm ();
908 tr->
type = IKEV2_TRANSFORM_TYPE_ENCR;
909 tr->
encr_type = IKEV2_TRANSFORM_ENCR_TYPE_AES_GCM_16;
912 tr->
cipher = EVP_aes_192_gcm ();
915 tr->
type = IKEV2_TRANSFORM_TYPE_ENCR;
916 tr->
encr_type = IKEV2_TRANSFORM_ENCR_TYPE_AES_GCM_16;
919 tr->
cipher = EVP_aes_128_gcm ();
923 tr->
type = IKEV2_TRANSFORM_TYPE_PRF;
924 tr->
prf_type = IKEV2_TRANSFORM_PRF_TYPE_PRF_HMAC_SHA2_256;
927 tr->
md = EVP_sha256 ();
930 tr->
type = IKEV2_TRANSFORM_TYPE_PRF;
931 tr->
prf_type = IKEV2_TRANSFORM_PRF_TYPE_PRF_HMAC_SHA2_384;
934 tr->
md = EVP_sha384 ();
937 tr->
type = IKEV2_TRANSFORM_TYPE_PRF;
938 tr->
prf_type = IKEV2_TRANSFORM_PRF_TYPE_PRF_HMAC_SHA2_512;
941 tr->
md = EVP_sha512 ();
944 tr->
type = IKEV2_TRANSFORM_TYPE_PRF;
945 tr->
prf_type = IKEV2_TRANSFORM_PRF_TYPE_PRF_HMAC_SHA1;
948 tr->
md = EVP_sha1 ();
952 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
953 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA2_256_128;
956 tr->
md = EVP_sha256 ();
959 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
960 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA2_384_192;
963 tr->
md = EVP_sha384 ();
966 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
967 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA2_512_256;
970 tr->
md = EVP_sha512 ();
973 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
974 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA1_160;
977 tr->
md = EVP_sha1 ();
980 tr->
type = IKEV2_TRANSFORM_TYPE_INTEG;
981 tr->
integ_type = IKEV2_TRANSFORM_INTEG_TYPE_AUTH_HMAC_SHA1_96;
984 tr->
md = EVP_sha1 ();
987 #if defined(OPENSSL_NO_CISCO_FECDH) 989 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
990 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_BRAINPOOL_512;
992 tr->
nid = NID_brainpoolP512r1;
996 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
997 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_BRAINPOOL_384;
999 tr->
nid = NID_brainpoolP384r1;
1003 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1004 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_BRAINPOOL_256;
1006 tr->
nid = NID_brainpoolP256r1;
1010 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1011 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_BRAINPOOL_224;
1013 tr->
nid = NID_brainpoolP224r1;
1017 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1018 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_224;
1020 tr->
nid = NID_secp224r1;
1025 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1026 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_521;
1028 tr->
nid = NID_secp521r1;
1032 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1033 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_384;
1035 tr->
nid = NID_secp384r1;
1039 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1040 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_256;
1042 tr->
nid = NID_X9_62_prime256v1;
1046 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1047 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_ECP_192;
1049 tr->
nid = NID_X9_62_prime192v1;
1053 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1054 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_2048_256;
1061 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1062 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_2048_224;
1069 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1070 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_1024_160;
1077 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1078 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_8192;
1085 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1086 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_6144;
1093 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1094 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_4096;
1101 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1102 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_3072;
1109 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1110 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_2048;
1117 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1118 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_1536;
1125 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1126 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_1024;
1133 tr->
type = IKEV2_TRANSFORM_TYPE_DH;
1134 tr->
dh_type = IKEV2_TRANSFORM_DH_TYPE_MODP_768;
1141 tr->
type = IKEV2_TRANSFORM_TYPE_ESN;
1142 tr->
esn_type = IKEV2_TRANSFORM_ESN_TYPE_ESN;
1145 tr->
type = IKEV2_TRANSFORM_TYPE_ESN;
1146 tr->
esn_type = IKEV2_TRANSFORM_ESN_TYPE_NO_ESN;
#define IKEV2_GCM_NONCE_SIZE
u8 pad[3]
log2 (size of the packing page block)
static const char modp_dh_1536_prime[]
static const char modp_dh_3072_generator[]
static_always_inline void ikev2_init_gcm_nonce(u8 *nonce, u8 *salt, u8 *iv)
int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen)
int ikev2_encrypt_data(ikev2_main_per_thread_data_t *ptd, ikev2_sa_t *sa, ikev2_sa_transform_t *tr_encr, v8 *src, u8 *dst)
static const char modp_dh_8192_prime[]
static const char modp_dh_4096_prime[]
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
v8 * ikev2_calc_prf(ikev2_sa_transform_t *tr, v8 *key, v8 *data)
static const char modp_dh_8192_generator[]
#define ikev2_elog_error(_msg)
#define ikev2_elog_debug(_msg)
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.
static const char modp_dh_1024_prime[]
#define IKEV2_GCM_ICV_SIZE
#define clib_memcpy(d, s, n)
static const char modp_dh_6144_prime[]
static const char modp_dh_768_prime[]
#define static_always_inline
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[]
#define IKEV2_GCM_SALT_SIZE
u8 * ikev2_calc_prfplus(ikev2_sa_transform_t *tr, u8 *key, u8 *seed, int len)
#define vec_insert(V, N, M)
Insert N vector elements starting at element M, initialize new elements to zero (no header...
static const char modp_dh_1024_generator[]
static const char modp_dh_2048_256_prime[]
ikev2_sa_transform_t * supported_transforms
int ikev2_decrypt_data(ikev2_main_per_thread_data_t *ptd, ikev2_sa_t *sa, ikev2_sa_transform_t *tr_encr, u8 *data, int len, u32 *out_len)
int ikev2_verify_sign(EVP_PKEY *pkey, u8 *sigbuf, u8 *data)
static_always_inline ikev2_main_per_thread_data_t * ikev2_get_per_thread_data()
static const char modp_dh_1536_generator[]
vl_api_ikev2_sa_transform_t prf
static const char modp_dh_3072_prime[]
#define vec_free(V)
Free vector's memory (no header).
vl_api_ikev2_sa_transform_t dh
#define ikev2_log_error(...)
static const char modp_dh_2048_generator[]
static const char modp_dh_6144_generator[]
int ikev2_decrypt_aead_data(ikev2_main_per_thread_data_t *ptd, ikev2_sa_t *sa, ikev2_sa_transform_t *tr_encr, u8 *data, int data_len, u8 *aad, u32 aad_len, u8 *tag, u32 *out_len)
void ikev2_complete_dh(ikev2_sa_t *sa, ikev2_sa_transform_t *t)
#define vec_append(v1, v2)
Append v2 after v1.
int ikev2_encrypt_aead_data(ikev2_main_per_thread_data_t *ptd, ikev2_sa_t *sa, ikev2_sa_transform_t *tr_encr, v8 *src, u8 *dst, u8 *aad, u32 aad_len, u8 *tag)
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)
f64 end
end of the time range
static const char modp_dh_2048_224_generator[]
static const char modp_dh_2048_256_generator[]
void ikev2_crypto_init(ikev2_main_t *km)
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[]
#define IKEV2_GCM_IV_SIZE