From dc18683ac6c6d72421eddabdaf47a9e2f5eaf410 Mon Sep 17 00:00:00 2001 From: catsimple Date: Mon, 2 Feb 2026 22:50:35 +0800 Subject: [PATCH] Fix ciphertext length handling in BLE advertisement --- components/bthome/bthome.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/components/bthome/bthome.cpp b/components/bthome/bthome.cpp index bd00c17..e997e08 100644 --- a/components/bthome/bthome.cpp +++ b/components/bthome/bthome.cpp @@ -450,15 +450,19 @@ void BTHome::build_advertisement_data_() { size_t ciphertext_len = 0; if (this->encrypt_payload_(plaintext, measurement_len, ciphertext, &ciphertext_len)) { - memcpy(this->adv_data_ + measurement_start, ciphertext, ciphertext_len); - pos = measurement_start + ciphertext_len; + size_t actual_ciphertext_len = ciphertext_len - 4; + + memcpy(this->adv_data_ + measurement_start, ciphertext, actual_ciphertext_len); + pos = measurement_start + actual_ciphertext_len; - // Add counter (4 bytes, little-endian) this->adv_data_[pos++] = this->counter_ & 0xFF; this->adv_data_[pos++] = (this->counter_ >> 8) & 0xFF; this->adv_data_[pos++] = (this->counter_ >> 16) & 0xFF; this->adv_data_[pos++] = (this->counter_ >> 24) & 0xFF; + memcpy(this->adv_data_ + pos, ciphertext + actual_ciphertext_len, 4); + pos += 4; + this->counter_++; } }