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