fixed AESBlockDecryptor bug
This commit is contained in:
parent
9dc7de1b41
commit
d32f7d4b89
@ -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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user