implemented encryption of EncryptedBlockInfo

This commit is contained in:
Timerix 2025-07-21 16:01:15 +03:00
parent 2fb4657fed
commit 992fcf6b98

View File

@ -61,11 +61,14 @@ void EncryptorAES_destroy(EncryptorAES* ptr){
void EncryptorAES_encrypt(EncryptorAES* ptr, Array src, Array dst){
assert(dst.size >= EncryptorAES_calcDstSize(src.size));
const EncryptedBlockInfo block_info = { .padding_size = 16 - src.size % 16 };
memcpy(ptr->buf.data, &block_info, sizeof(EncryptedBlockInfo));
// encrypt this struct
br_aes_ct64_cbcenc_run(&ptr->enc_ctx, ptr->iv.data, ptr->buf.data, sizeof(EncryptedBlockInfo));
// emit EncryptedBlockInfo to beginning of result
EncryptedBlockInfo block_info = { .padding_size = 16 - src.size % 16 };
memcpy(dst.data, &block_info, sizeof(block_info));
dst.data += sizeof(block_info);
dst.size -= sizeof(block_info);
memcpy(dst.data, ptr->buf.data, sizeof(EncryptedBlockInfo));
dst.data += sizeof(EncryptedBlockInfo);
dst.size -= sizeof(EncryptedBlockInfo);
// write full blocks
while(src.size > ptr->buf.size){
@ -114,9 +117,11 @@ void DecryptorAES_decrypt(DecryptorAES* ptr, Array src, Array dst, u32* decrypte
// read EncryptedBlockInfo from beginning of data
EncryptedBlockInfo block_info;
memcpy(&block_info, src.data, sizeof(block_info));
src.data += sizeof(block_info);
src.size -= sizeof(block_info);
memcpy(&block_info, src.data, sizeof(EncryptedBlockInfo));
src.data += sizeof(EncryptedBlockInfo);
src.size -= sizeof(EncryptedBlockInfo);
// decrypt this struct
br_aes_ct64_cbcdec_run(&ptr->dec_ctx, ptr->iv.data, &block_info, sizeof(EncryptedBlockInfo));
*decrypted_size = src.size - block_info.padding_size;
// write full blocks