From 002dab0e98ad5979733c0d0c5c34b71a03a5d452 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Wed, 22 Jul 2026 21:58:13 +0200 Subject: rewrite: aes: sort out error handling in most spots --- aes/src/algorithm.c | 109 ++++++++++++++++++++++++++++++++++++++++++++-------- aes/src/block.c | 9 ----- aes/src/box.c | 7 ++++ aes/src/key.c | 15 -------- aes/src/padding.c | 5 --- 5 files changed, 99 insertions(+), 46 deletions(-) (limited to 'aes') diff --git a/aes/src/algorithm.c b/aes/src/algorithm.c index 2c3e056..bdbd1e9 100644 --- a/aes/src/algorithm.c +++ b/aes/src/algorithm.c @@ -85,18 +85,37 @@ static AES_StatusCode aes_format_key_aes256( return aes256_format_key(&dest->aes256, &src->aes256_key, err_details); } +static AES_StatusCode check_expand_key_params( + const AES_Key* key, + AES_EncryptionRoundKeys* encryption_keys, + AES_DecryptionRoundKeys* decryption_keys, + AES_ErrorDetails* err_details +) { + if (key == NULL) + return aes_error_null_argument(err_details, "key"); + if (encryption_keys == NULL) + return aes_error_null_argument(err_details, "encryption_keys"); + if (decryption_keys == NULL) + return aes_error_null_argument(err_details, "decryption_keys"); + return AES_SUCCESS; +} + static AES_StatusCode aes_expand_key_aes128( const AES_Key* key, AES_EncryptionRoundKeys* encryption_keys, AES_DecryptionRoundKeys* decryption_keys, AES_ErrorDetails* err_details ) { - AES_UNUSED_PARAMETER(err_details); + AES_StatusCode status = + check_expand_key_params(key, encryption_keys, decryption_keys, err_details); + if (aes_is_error(status)) + return status; + aes128_expand_key(&key->aes128_key, &encryption_keys->aes128_enc_keys); aes128_derive_decryption_keys( &encryption_keys->aes128_enc_keys, &decryption_keys->aes128_dec_keys ); - return AES_SUCCESS; + return status; } static AES_StatusCode aes_expand_key_aes192( @@ -105,12 +124,16 @@ static AES_StatusCode aes_expand_key_aes192( AES_DecryptionRoundKeys* decryption_keys, AES_ErrorDetails* err_details ) { - AES_UNUSED_PARAMETER(err_details); + AES_StatusCode status = + check_expand_key_params(key, encryption_keys, decryption_keys, err_details); + if (aes_is_error(status)) + return status; + aes192_expand_key(&key->aes192_key, &encryption_keys->aes192_enc_keys); aes192_derive_decryption_keys( &encryption_keys->aes192_enc_keys, &decryption_keys->aes192_dec_keys ); - return AES_SUCCESS; + return status; } static AES_StatusCode aes_expand_key_aes256( @@ -119,11 +142,45 @@ static AES_StatusCode aes_expand_key_aes256( AES_DecryptionRoundKeys* decryption_keys, AES_ErrorDetails* err_details ) { - AES_UNUSED_PARAMETER(err_details); + AES_StatusCode status = + check_expand_key_params(key, encryption_keys, decryption_keys, err_details); + if (aes_is_error(status)) + return status; + aes256_expand_key(&key->aes256_key, &encryption_keys->aes256_enc_keys); aes256_derive_decryption_keys( &encryption_keys->aes256_enc_keys, &decryption_keys->aes256_dec_keys ); + return status; +} + +static AES_StatusCode check_encrypt_params( + const AES_Block* input, + const AES_EncryptionRoundKeys* params, + AES_Block* output, + AES_ErrorDetails* err_details +) { + if (input == NULL) + return aes_error_null_argument(err_details, "input"); + if (params == NULL) + return aes_error_null_argument(err_details, "params"); + if (output == NULL) + return aes_error_null_argument(err_details, "output"); + return AES_SUCCESS; +} + +static AES_StatusCode check_decrypt_params( + const AES_Block* input, + const AES_DecryptionRoundKeys* params, + AES_Block* output, + AES_ErrorDetails* err_details +) { + if (input == NULL) + return aes_error_null_argument(err_details, "input"); + if (params == NULL) + return aes_error_null_argument(err_details, "params"); + if (output == NULL) + return aes_error_null_argument(err_details, "output"); return AES_SUCCESS; } @@ -133,9 +190,12 @@ static AES_StatusCode aes_encrypt_block_aes128( AES_Block* output, AES_ErrorDetails* err_details ) { - AES_UNUSED_PARAMETER(err_details); + AES_StatusCode status = check_encrypt_params(input, params, output, err_details); + if (aes_is_error(status)) + return status; + *output = aes128_encrypt_block(*input, ¶ms->aes128_enc_keys); - return AES_SUCCESS; + return status; } static AES_StatusCode aes_decrypt_block_aes128( @@ -144,9 +204,12 @@ static AES_StatusCode aes_decrypt_block_aes128( AES_Block* output, AES_ErrorDetails* err_details ) { - AES_UNUSED_PARAMETER(err_details); + AES_StatusCode status = check_decrypt_params(input, params, output, err_details); + if (aes_is_error(status)) + return status; + *output = aes128_decrypt_block(*input, ¶ms->aes128_dec_keys); - return AES_SUCCESS; + return status; } static AES_StatusCode aes_encrypt_block_aes192( @@ -155,9 +218,12 @@ static AES_StatusCode aes_encrypt_block_aes192( AES_Block* output, AES_ErrorDetails* err_details ) { - AES_UNUSED_PARAMETER(err_details); + AES_StatusCode status = check_encrypt_params(input, params, output, err_details); + if (aes_is_error(status)) + return status; + *output = aes192_encrypt_block(*input, ¶ms->aes192_enc_keys); - return AES_SUCCESS; + return status; } static AES_StatusCode aes_decrypt_block_aes192( @@ -166,9 +232,12 @@ static AES_StatusCode aes_decrypt_block_aes192( AES_Block* output, AES_ErrorDetails* err_details ) { - AES_UNUSED_PARAMETER(err_details); + AES_StatusCode status = check_decrypt_params(input, params, output, err_details); + if (aes_is_error(status)) + return status; + *output = aes192_decrypt_block(*input, ¶ms->aes192_dec_keys); - return AES_SUCCESS; + return status; } static AES_StatusCode aes_encrypt_block_aes256( @@ -177,9 +246,12 @@ static AES_StatusCode aes_encrypt_block_aes256( AES_Block* output, AES_ErrorDetails* err_details ) { - AES_UNUSED_PARAMETER(err_details); + AES_StatusCode status = check_encrypt_params(input, params, output, err_details); + if (aes_is_error(status)) + return status; + *output = aes256_encrypt_block(*input, ¶ms->aes256_enc_keys); - return AES_SUCCESS; + return status; } static AES_StatusCode aes_decrypt_block_aes256( @@ -188,9 +260,12 @@ static AES_StatusCode aes_decrypt_block_aes256( AES_Block* output, AES_ErrorDetails* err_details ) { - AES_UNUSED_PARAMETER(err_details); + AES_StatusCode status = check_decrypt_params(input, params, output, err_details); + if (aes_is_error(status)) + return status; + *output = aes256_decrypt_block(*input, ¶ms->aes256_dec_keys); - return AES_SUCCESS; + return status; } static AES_Ops aes128_ops = { diff --git a/aes/src/block.c b/aes/src/block.c index 552c445..3fbd24f 100644 --- a/aes/src/block.c +++ b/aes/src/block.c @@ -29,9 +29,6 @@ AES_StatusCode aes_format_block( const AES_Block* block, AES_ErrorDetails* err_details ) { - assert(str); - assert(block); - if (str == NULL) return aes_error_null_argument(err_details, "str"); if (block == NULL) @@ -54,9 +51,6 @@ AES_StatusCode aes_format_block_as_matrix( const AES_Block* block, AES_ErrorDetails* err_details ) { - assert(str); - assert(block); - if (str == NULL) return aes_error_null_argument(err_details, "str"); if (block == NULL) @@ -78,9 +72,6 @@ AES_StatusCode aes_format_block_as_matrix( } AES_StatusCode aes_parse_block(AES_Block* dest, const char* src, AES_ErrorDetails* err_details) { - assert(dest); - assert(src); - if (dest == NULL) return aes_error_null_argument(err_details, "dest"); if (src == NULL) diff --git a/aes/src/box.c b/aes/src/box.c index e4750dc..c62edec 100644 --- a/aes/src/box.c +++ b/aes/src/box.c @@ -139,6 +139,13 @@ AES_StatusCode aes_box_encrypt_block( AES_Block* output, AES_ErrorDetails* err_details ) { + if (box == NULL) + return aes_error_null_argument(err_details, "box"); + if (input == NULL) + return aes_error_null_argument(err_details, "input"); + if (output == NULL) + return aes_error_null_argument(err_details, "output"); + return aes_box_encrypt_block_in_mode[box->mode](box, input, output, err_details); } diff --git a/aes/src/key.c b/aes/src/key.c index 35f858c..64cd460 100644 --- a/aes/src/key.c +++ b/aes/src/key.c @@ -16,9 +16,6 @@ AES_StatusCode aes128_format_key( const AES128_Key* key, AES_ErrorDetails* err_details ) { - assert(str); - assert(key); - if (str == NULL) return aes_error_null_argument(err_details, "str"); if (key == NULL) @@ -41,9 +38,6 @@ AES_StatusCode aes192_format_key( const AES192_Key* key, AES_ErrorDetails* err_details ) { - assert(str); - assert(key); - if (str == NULL) return aes_error_null_argument(err_details, "str"); if (key == NULL) @@ -76,9 +70,6 @@ AES_StatusCode aes256_format_key( const AES256_Key* key, AES_ErrorDetails* err_details ) { - assert(str); - assert(key); - if (str == NULL) return aes_error_null_argument(err_details, "str"); if (key == NULL) @@ -111,9 +102,6 @@ AES_StatusCode aes128_parse_key(AES128_Key* dest, const char* src, AES_ErrorDeta } AES_StatusCode aes192_parse_key(AES192_Key* dest, const char* src, AES_ErrorDetails* err_details) { - assert(dest); - assert(src); - if (dest == NULL) return aes_error_null_argument(err_details, "dest"); if (src == NULL) @@ -156,9 +144,6 @@ AES_StatusCode aes192_parse_key(AES192_Key* dest, const char* src, AES_ErrorDeta } AES_StatusCode aes256_parse_key(AES256_Key* dest, const char* src, AES_ErrorDetails* err_details) { - assert(dest); - assert(src); - if (dest == NULL) return aes_error_null_argument(err_details, "dest"); if (src == NULL) diff --git a/aes/src/padding.c b/aes/src/padding.c index 54c6c9c..6016cff 100644 --- a/aes/src/padding.c +++ b/aes/src/padding.c @@ -34,9 +34,6 @@ AES_StatusCode aes_extract_padding_size( size_t* padding_size, AES_ErrorDetails* err_details ) { - assert(src); - assert(padding_size); - if (src == NULL) return aes_error_null_argument(err_details, "src"); if (padding_size == NULL) @@ -67,8 +64,6 @@ AES_StatusCode aes_fill_with_padding( size_t padding_size, AES_ErrorDetails* err_details ) { - assert(dest); - if (dest == NULL) return aes_error_null_argument(err_details, "dest"); -- cgit v1.3