1 #include "auth_algo.hpp"
2
3 #include <error.h>
4 #include <openssl/evp.h>
5 #include <openssl/hmac.h>
6 #include <openssl/sha.h>
7 #include <string.h>
8
9 #include <phosphor-logging/lg2.hpp>
10
11 namespace cipher
12 {
13
14 namespace rakp_auth
15 {
16
generateHMAC(const std::vector<uint8_t> & input) const17 std::vector<uint8_t> AlgoSHA1::generateHMAC(
18 const std::vector<uint8_t>& input) const
19 {
20 std::vector<uint8_t> output(SHA_DIGEST_LENGTH);
21 unsigned int mdLen = 0;
22
23 if (HMAC(EVP_sha1(), userKey.data(), userKey.size(), input.data(),
24 input.size(), output.data(), &mdLen) == NULL)
25 {
26 lg2::error("Generate HMAC failed: {ERROR}", "ERROR", strerror(errno));
27 output.resize(0);
28 }
29
30 return output;
31 }
32
generateICV(const std::vector<uint8_t> & input) const33 std::vector<uint8_t> AlgoSHA1::generateICV(
34 const std::vector<uint8_t>& input) const
35 {
36 std::vector<uint8_t> output(SHA_DIGEST_LENGTH);
37 unsigned int mdLen = 0;
38
39 if (HMAC(EVP_sha1(), sessionIntegrityKey.data(), SHA_DIGEST_LENGTH,
40 input.data(), input.size(), output.data(), &mdLen) == NULL)
41 {
42 lg2::error("Generate Session Integrity Key failed: {ERROR}", "ERROR",
43 strerror(errno));
44 output.resize(0);
45 }
46 output.resize(integrityCheckValueLength);
47
48 return output;
49 }
50
generateHMAC(const std::vector<uint8_t> & input) const51 std::vector<uint8_t> AlgoSHA256::generateHMAC(
52 const std::vector<uint8_t>& input) const
53 {
54 std::vector<uint8_t> output(SHA256_DIGEST_LENGTH);
55 unsigned int mdLen = 0;
56
57 if (HMAC(EVP_sha256(), userKey.data(), userKey.size(), input.data(),
58 input.size(), output.data(), &mdLen) == NULL)
59 {
60 lg2::error("Generate HMAC_SHA256 failed: {ERROR}", "ERROR",
61 strerror(errno));
62 output.resize(0);
63 }
64
65 return output;
66 }
67
generateICV(const std::vector<uint8_t> & input) const68 std::vector<uint8_t> AlgoSHA256::generateICV(
69 const std::vector<uint8_t>& input) const
70 {
71 std::vector<uint8_t> output(SHA256_DIGEST_LENGTH);
72 unsigned int mdLen = 0;
73
74 if (HMAC(EVP_sha256(), sessionIntegrityKey.data(),
75 sessionIntegrityKey.size(), input.data(), input.size(),
76 output.data(), &mdLen) == NULL)
77 {
78 lg2::error(
79 "Generate HMAC_SHA256_128 Integrity Check Value failed: {ERROR}",
80 "ERROR", strerror(errno));
81 output.resize(0);
82 }
83 output.resize(integrityCheckValueLength);
84
85 return output;
86 }
87
88 } // namespace rakp_auth
89
90 } // namespace cipher
91