From d32f7d4b89b29e723bd20f138edb6e8ddcbb9ef3 Mon Sep 17 00:00:00 2001 From: Timerix Date: Fri, 21 Nov 2025 13:21:47 +0500 Subject: [PATCH] fixed AESBlockDecryptor bug --- src/cryptography/AES.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/cryptography/AES.c b/src/cryptography/AES.c index 976d0c1..e056326 100755 --- a/src/cryptography/AES.c +++ b/src/cryptography/AES.c @@ -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);