1*d08b5235STom Joseph #include <openssl/evp.h> 2*d08b5235STom Joseph #include <openssl/hmac.h> 3*d08b5235STom Joseph #include <openssl/rand.h> 4*d08b5235STom Joseph #include <numeric> 5*d08b5235STom Joseph #include "crypt_algo.hpp" 6*d08b5235STom Joseph #include "message_parsers.hpp" 7*d08b5235STom Joseph 8*d08b5235STom Joseph namespace cipher 9*d08b5235STom Joseph { 10*d08b5235STom Joseph 11*d08b5235STom Joseph namespace crypt 12*d08b5235STom Joseph { 13*d08b5235STom Joseph 14*d08b5235STom Joseph Interface::Interface(const buffer& sik, const key& addKey) 15*d08b5235STom Joseph { 16*d08b5235STom Joseph unsigned int mdLen = 0; 17*d08b5235STom Joseph 18*d08b5235STom Joseph // Generated K2 for the confidentiality algorithm with the additional key 19*d08b5235STom Joseph // keyed with SIK. 20*d08b5235STom Joseph if (HMAC(EVP_sha1(), sik.data(), sik.size(), addKey.data(), 21*d08b5235STom Joseph addKey.size(), k2.data(), &mdLen) == NULL) 22*d08b5235STom Joseph { 23*d08b5235STom Joseph throw std::runtime_error("Generating K2 for confidentiality algorithm" 24*d08b5235STom Joseph "failed"); 25*d08b5235STom Joseph } 26*d08b5235STom Joseph } 27*d08b5235STom Joseph 28*d08b5235STom Joseph }// namespace crypt 29*d08b5235STom Joseph 30*d08b5235STom Joseph }// namespace cipher 31*d08b5235STom Joseph 32*d08b5235STom Joseph 33