1*8c0446c1STom Joseph #include "auth_algo.hpp"
2*8c0446c1STom Joseph 
3*8c0446c1STom Joseph #include <openssl/hmac.h>
4*8c0446c1STom Joseph #include <openssl/sha.h>
5*8c0446c1STom Joseph 
6*8c0446c1STom Joseph #include <iostream>
7*8c0446c1STom Joseph 
8*8c0446c1STom Joseph namespace cipher
9*8c0446c1STom Joseph {
10*8c0446c1STom Joseph 
11*8c0446c1STom Joseph namespace rakp_auth
12*8c0446c1STom Joseph {
13*8c0446c1STom Joseph 
14*8c0446c1STom Joseph std::vector<uint8_t> AlgoSHA1::generateHMAC(std::vector<uint8_t>& input) const
15*8c0446c1STom Joseph {
16*8c0446c1STom Joseph     std::vector<uint8_t> output(SHA_DIGEST_LENGTH);
17*8c0446c1STom Joseph     unsigned int mdLen = 0;
18*8c0446c1STom Joseph 
19*8c0446c1STom Joseph     if (HMAC(EVP_sha1(), userKey.data(), userKey.size(), input.data(),
20*8c0446c1STom Joseph              input.size(), output.data(), &mdLen) == NULL)
21*8c0446c1STom Joseph     {
22*8c0446c1STom Joseph         std::cerr << "Generate HMAC failed\n";
23*8c0446c1STom Joseph         output.resize(0);
24*8c0446c1STom Joseph     }
25*8c0446c1STom Joseph 
26*8c0446c1STom Joseph     return output;
27*8c0446c1STom Joseph }
28*8c0446c1STom Joseph 
29*8c0446c1STom Joseph std::vector<uint8_t> AlgoSHA1::generateICV(std::vector<uint8_t>& input) const
30*8c0446c1STom Joseph {
31*8c0446c1STom Joseph     std::vector<uint8_t> output(SHA_DIGEST_LENGTH);
32*8c0446c1STom Joseph     unsigned int mdLen = 0;
33*8c0446c1STom Joseph 
34*8c0446c1STom Joseph     if (HMAC(EVP_sha1(), sessionIntegrityKey.data(), SHA_DIGEST_LENGTH,
35*8c0446c1STom Joseph              input.data(), input.size(), output.data(), &mdLen) == NULL)
36*8c0446c1STom Joseph     {
37*8c0446c1STom Joseph         std::cerr << "Generate Session Integrity Key failed\n";
38*8c0446c1STom Joseph         output.resize(0);
39*8c0446c1STom Joseph     }
40*8c0446c1STom Joseph 
41*8c0446c1STom Joseph     return output;
42*8c0446c1STom Joseph }
43*8c0446c1STom Joseph 
44*8c0446c1STom Joseph } // namespace auth
45*8c0446c1STom Joseph 
46*8c0446c1STom Joseph } // namespace cipher
47