51 lines
1.9 KiB
C
51 lines
1.9 KiB
C
|
#include "encrypt.h"
|
|||
|
|
|||
|
/* TEA<45><41><EFBFBD><EFBFBD><EFBFBD>㷨<EFBFBD>ļ<EFBFBD><C4BC>ܹ<EFBFBD><DCB9><EFBFBD> */
|
|||
|
void tea_encrypt(uint32_t *en, uint32_t *k)
|
|||
|
{
|
|||
|
uint32_t v[2];
|
|||
|
v[0] = *(uint32_t*)(0x1FFF7590);
|
|||
|
v[1] = *(uint32_t*)(0x1FFF7590 + 4);
|
|||
|
uint32_t v0 = v[0], v1 = v[1], sum = 0, i; // <20><>ʼ<EFBFBD><CABC>v0, v1, sum
|
|||
|
uint32_t delta = 0x9e3779b9; // <20><>ʼ<EFBFBD><CABC>delta
|
|||
|
uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Կk
|
|||
|
for (i = 0; i < 32; i++) { // ִ<><D6B4>32<33>ּ<EFBFBD><D6BC><EFBFBD>
|
|||
|
sum += delta;
|
|||
|
v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
|
|||
|
v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
|
|||
|
}
|
|||
|
en[0] = v0; // <20><><EFBFBD>ؼ<EFBFBD><D8BC>ܽ<EFBFBD><DCBD><EFBFBD>
|
|||
|
en[1] = v1;
|
|||
|
|
|||
|
// term_printf("%x %x", v[0], v[1]);
|
|||
|
}
|
|||
|
|
|||
|
/* TEA<45><41><EFBFBD><EFBFBD><EFBFBD>㷨<EFBFBD>Ľ<EFBFBD><C4BD>ܹ<EFBFBD><DCB9><EFBFBD> */
|
|||
|
void tea_decrypt(uint32_t *v, uint32_t *k)
|
|||
|
{
|
|||
|
uint32_t delta = 0x9e3779b9; // <20><>ʼ<EFBFBD><CABC>delta
|
|||
|
// uint32_t v0 = 0x93ae5ba8, v1 = 0xc5ba4e82, sum = delta << 5, i; // <20><>ʼ<EFBFBD><CABC>v0, v1, sum
|
|||
|
uint32_t v0 = g_stConfigInfo.encrypt_0, v1 = g_stConfigInfo.encrypt_1, sum = delta << 5, i; // <20><>ʼ<EFBFBD><CABC>v0, v1, sum
|
|||
|
uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Կk
|
|||
|
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};
|
|||
|
uint32_t key[] = {0x509770ff, 0x29c6b369, 0x4da2c125, 0x7d729015}; //<2F><>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ɢλ<C9A2>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﶨ<EFBFBD><EFB6A8>
|
|||
|
tea_decrypt(encryptCode, key);
|
|||
|
return ((*(uint32_t*)(0x1FFF7590)) == encryptCode[0] && (*(uint32_t*)(0x1FFF7590 + 4)) == encryptCode[1]);
|
|||
|
}
|