mirror of
https://github.com/esphome/esphome.git
synced 2025-03-19 00:58:13 +00:00
47 lines
916 B
C++
47 lines
916 B
C++
#include "xxtea.h"
|
|
|
|
namespace esphome {
|
|
namespace xxtea {
|
|
|
|
static const uint32_t DELTA = 0x9e3779b9;
|
|
#define MX ((((z >> 5) ^ (y << 2)) + ((y >> 3) ^ (z << 4))) ^ ((sum ^ y) + (k[(p ^ e) & 7] ^ z)))
|
|
|
|
void encrypt(uint32_t *v, size_t n, const uint32_t *k) {
|
|
uint32_t z, y, sum, e;
|
|
size_t p;
|
|
size_t q = 6 + 52 / n;
|
|
sum = 0;
|
|
z = v[n - 1];
|
|
while (q-- != 0) {
|
|
sum += DELTA;
|
|
e = (sum >> 2);
|
|
for (p = 0; p != n - 1; p++) {
|
|
y = v[p + 1];
|
|
z = v[p] += MX;
|
|
}
|
|
y = v[0];
|
|
z = v[n - 1] += MX;
|
|
}
|
|
}
|
|
|
|
void decrypt(uint32_t *v, size_t n, const uint32_t *k) {
|
|
uint32_t z, y, sum, e;
|
|
size_t p;
|
|
size_t q = 6 + 52 / n;
|
|
sum = q * DELTA;
|
|
y = v[0];
|
|
while (q-- != 0) {
|
|
e = (sum >> 2);
|
|
for (p = n - 1; p != 0; p--) {
|
|
z = v[p - 1];
|
|
y = v[p] -= MX;
|
|
}
|
|
z = v[n - 1];
|
|
y = v[0] -= MX;
|
|
sum -= DELTA;
|
|
}
|
|
}
|
|
|
|
} // namespace xxtea
|
|
} // namespace esphome
|