fixed AESBlockDecryptor bug

This commit is contained in:
Timerix 2025-11-21 13:21:47 +05:00
parent 9dc7de1b41
commit d32f7d4b89

View File

@ -48,7 +48,9 @@ Result(u32) AESBlockEncryptor_encrypt(AESBlockEncryptor* ptr,
// write IV to the beginning of dst
__Array_writeNext(&dst, ptr->iv, __AES_BLOCK_IV_SIZE);
const EncryptedBlockHeader header = { .padding_size = 16 - src.size % 16 };
EncryptedBlockHeader header;
memset(&header, 0, sizeof(header));
header.padding_size = (16 - src.size % 16) % 16;
// write header to buffer
memcpy(ptr->buf, &header, sizeof(header));
// encrypt header
@ -68,8 +70,8 @@ Result(u32) AESBlockEncryptor_encrypt(AESBlockEncryptor* ptr,
// encrypt buffer with remaining data
if(src.size > 0){
memcpy(ptr->buf, src.data, src.size);
u32 src_size_padded = src.size + header.padding_size;
memset(ptr->buf + src.size, 0, header.padding_size);
u32 src_size_padded = src.size + header.padding_size;
ptr->enc_class->run((void*)ptr->enc_keys,
ptr->iv,
ptr->buf, src_size_padded);
@ -118,7 +120,6 @@ Result(u32) AESBlockDecryptor_decrypt(AESBlockDecryptor* ptr,
ptr->dec_class->run((void*)ptr->dec_keys, ptr->iv, &header, sizeof(header));
// size of decrypted data without padding
u32 decrypted_size = src.size - header.padding_size;
const u32 src_size_padded = src.size;
src.size = decrypted_size;
// decrypt full buffers
@ -133,6 +134,8 @@ Result(u32) AESBlockDecryptor_decrypt(AESBlockDecryptor* ptr,
// decrypt buffer with remaining data
if(src.size > 0){
memcpy(ptr->buf, src.data, src.size);
memset(ptr->buf + src.size, 0, header.padding_size);
u32 src_size_padded = src.size + header.padding_size;
ptr->dec_class->run((void*)ptr->dec_keys,
ptr->iv,
ptr->buf, src_size_padded);