mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 00:31:58 +00:00
Add host platform support to MD5 component (#12458)
This commit is contained in:
@@ -1,7 +1,17 @@
|
|||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
|
from esphome.core import CORE
|
||||||
|
from esphome.helpers import IS_MACOS
|
||||||
|
|
||||||
CODEOWNERS = ["@esphome/core"]
|
CODEOWNERS = ["@esphome/core"]
|
||||||
|
|
||||||
|
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
cg.add_define("USE_MD5")
|
cg.add_define("USE_MD5")
|
||||||
|
|
||||||
|
# Add OpenSSL library for host platform
|
||||||
|
if CORE.is_host:
|
||||||
|
if IS_MACOS:
|
||||||
|
# macOS needs special handling for Homebrew OpenSSL
|
||||||
|
cg.add_build_flag("-I/opt/homebrew/opt/openssl/include")
|
||||||
|
cg.add_build_flag("-L/opt/homebrew/opt/openssl/lib")
|
||||||
|
cg.add_build_flag("-lcrypto")
|
||||||
|
|||||||
@@ -39,6 +39,44 @@ void MD5Digest::add(const uint8_t *data, size_t len) { br_md5_update(&this->ctx_
|
|||||||
void MD5Digest::calculate() { br_md5_out(&this->ctx_, this->digest_); }
|
void MD5Digest::calculate() { br_md5_out(&this->ctx_, this->digest_); }
|
||||||
#endif // USE_RP2040
|
#endif // USE_RP2040
|
||||||
|
|
||||||
|
#ifdef USE_HOST
|
||||||
|
MD5Digest::~MD5Digest() {
|
||||||
|
if (this->ctx_) {
|
||||||
|
EVP_MD_CTX_free(this->ctx_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MD5Digest::init() {
|
||||||
|
if (this->ctx_) {
|
||||||
|
EVP_MD_CTX_free(this->ctx_);
|
||||||
|
}
|
||||||
|
this->ctx_ = EVP_MD_CTX_new();
|
||||||
|
EVP_DigestInit_ex(this->ctx_, EVP_md5(), nullptr);
|
||||||
|
this->calculated_ = false;
|
||||||
|
memset(this->digest_, 0, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MD5Digest::add(const uint8_t *data, size_t len) {
|
||||||
|
if (!this->ctx_) {
|
||||||
|
this->init();
|
||||||
|
}
|
||||||
|
EVP_DigestUpdate(this->ctx_, data, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MD5Digest::calculate() {
|
||||||
|
if (!this->ctx_) {
|
||||||
|
this->init();
|
||||||
|
}
|
||||||
|
if (!this->calculated_) {
|
||||||
|
unsigned int len = 16;
|
||||||
|
EVP_DigestFinal_ex(this->ctx_, this->digest_, &len);
|
||||||
|
this->calculated_ = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
MD5Digest::~MD5Digest() = default;
|
||||||
|
#endif // USE_HOST
|
||||||
|
|
||||||
} // namespace md5
|
} // namespace md5
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
|
|
||||||
#include "esphome/core/hash_base.h"
|
#include "esphome/core/hash_base.h"
|
||||||
|
|
||||||
|
#ifdef USE_HOST
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_ESP32
|
#ifdef USE_ESP32
|
||||||
#include "esp_rom_md5.h"
|
#include "esp_rom_md5.h"
|
||||||
#define MD5_CTX_TYPE md5_context_t
|
#define MD5_CTX_TYPE md5_context_t
|
||||||
@@ -31,7 +35,7 @@ namespace md5 {
|
|||||||
class MD5Digest : public HashBase {
|
class MD5Digest : public HashBase {
|
||||||
public:
|
public:
|
||||||
MD5Digest() = default;
|
MD5Digest() = default;
|
||||||
~MD5Digest() override = default;
|
~MD5Digest() override;
|
||||||
|
|
||||||
/// Initialize a new MD5 digest computation.
|
/// Initialize a new MD5 digest computation.
|
||||||
void init() override;
|
void init() override;
|
||||||
@@ -47,7 +51,12 @@ class MD5Digest : public HashBase {
|
|||||||
size_t get_size() const override { return 16; }
|
size_t get_size() const override { return 16; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
#ifdef USE_HOST
|
||||||
|
EVP_MD_CTX *ctx_{nullptr};
|
||||||
|
bool calculated_{false};
|
||||||
|
#else
|
||||||
MD5_CTX_TYPE ctx_{};
|
MD5_CTX_TYPE ctx_{};
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace md5
|
} // namespace md5
|
||||||
|
|||||||
1
tests/components/hmac_md5/test.host.yaml
Normal file
1
tests/components/hmac_md5/test.host.yaml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<<: !include common.yaml
|
||||||
Reference in New Issue
Block a user