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