micro_climate/App/Src/encrypt.c

32 lines
1.3 KiB
C
Raw Normal View History

#include "encrypt.h"
/* TEA<45><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD>ܹ<EFBFBD><DCB9><EFBFBD> */
2025-01-10 08:19:40 +00:00
static void tea_decrypt(uint32_t *v, uint32_t *k)
{
uint32_t delta = 0x9e3779b9; // <20><>ʼ<EFBFBD><CABC>delta
uint32_t v0 = g_stConfigInfo.encrypt_0, v1 = g_stConfigInfo.encrypt_1, sum = delta << 5, i; // <20><>ʼ<EFBFBD><CABC>v0, v1, sum
2025-01-10 08:19:40 +00:00
uint32_t k3 = k[3] ^ k[0], k2 = (k[2] ^ (*(uint32_t*)(0x1FFF7590))), k1 = k[1] ^ k[0], k0 = k[0] ^ (*(uint32_t*)(0x1FFF7590 + 4)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ
for(i = 0; i < 32; i++) { // ִ<><D6B4>32<33>ֽ<EFBFBD><D6BD><EFBFBD>
v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
sum -= delta;
}
v[0] = v0; // <20><><EFBFBD>ؽ<EFBFBD><D8BD>ܽ<EFBFBD><DCBD><EFBFBD>
v[1] = v1;
// term_printf("%x %x", v[0], v[1]);
}
/*
* <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ȷ
*
*/
uint8_t JudgeEncrypt()
{
uint32_t encryptCode[2] = {0};
2025-01-10 08:19:40 +00:00
// uint32_t key[] = {0x509770ff, 0x29c6b369, 0x4da2c125, ID<49>м<EFBFBD>32λ}; //
uint32_t key[] = {(K_128 >> 1) ^ (*(uint32_t*)(0x1FFF7590 + 4)), (K_96 >> 2) ^ key[0], (K_64 >>1) ^ (*(uint32_t*)(0x1FFF7590)), (*(uint32_t*)(0x1FFF7590 + 4)) ^ key[0]};
tea_decrypt(encryptCode, key);
2025-01-10 10:22:27 +00:00
return ((*(uint32_t*)(0x1FFF7590 + 4)) == encryptCode[0] && (*(uint32_t*)(0x1FFF7590 + 8)) == encryptCode[1]);
2025-01-10 08:19:40 +00:00
}