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