esp8266ndn
NDN Arduino library for ESP8266 and more
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
hmac.hpp
Go to the documentation of this file.
1#ifndef NDNPH_KEYCHAIN_HMAC_HPP
2#define NDNPH_KEYCHAIN_HMAC_HPP
3
4#include "../port/timingsafe/port.hpp"
5#include "helper.hpp"
6#include "private-key.hpp"
7#include "public-key.hpp"
8
9namespace ndnph {
10
13 : public detail::NamedPublicKey<SigType::HmacWithSha256>
14 , public detail::NamedPrivateKey<SigType::HmacWithSha256> {
15public:
17 explicit operator bool() const {
18 return m_key != nullptr;
19 }
20
27 bool import(const uint8_t* key, size_t keyLen) {
28 m_key.reset(new port::HmacSha256(key, keyLen));
29 return true;
30 }
31
32 size_t getMaxSigLen() const final {
33 return NDNPH_SHA256_LEN;
34 }
35
36 ssize_t sign(std::initializer_list<tlv::Value> chunks, uint8_t* sig) const final {
37 bool ok = computeHmac(chunks, sig);
38 return ok ? NDNPH_SHA256_LEN : -1;
39 }
40
41 bool verify(std::initializer_list<tlv::Value> chunks, const uint8_t* sig,
42 size_t sigLen) const final {
43 uint8_t result[NDNPH_SHA256_LEN];
44 return computeHmac(chunks, result) &&
45 port::TimingSafeEqual()(result, NDNPH_SHA256_LEN, sig, sigLen);
46 }
47
48private:
49 bool computeHmac(std::initializer_list<tlv::Value> chunks, uint8_t* sig) const {
50 if (m_key == nullptr) {
51 return false;
52 }
53 for (const auto& chunk : chunks) {
54 m_key->update(chunk.begin(), chunk.size());
55 }
56 return m_key->final(sig);
57 }
58
59private:
60 mutable std::unique_ptr<port::HmacSha256> m_key;
61};
62
63} // namespace ndnph
64
65#endif // NDNPH_KEYCHAIN_HMAC_HPP
HMAC-SHA256 algorithm, implemented with BearSSL.
Definition sha256-bearssl.hpp:31
HMAC-SHA256 secret key.
Definition hmac.hpp:14
size_t getMaxSigLen() const final
Definition hmac.hpp:32
ssize_t sign(std::initializer_list< tlv::Value > chunks, uint8_t *sig) const final
Perform signing.
Definition hmac.hpp:36
bool verify(std::initializer_list< tlv::Value > chunks, const uint8_t *sig, size_t sigLen) const final
Perform verification.
Definition hmac.hpp:41
Definition helper.hpp:64
Definition helper.hpp:54
#define NDNPH_SHA256_LEN
SHA256 digest length.
Definition common.hpp:34
Definition fs.hpp:33