ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
md5.cpp
Go to the documentation of this file.
1#include <cstring>
2#include "md5.h"
3#ifdef USE_MD5
5
6namespace esphome::md5 {
7
8#if defined(USE_ARDUINO) && !defined(USE_RP2040) && !defined(USE_ESP32)
10 memset(this->digest_, 0, 16);
11 MD5Init(&this->ctx_);
12}
13
14void MD5Digest::add(const uint8_t *data, size_t len) { MD5Update(&this->ctx_, data, len); }
15
16void MD5Digest::calculate() { MD5Final(this->digest_, &this->ctx_); }
17#endif // USE_ARDUINO && !USE_RP2040
18
19#ifdef USE_ESP32
20void MD5Digest::init() {
21 memset(this->digest_, 0, 16);
22 esp_rom_md5_init(&this->ctx_);
23}
24
25void MD5Digest::add(const uint8_t *data, size_t len) { esp_rom_md5_update(&this->ctx_, data, len); }
26
27void MD5Digest::calculate() { esp_rom_md5_final(this->digest_, &this->ctx_); }
28#endif // USE_ESP32
29
30#ifdef USE_RP2040
31void MD5Digest::init() {
32 memset(this->digest_, 0, 16);
33 br_md5_init(&this->ctx_);
34}
35
36void MD5Digest::add(const uint8_t *data, size_t len) { br_md5_update(&this->ctx_, data, len); }
37
38void MD5Digest::calculate() { br_md5_out(&this->ctx_, this->digest_); }
39#endif // USE_RP2040
40
41#ifdef USE_HOST
43 if (this->ctx_) {
44 EVP_MD_CTX_free(this->ctx_);
45 }
46}
47
48void MD5Digest::init() {
49 if (this->ctx_) {
50 EVP_MD_CTX_free(this->ctx_);
51 }
52 this->ctx_ = EVP_MD_CTX_new();
53 EVP_DigestInit_ex(this->ctx_, EVP_md5(), nullptr);
54 this->calculated_ = false;
55 memset(this->digest_, 0, 16);
56}
57
58void MD5Digest::add(const uint8_t *data, size_t len) {
59 if (!this->ctx_) {
60 this->init();
61 }
62 EVP_DigestUpdate(this->ctx_, data, len);
63}
64
66 if (!this->ctx_) {
67 this->init();
68 }
69 if (!this->calculated_) {
70 unsigned int len = 16;
71 EVP_DigestFinal_ex(this->ctx_, this->digest_, &len);
72 this->calculated_ = true;
73 }
74}
75#else
76MD5Digest::~MD5Digest() = default;
77#endif // USE_HOST
78
79} // namespace esphome::md5
80
81#endif
uint8_t digest_[32]
Definition hash_base.h:52
void calculate() override
Compute the digest, based on the provided data.
Definition md5.cpp:16
EVP_MD_CTX * ctx_
Definition md5.h:54
void add(const uint8_t *data, size_t len) override
Add bytes of data for the digest.
Definition md5.cpp:14
void init() override
Initialize a new MD5 digest computation.
Definition md5.cpp:9
~MD5Digest() override
Definition md5.cpp:42
const void size_t len
Definition hal.h:64