ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
xxtea.cpp
Go to the documentation of this file.
1#include "xxtea.h"
2
3namespace esphome::xxtea {
4
5static const uint32_t DELTA = 0x9e3779b9;
6#define MX ((((z >> 5) ^ (y << 2)) + ((y >> 3) ^ (z << 4))) ^ ((sum ^ y) + (k[(p ^ e) & 7] ^ z)))
7
8void encrypt(uint32_t *v, size_t n, const uint32_t *k) {
9 if (n == 0)
10 return;
11 uint32_t z, y, sum, e;
12 size_t p;
13 size_t q = 6 + 52 / n;
14 sum = 0;
15 z = v[n - 1];
16 while (q-- != 0) {
17 sum += DELTA;
18 e = (sum >> 2);
19 for (p = 0; p != n - 1; p++) {
20 y = v[p + 1];
21 z = v[p] += MX;
22 }
23 y = v[0];
24 z = v[n - 1] += MX;
25 }
26}
27
28void decrypt(uint32_t *v, size_t n, const uint32_t *k) {
29 if (n == 0)
30 return;
31 uint32_t z, y, sum, e;
32 size_t p;
33 size_t q = 6 + 52 / n;
34 sum = q * DELTA;
35 y = v[0];
36 while (q-- != 0) {
37 e = (sum >> 2);
38 for (p = n - 1; p != 0; p--) {
39 z = v[p - 1];
40 y = v[p] -= MX;
41 }
42 z = v[n - 1];
43 y = v[0] -= MX;
44 sum -= DELTA;
45 }
46}
47
48} // namespace esphome::xxtea
bool z
Definition msa3xx.h:1
void encrypt(uint32_t *v, size_t n, const uint32_t *k)
Encrypt a block of data in-place using XXTEA algorithm with 256-bit key.
Definition xxtea.cpp:8
void decrypt(uint32_t *v, size_t n, const uint32_t *k)
Decrypt a block of data in-place using XXTEA algorithm with 256-bit key.
Definition xxtea.cpp:28
static void uint32_t
uint16_t y
Definition tt21100.cpp:6