implemented aes key validation
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user