xref: /openbmc/phosphor-net-ipmid/crypt_algo.cpp (revision d08b5235d65d2d358c7df5eef8fbd946ff9ac18b)
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