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