fix last commit

This commit is contained in:
RSDuck 2023-09-02 18:56:58 +02:00
parent 2a3a071216
commit 1aaf22d181
2 changed files with 15 additions and 6 deletions

View File

@ -28,14 +28,14 @@
// NOTE: Yes, the compiler does *not* recognize this code pattern, so it is indeed an optimization. // NOTE: Yes, the compiler does *not* recognize this code pattern, so it is indeed an optimization.
__attribute((always_inline)) static void Bswap128(void* Dst, void* Src) __attribute((always_inline)) static void Bswap128(void* Dst, void* Src)
{ {
*(__int128*)&Dst = __builtin_bswap128(*(__int128*)&Src); *(__int128*)Dst = __builtin_bswap128(*(__int128*)Src);
} }
#else #else
__attribute((always_inline)) static void Bswap128(void* Dst, void* Src) __attribute((always_inline)) static void Bswap128(void* Dst, void* Src)
{ {
for (int i = 0; i < 16; ++i) for (int i = 0; i < 16; ++i)
{ {
((char*)Src)[i] = ((char*)Src)[15 - i]; ((u8*)Dst)[i] = ((u8*)Src)[15 - i];
} }
} }
#endif #endif

View File

@ -337,13 +337,16 @@ bool ESEncrypt(u8* data, u32 len)
{ {
u8 rem[16]; u8 rem[16];
Bswap128(rem, &data[coarselen]); memset(rem, 0, 16);
for (int i = 0; i < remlen; i++)
rem[15-i] = data[coarselen+i];
for (int i = 0; i < 16; i++) mac[i] ^= rem[i]; for (int i = 0; i < 16; i++) mac[i] ^= rem[i];
AES_CTR_xcrypt_buffer(&ctx, rem, sizeof(rem)); AES_CTR_xcrypt_buffer(&ctx, rem, sizeof(rem));
AES_ECB_encrypt(&ctx, mac); AES_ECB_encrypt(&ctx, mac);
Bswap128(&data[coarselen], rem); for (int i = 0; i < remlen; i++)
data[coarselen+i] = rem[15-i];
} }
ctx.Iv[13] = 0x00; ctx.Iv[13] = 0x00;
@ -424,14 +427,20 @@ bool ESDecrypt(u8* data, u32 len)
iv[14] = (ivnum >> 8) & 0xFF; iv[14] = (ivnum >> 8) & 0xFF;
iv[15] = ivnum & 0xFF; iv[15] = ivnum & 0xFF;
Bswap128(rem, &data[coarselen]); memset(rem, 0, 16);
AES_ctx_set_iv(&ctx, iv);
AES_CTR_xcrypt_buffer(&ctx, rem, 16);
for (int i = 0; i < remlen; i++)
rem[15-i] = data[coarselen+i];
AES_ctx_set_iv(&ctx, iv); AES_ctx_set_iv(&ctx, iv);
AES_CTR_xcrypt_buffer(&ctx, rem, 16); AES_CTR_xcrypt_buffer(&ctx, rem, 16);
for (int i = 0; i < 16; i++) mac[i] ^= rem[i]; for (int i = 0; i < 16; i++) mac[i] ^= rem[i];
AES_ECB_encrypt(&ctx, mac); AES_ECB_encrypt(&ctx, mac);
Bswap128(&data[coarselen], rem); for (int i = 0; i < remlen; i++)
data[coarselen+i] = rem[15-i];
} }
ctx.Iv[13] = 0x00; ctx.Iv[13] = 0x00;