18c0446c1STom Joseph #include "auth_algo.hpp" 28c0446c1STom Joseph 3*7b7f25f7SGeorge Liu #include <error.h> 49b307be6SVernon Mauery #include <openssl/evp.h> 58c0446c1STom Joseph #include <openssl/hmac.h> 68c0446c1STom Joseph #include <openssl/sha.h> 7*7b7f25f7SGeorge Liu #include <string.h> 88c0446c1STom Joseph 9*7b7f25f7SGeorge Liu #include <phosphor-logging/lg2.hpp> 108c0446c1STom Joseph 118c0446c1STom Joseph namespace cipher 128c0446c1STom Joseph { 138c0446c1STom Joseph 148c0446c1STom Joseph namespace rakp_auth 158c0446c1STom Joseph { 168c0446c1STom Joseph 1756527b93STom Joseph const std::string userName = "admin"; 1856527b93STom Joseph 199e801a2bSVernon Mauery std::vector<uint8_t> generateHMAC(const std::vector<uint8_t> & input) const209e801a2bSVernon Mauery AlgoSHA1::generateHMAC(const std::vector<uint8_t>& input) const 218c0446c1STom Joseph { 228c0446c1STom Joseph std::vector<uint8_t> output(SHA_DIGEST_LENGTH); 238c0446c1STom Joseph unsigned int mdLen = 0; 248c0446c1STom Joseph 258c0446c1STom Joseph if (HMAC(EVP_sha1(), userKey.data(), userKey.size(), input.data(), 268c0446c1STom Joseph input.size(), output.data(), &mdLen) == NULL) 278c0446c1STom Joseph { 28*7b7f25f7SGeorge Liu lg2::error("Generate HMAC failed: {ERROR}", "ERROR", strerror(errno)); 298c0446c1STom Joseph output.resize(0); 308c0446c1STom Joseph } 318c0446c1STom Joseph 328c0446c1STom Joseph return output; 338c0446c1STom Joseph } 348c0446c1STom Joseph 359e801a2bSVernon Mauery std::vector<uint8_t> generateICV(const std::vector<uint8_t> & input) const369e801a2bSVernon Mauery AlgoSHA1::generateICV(const std::vector<uint8_t>& input) const 378c0446c1STom Joseph { 388c0446c1STom Joseph std::vector<uint8_t> output(SHA_DIGEST_LENGTH); 398c0446c1STom Joseph unsigned int mdLen = 0; 408c0446c1STom Joseph 418c0446c1STom Joseph if (HMAC(EVP_sha1(), sessionIntegrityKey.data(), SHA_DIGEST_LENGTH, 428c0446c1STom Joseph input.data(), input.size(), output.data(), &mdLen) == NULL) 438c0446c1STom Joseph { 44*7b7f25f7SGeorge Liu lg2::error("Generate Session Integrity Key failed: {ERROR}", "ERROR", 45*7b7f25f7SGeorge Liu strerror(errno)); 468c0446c1STom Joseph output.resize(0); 478c0446c1STom Joseph } 482207f51cSVernon Mauery output.resize(integrityCheckValueLength); 498c0446c1STom Joseph 508c0446c1STom Joseph return output; 518c0446c1STom Joseph } 528c0446c1STom Joseph 539e801a2bSVernon Mauery std::vector<uint8_t> generateHMAC(const std::vector<uint8_t> & input) const549e801a2bSVernon Mauery AlgoSHA256::generateHMAC(const std::vector<uint8_t>& input) const 557e9e2ef6SVernon Mauery { 567e9e2ef6SVernon Mauery std::vector<uint8_t> output(SHA256_DIGEST_LENGTH); 577e9e2ef6SVernon Mauery unsigned int mdLen = 0; 587e9e2ef6SVernon Mauery 597e9e2ef6SVernon Mauery if (HMAC(EVP_sha256(), userKey.data(), userKey.size(), input.data(), 607e9e2ef6SVernon Mauery input.size(), output.data(), &mdLen) == NULL) 617e9e2ef6SVernon Mauery { 62*7b7f25f7SGeorge Liu lg2::error("Generate HMAC_SHA256 failed: {ERROR}", "ERROR", 63*7b7f25f7SGeorge Liu strerror(errno)); 647e9e2ef6SVernon Mauery output.resize(0); 657e9e2ef6SVernon Mauery } 667e9e2ef6SVernon Mauery 677e9e2ef6SVernon Mauery return output; 687e9e2ef6SVernon Mauery } 697e9e2ef6SVernon Mauery 709e801a2bSVernon Mauery std::vector<uint8_t> generateICV(const std::vector<uint8_t> & input) const719e801a2bSVernon Mauery AlgoSHA256::generateICV(const std::vector<uint8_t>& input) const 727e9e2ef6SVernon Mauery { 737e9e2ef6SVernon Mauery std::vector<uint8_t> output(SHA256_DIGEST_LENGTH); 747e9e2ef6SVernon Mauery unsigned int mdLen = 0; 757e9e2ef6SVernon Mauery 769e801a2bSVernon Mauery if (HMAC(EVP_sha256(), sessionIntegrityKey.data(), 779e801a2bSVernon Mauery sessionIntegrityKey.size(), input.data(), input.size(), 789e801a2bSVernon Mauery output.data(), &mdLen) == NULL) 797e9e2ef6SVernon Mauery { 80*7b7f25f7SGeorge Liu lg2::error( 81*7b7f25f7SGeorge Liu "Generate HMAC_SHA256_128 Integrity Check Value failed: {ERROR}", 82*7b7f25f7SGeorge Liu "ERROR", strerror(errno)); 837e9e2ef6SVernon Mauery output.resize(0); 847e9e2ef6SVernon Mauery } 857e9e2ef6SVernon Mauery output.resize(integrityCheckValueLength); 867e9e2ef6SVernon Mauery 877e9e2ef6SVernon Mauery return output; 887e9e2ef6SVernon Mauery } 897e9e2ef6SVernon Mauery 909e801a2bSVernon Mauery } // namespace rakp_auth 918c0446c1STom Joseph 928c0446c1STom Joseph } // namespace cipher 93