implemented aes key validation

This commit is contained in:
2025-11-21 20:16:39 +05:00
parent d32f7d4b89
commit baca2fb4d3
8 changed files with 130 additions and 57 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include "tlibc/collections/Array.h"
#include "tlibc/errors.h"
#include "tlibc/magic.h"
#include "bearssl_block.h"
#include "cryptography.h"
@@ -15,7 +16,9 @@
#define AESStream_DEFAULT_CLASS (&br_aes_big_ctr_vtable)
#define __AES_BLOCK_KEY_CHECKSUM_SIZE br_sha256_SIZE
typedef struct EncryptedBlockHeader {
u8 key_checksum[__AES_BLOCK_KEY_CHECKSUM_SIZE];
u8 padding_size;
} ATTRIBUTE_ALIGNED(16) EncryptedBlockHeader;
@@ -32,6 +35,7 @@ typedef struct AESBlockEncryptor {
u8 enc_keys[sizeof(br_aes_big_cbcenc_keys)];
u8 buf[__AES_BUFFER_SIZE];
u8 iv[__AES_BLOCK_IV_SIZE];
u8 key_checksum[__AES_BLOCK_KEY_CHECKSUM_SIZE];
br_hmac_drbg_context rng_ctx;
} AESBlockEncryptor;
@@ -59,6 +63,7 @@ typedef struct AESBlockDecryptor {
u8 dec_keys[sizeof(br_aes_big_cbcdec_keys)];
u8 buf[__AES_BUFFER_SIZE];
u8 iv[__AES_BLOCK_IV_SIZE];
u8 key_checksum[__AES_BLOCK_KEY_CHECKSUM_SIZE];
} AESBlockDecryptor;
/// @param key supported sizes: 16, 24, 32
@@ -85,6 +90,7 @@ typedef struct AESStreamEncryptor {
u8 ctr_keys[sizeof(br_aes_big_ctr_keys)];
u8 buf[__AES_BUFFER_SIZE];
u8 iv[__AES_STREAM_IV_SIZE];
u8 key_checksum[__AES_BLOCK_KEY_CHECKSUM_SIZE];
u32 block_counter;
} AESStreamEncryptor;
@@ -97,7 +103,7 @@ void AESStreamEncryptor_construct(AESStreamEncryptor* ptr, Array(u8) key, const
void AESStreamEncryptor_changeKey(AESStreamEncryptor* ptr, Array(u8) key);
/// use this only at the beginning of the stream
#define AESStreamEncryptor_calcDstSize(src_size) (src_size + __AES_STREAM_IV_SIZE)
#define AESStreamEncryptor_calcDstSize(src_size) (__AES_STREAM_IV_SIZE + __AES_BLOCK_KEY_CHECKSUM_SIZE + src_size)
/// @brief If ptr->block_counter == 0, writes random IV to `dst`. After that writes encrypted data to dst.
/// @param src array of any size
@@ -114,6 +120,7 @@ typedef struct AESStreamDecryptor {
u8 ctr_keys[sizeof(br_aes_big_ctr_keys)];
u8 buf[__AES_BUFFER_SIZE];
u8 iv[__AES_STREAM_IV_SIZE];
u8 key_checksum[__AES_BLOCK_KEY_CHECKSUM_SIZE];
u32 block_counter;
} AESStreamDecryptor;