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