ESPHome 2026.1.0-dev
Loading...
Searching...
No Matches
hash_base.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <cstddef>
5#include <cstring>
7
8namespace esphome {
9
11class HashBase {
12 public:
13 virtual ~HashBase() = default;
14
16 virtual void init() = 0;
17
19 virtual void add(const uint8_t *data, size_t len) = 0;
20 void add(const char *data, size_t len) { this->add((const uint8_t *) data, len); }
21
23 virtual void calculate() = 0;
24
26 void get_bytes(uint8_t *output) { memcpy(output, this->digest_, this->get_size()); }
27
29 void get_hex(char *output) { format_hex_to(output, this->get_size() * 2 + 1, this->digest_, this->get_size()); }
30
32 bool equals_bytes(const uint8_t *expected) { return memcmp(this->digest_, expected, this->get_size()) == 0; }
33
35 bool equals_hex(const char *expected) {
36 uint8_t parsed[32]; // Fixed size for max hash (SHA256 = 32 bytes)
37 if (!parse_hex(expected, parsed, this->get_size())) {
38 return false;
39 }
40 return this->equals_bytes(parsed);
41 }
42
44 virtual size_t get_size() const = 0;
45
46 protected:
47 uint8_t digest_[32]; // Storage sized for max(MD5=16, SHA256=32) bytes
48};
49
50} // namespace esphome
Base class for hash algorithms.
Definition hash_base.h:11
void get_hex(char *output)
Retrieve the hash as hex characters. Output buffer must hold get_size() * 2 + 1 bytes.
Definition hash_base.h:29
uint8_t digest_[32]
Definition hash_base.h:47
virtual ~HashBase()=default
bool equals_hex(const char *expected)
Compare the hash against a provided hex-encoded hash.
Definition hash_base.h:35
virtual void calculate()=0
Compute the hash based on provided data.
virtual void init()=0
Initialize a new hash computation.
bool equals_bytes(const uint8_t *expected)
Compare the hash against a provided byte-encoded hash.
Definition hash_base.h:32
virtual size_t get_size() const =0
Get the size of the hash in bytes (16 for MD5, 32 for SHA256)
void add(const char *data, size_t len)
Definition hash_base.h:20
virtual void add(const uint8_t *data, size_t len)=0
Add bytes of data for the hash.
void get_bytes(uint8_t *output)
Retrieve the hash as bytes.
Definition hash_base.h:26
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string size_t len
Definition helpers.h:533
size_t parse_hex(const char *str, size_t length, uint8_t *data, size_t count)
Parse bytes from a hex-encoded string into a byte array.
Definition helpers.cpp:272
char * format_hex_to(char *buffer, size_t buffer_size, const uint8_t *data, size_t length)
Format byte array as lowercase hex to buffer (base implementation).
Definition helpers.cpp:319