1*77531db5STom Joseph #include <openssl/hmac.h> 2*77531db5STom Joseph #include <openssl/sha.h> 3*77531db5STom Joseph #include "integrity_algo.hpp" 4*77531db5STom Joseph #include "message_parsers.hpp" 5*77531db5STom Joseph 6*77531db5STom Joseph namespace cipher 7*77531db5STom Joseph { 8*77531db5STom Joseph 9*77531db5STom Joseph namespace integrity 10*77531db5STom Joseph { 11*77531db5STom Joseph 12*77531db5STom Joseph Interface::Interface(const Buffer& sik, const Key& addKey, size_t authLength) 13*77531db5STom Joseph { 14*77531db5STom Joseph unsigned int mdLen = 0; 15*77531db5STom Joseph 16*77531db5STom Joseph // Generated K1 for the integrity algorithm with the additional key keyed 17*77531db5STom Joseph // with SIK. 18*77531db5STom Joseph if (HMAC(EVP_sha1(), sik.data(), sik.size(), addKey.data(), 19*77531db5STom Joseph addKey.size(), K1.data(), &mdLen) == NULL) 20*77531db5STom Joseph { 21*77531db5STom Joseph throw std::runtime_error("Generating Key1 for integrity " 22*77531db5STom Joseph "algorithm failed"); 23*77531db5STom Joseph } 24*77531db5STom Joseph 25*77531db5STom Joseph authCodeLength = authLength; 26*77531db5STom Joseph } 27*77531db5STom Joseph 28*77531db5STom Joseph }// namespace integrity 29*77531db5STom Joseph 30*77531db5STom Joseph }// namespace cipher 31