aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/aes
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2026-07-21 14:44:58 +0200
committerEgor Tensin <egor@tensin.name>2026-07-21 15:03:00 +0200
commit31b275f8c201570af8a22dfe8c5ceaa9624b638c (patch)
tree8e11af31ec04c7c91b512a548bf23a61bc752d8b /aes
parentaes: minor refactoring (diff)
downloadaes-tools-31b275f8c201570af8a22dfe8c5ceaa9624b638c.tar.gz
aes-tools-31b275f8c201570af8a22dfe8c5ceaa9624b638c.zip
blocks are the same for every variant
Diffstat (limited to 'aes')
-rw-r--r--aes/include/aes/box.h16
-rw-r--r--aes/include/aes/box_data.h44
-rw-r--r--aes/src/box.c140
-rw-r--r--aes/src/box_aes.c114
4 files changed, 70 insertions, 244 deletions
diff --git a/aes/include/aes/box.h b/aes/include/aes/box.h
index 0a43943..37292dd 100644
--- a/aes/include/aes/box.h
+++ b/aes/include/aes/box.h
@@ -20,7 +20,7 @@ AES_StatusCode aes_box_init(
AES_Algorithm algorithm,
const AES_BoxKey* box_key,
AES_Mode mode,
- const AES_BoxBlock* iv,
+ const AES_Block* iv,
AES_ErrorDetails* err_details
);
@@ -32,7 +32,7 @@ AES_StatusCode aes_box_parse_key(
);
AES_StatusCode aes_box_parse_block(
- AES_BoxBlock* dest,
+ AES_Block* dest,
AES_Algorithm algorithm,
const char* src,
AES_ErrorDetails* err_details
@@ -46,23 +46,23 @@ AES_StatusCode aes_box_format_key(
);
AES_StatusCode aes_box_format_block(
- AES_BoxBlockString* dest,
+ AES_BlockString* dest,
AES_Algorithm algorithm,
- const AES_BoxBlock* src,
+ const AES_Block* src,
AES_ErrorDetails* err_details
);
AES_StatusCode aes_box_encrypt_block(
AES_Box* box,
- const AES_BoxBlock* plaintext,
- AES_BoxBlock* ciphertext,
+ const AES_Block* plaintext,
+ AES_Block* ciphertext,
AES_ErrorDetails* err_details
);
AES_StatusCode aes_box_decrypt_block(
AES_Box* box,
- const AES_BoxBlock* ciphertext,
- AES_BoxBlock* plaintext,
+ const AES_Block* ciphertext,
+ AES_Block* plaintext,
AES_ErrorDetails* err_details
);
diff --git a/aes/include/aes/box_data.h b/aes/include/aes/box_data.h
index e3137f3..0777d2e 100644
--- a/aes/include/aes/box_data.h
+++ b/aes/include/aes/box_data.h
@@ -39,14 +39,6 @@ typedef union {
AES256_KeyString aes256;
} AES_BoxKeyString;
-typedef union {
- AES_Block aes_block;
-} AES_BoxBlock;
-
-typedef union {
- AES_BlockString aes;
-} AES_BoxBlockString;
-
typedef AES_StatusCode (*AES_BoxCalculateRoundKeys)(
const AES_BoxKey* params,
AES_BoxEncryptionRoundKeys*,
@@ -54,24 +46,12 @@ typedef AES_StatusCode (*AES_BoxCalculateRoundKeys)(
AES_ErrorDetails* err_details
);
-typedef AES_StatusCode (*AES_BoxParseBlock)(
- AES_BoxBlock* dest,
- const char* src,
- AES_ErrorDetails* err_details
-);
-
typedef AES_StatusCode (*AES_BoxParseKey)(
AES_BoxKey* dest,
const char* src,
AES_ErrorDetails* err_details
);
-typedef AES_StatusCode (*AES_BoxFormatBlock)(
- AES_BoxBlockString* dest,
- const AES_BoxBlock* src,
- AES_ErrorDetails* err_details
-);
-
typedef AES_StatusCode (*AES_BoxFormatKey)(
AES_BoxKeyString* dest,
const AES_BoxKey* src,
@@ -79,42 +59,28 @@ typedef AES_StatusCode (*AES_BoxFormatKey)(
);
typedef AES_StatusCode (*AES_BoxEncryptBlock)(
- const AES_BoxBlock* plaintext,
+ const AES_Block* plaintext,
const AES_BoxEncryptionRoundKeys* params,
- AES_BoxBlock* ciphertext,
+ AES_Block* ciphertext,
AES_ErrorDetails* err_details
);
typedef AES_StatusCode (*AES_BoxDecryptBlock)(
- const AES_BoxBlock* ciphertext,
+ const AES_Block* ciphertext,
const AES_BoxDecryptionRoundKeys* params,
- AES_BoxBlock* plaintext,
+ AES_Block* plaintext,
AES_ErrorDetails* err_details
);
-typedef AES_StatusCode (*AES_BoxXorBlock)(AES_BoxBlock*, const AES_BoxBlock*, AES_ErrorDetails*);
-
-typedef AES_StatusCode (*AES_BoxIncBlock)(AES_BoxBlock*, AES_ErrorDetails*);
-
typedef AES_StatusCode (*AES_BoxGetBlockSize)(size_t*, AES_ErrorDetails*);
-typedef AES_StatusCode (*AES_BoxStoreBlock)(void*, const AES_BoxBlock*, AES_ErrorDetails*);
-
-typedef AES_StatusCode (*AES_BoxLoadBlock)(AES_BoxBlock*, const void*, AES_ErrorDetails*);
-
typedef struct {
AES_BoxCalculateRoundKeys calc_round_keys;
- AES_BoxParseBlock parse_block;
AES_BoxParseKey parse_key;
- AES_BoxFormatBlock format_block;
AES_BoxFormatKey format_key;
AES_BoxEncryptBlock encrypt_block;
AES_BoxDecryptBlock decrypt_block;
- AES_BoxXorBlock xor_block;
- AES_BoxIncBlock inc_block;
AES_BoxGetBlockSize get_block_size;
- AES_BoxStoreBlock store_block;
- AES_BoxLoadBlock load_block;
} AES_BoxInterface;
typedef struct {
@@ -122,7 +88,7 @@ typedef struct {
AES_BoxEncryptionRoundKeys encryption_keys;
AES_BoxDecryptionRoundKeys decryption_keys;
AES_Mode mode;
- AES_BoxBlock iv;
+ AES_Block iv;
} AES_Box;
#ifdef __cplusplus
diff --git a/aes/src/box.c b/aes/src/box.c
index 3d12591..d279fd8 100644
--- a/aes/src/box.c
+++ b/aes/src/box.c
@@ -21,7 +21,7 @@ AES_StatusCode aes_box_init(
AES_Algorithm algorithm,
const AES_BoxKey* box_key,
AES_Mode mode,
- const AES_BoxBlock* iv,
+ const AES_Block* iv,
AES_ErrorDetails* err_details
) {
AES_StatusCode status = AES_SUCCESS;
@@ -43,8 +43,8 @@ AES_StatusCode aes_box_init(
static AES_StatusCode aes_box_encrypt_block_ecb(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
return box->algorithm->encrypt_block(input, &box->encryption_keys, output, err_details);
@@ -52,16 +52,12 @@ static AES_StatusCode aes_box_encrypt_block_ecb(
static AES_StatusCode aes_box_encrypt_block_cbc(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_StatusCode status = AES_SUCCESS;
- AES_BoxBlock xored_input = *input;
-
- status = box->algorithm->xor_block(&xored_input, &box->iv, err_details);
- if (aes_is_error(status))
- return status;
+ AES_Block xored_input = aes_xor_blocks(*input, box->iv);
status =
box->algorithm->encrypt_block(&xored_input, &box->encryption_keys, output, err_details);
@@ -74,8 +70,8 @@ static AES_StatusCode aes_box_encrypt_block_cbc(
static AES_StatusCode aes_box_encrypt_block_cfb(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_StatusCode status = AES_SUCCESS;
@@ -84,18 +80,16 @@ static AES_StatusCode aes_box_encrypt_block_cfb(
if (aes_is_error(status))
return status;
- status = box->algorithm->xor_block(output, input, err_details);
- if (aes_is_error(status))
- return status;
-
+ *output = aes_xor_blocks(*output, *input);
box->iv = *output;
+
return status;
}
static AES_StatusCode aes_box_encrypt_block_ofb(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_StatusCode status = AES_SUCCESS;
@@ -105,18 +99,15 @@ static AES_StatusCode aes_box_encrypt_block_ofb(
return status;
*output = box->iv;
-
- status = box->algorithm->xor_block(output, input, err_details);
- if (aes_is_error(status))
- return status;
+ *output = aes_xor_blocks(*output, *input);
return status;
}
static AES_StatusCode aes_box_encrypt_block_ctr(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_StatusCode status = AES_SUCCESS;
@@ -125,21 +116,16 @@ static AES_StatusCode aes_box_encrypt_block_ctr(
if (aes_is_error(status))
return status;
- status = box->algorithm->xor_block(output, input, err_details);
- if (aes_is_error(status))
- return status;
-
- status = box->algorithm->inc_block(&box->iv, err_details);
- if (aes_is_error(status))
- return status;
+ *output = aes_xor_blocks(*output, *input);
+ box->iv = aes_inc_block(box->iv);
return status;
}
typedef AES_StatusCode (*AES_BoxEncryptBlockInMode)(
AES_Box*,
- const AES_BoxBlock*,
- AES_BoxBlock*,
+ const AES_Block*,
+ AES_Block*,
AES_ErrorDetails*
);
@@ -153,8 +139,8 @@ static AES_BoxEncryptBlockInMode aes_box_encrypt_block_in_mode[] = {
AES_StatusCode aes_box_encrypt_block(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
return aes_box_encrypt_block_in_mode[box->mode](box, input, output, err_details);
@@ -162,8 +148,8 @@ AES_StatusCode aes_box_encrypt_block(
static AES_StatusCode aes_box_decrypt_block_ecb(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
return box->algorithm->decrypt_block(input, &box->decryption_keys, output, err_details);
@@ -171,8 +157,8 @@ static AES_StatusCode aes_box_decrypt_block_ecb(
static AES_StatusCode aes_box_decrypt_block_cbc(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_StatusCode status = AES_SUCCESS;
@@ -181,18 +167,16 @@ static AES_StatusCode aes_box_decrypt_block_cbc(
if (aes_is_error(status))
return status;
- status = box->algorithm->xor_block(output, &box->iv, err_details);
- if (aes_is_error(status))
- return status;
-
+ *output = aes_xor_blocks(*output, box->iv);
box->iv = *input;
+
return status;
}
static AES_StatusCode aes_box_decrypt_block_cfb(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_StatusCode status = AES_SUCCESS;
@@ -201,11 +185,9 @@ static AES_StatusCode aes_box_decrypt_block_cfb(
if (aes_is_error(status))
return status;
- status = box->algorithm->xor_block(output, input, err_details);
- if (aes_is_error(status))
- return status;
-
+ *output = aes_xor_blocks(*output, *input);
box->iv = *input;
+
return status;
}
@@ -221,8 +203,8 @@ static AES_BoxDecryptBlockInMode aes_box_decrypt_block_in_mode[] = {
AES_StatusCode aes_box_decrypt_block(
AES_Box* box,
- const AES_BoxBlock* input,
- AES_BoxBlock* output,
+ const AES_Block* input,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
return aes_box_decrypt_block_in_mode[box->mode](box, input, output, err_details);
@@ -270,22 +252,14 @@ static AES_StatusCode aes_box_encrypt_buffer_block(
AES_ErrorDetails* err_details
) {
AES_StatusCode status = AES_SUCCESS;
- AES_BoxBlock plaintext;
-
- status = box->algorithm->load_block(&plaintext, src, err_details);
- if (aes_is_error(status))
- return status;
-
- AES_BoxBlock ciphertext;
+ AES_Block plaintext = aes_load_block(src);
+ AES_Block ciphertext;
status = aes_box_encrypt_block(box, &plaintext, &ciphertext, err_details);
if (aes_is_error(status))
return status;
- status = box->algorithm->store_block(dest, &ciphertext, err_details);
- if (aes_is_error(status))
- return status;
-
+ aes_store_block(dest, ciphertext);
return status;
}
@@ -475,22 +449,14 @@ static AES_StatusCode aes_box_decrypt_buffer_block(
AES_ErrorDetails* err_details
) {
AES_StatusCode status = AES_SUCCESS;
- AES_BoxBlock ciphertext;
-
- status = box->algorithm->load_block(&ciphertext, src, err_details);
- if (aes_is_error(status))
- return status;
-
- AES_BoxBlock plaintext;
+ AES_Block ciphertext = aes_load_block(src);
+ AES_Block plaintext;
status = aes_box_decrypt_block(box, &ciphertext, &plaintext, err_details);
if (aes_is_error(status))
return status;
- status = box->algorithm->store_block(dest, &plaintext, err_details);
- if (aes_is_error(status))
- return status;
-
+ aes_store_block(dest, plaintext);
return status;
}
@@ -603,20 +569,6 @@ AES_StatusCode aes_box_decrypt_buffer(
}
}
-AES_StatusCode aes_box_parse_block(
- AES_BoxBlock* dest,
- AES_Algorithm algorithm,
- const char* src,
- AES_ErrorDetails* err_details
-) {
- if (dest == NULL)
- return aes_error_null_argument(err_details, "dest");
- if (src == NULL)
- return aes_error_null_argument(err_details, "src");
-
- return aes_box_interfaces[algorithm]->parse_block(dest, src, err_details);
-}
-
AES_StatusCode aes_box_parse_key(
AES_BoxKey* dest,
AES_Algorithm algorithm,
@@ -631,20 +583,6 @@ AES_StatusCode aes_box_parse_key(
return aes_box_interfaces[algorithm]->parse_key(dest, src, err_details);
}
-AES_StatusCode aes_box_format_block(
- AES_BoxBlockString* dest,
- AES_Algorithm algorithm,
- const AES_BoxBlock* src,
- AES_ErrorDetails* err_details
-) {
- if (dest == NULL)
- return aes_error_null_argument(err_details, "dest");
- if (src == NULL)
- return aes_error_null_argument(err_details, "src");
-
- return aes_box_interfaces[algorithm]->format_block(dest, src, err_details);
-}
-
AES_StatusCode aes_box_format_key(
AES_BoxKeyString* dest,
AES_Algorithm algorithm,
diff --git a/aes/src/box_aes.c b/aes/src/box_aes.c
index 8c79335..c566b36 100644
--- a/aes/src/box_aes.c
+++ b/aes/src/box_aes.c
@@ -56,17 +56,6 @@ static AES_StatusCode aes_box_derive_params_aes256(
return AES_SUCCESS;
}
-static AES_StatusCode aes_box_parse_block_aes(
- AES_BoxBlock* dest,
- const char* src,
- AES_ErrorDetails* err_details
-) {
- if (dest == NULL)
- return aes_error_null_argument(err_details, "dest");
-
- return aes_AES_parse_block(&dest->aes_block, src, err_details);
-}
-
static AES_StatusCode aes_box_parse_key_aes128(
AES_BoxKey* dest,
const char* src,
@@ -100,19 +89,6 @@ static AES_StatusCode aes_box_parse_key_aes256(
return aes256_parse_key(&dest->aes256_key, src, err_details);
}
-static AES_StatusCode aes_box_format_block_aes(
- AES_BoxBlockString* dest,
- const AES_BoxBlock* src,
- AES_ErrorDetails* err_details
-) {
- if (dest == NULL)
- return aes_error_null_argument(err_details, "dest");
- if (src == NULL)
- return aes_error_null_argument(err_details, "src");
-
- return aes128_format_block(&dest->aes, &src->aes_block, err_details);
-}
-
static AES_StatusCode aes_box_format_key_aes128(
AES_BoxKeyString* dest,
const AES_BoxKey* src,
@@ -152,22 +128,6 @@ static AES_StatusCode aes_box_format_key_aes256(
return aes256_format_key(&dest->aes256, &src->aes256_key, err_details);
}
-static AES_StatusCode aes_box_xor_block_aes(
- AES_BoxBlock* dest,
- const AES_BoxBlock* src,
- AES_ErrorDetails* err_details
-) {
- AES_UNUSED_PARAMETER(err_details);
- dest->aes_block = aes_xor_blocks(dest->aes_block, src->aes_block);
- return AES_SUCCESS;
-}
-
-static AES_StatusCode aes_box_inc_block_aes(AES_BoxBlock* ctr, AES_ErrorDetails* err_details) {
- AES_UNUSED_PARAMETER(err_details);
- ctr->aes_block = aes_inc_block(ctr->aes_block);
- return AES_SUCCESS;
-}
-
static AES_StatusCode aes_box_get_block_size_aes(
size_t* block_size,
AES_ErrorDetails* err_details
@@ -177,133 +137,95 @@ static AES_StatusCode aes_box_get_block_size_aes(
return AES_SUCCESS;
}
-static AES_StatusCode aes_box_store_block_aes(
- void* dest,
- const AES_BoxBlock* src,
- AES_ErrorDetails* err_details
-) {
- AES_UNUSED_PARAMETER(err_details);
- aes_store_block(dest, src->aes_block);
- return AES_SUCCESS;
-}
-
-static AES_StatusCode aes_box_load_block_aes(
- AES_BoxBlock* dest,
- const void* src,
- AES_ErrorDetails* err_details
-) {
- AES_UNUSED_PARAMETER(err_details);
- dest->aes_block = aes_load_block(src);
- return AES_SUCCESS;
-}
-
static AES_StatusCode aes_box_encrypt_block_aes128(
- const AES_BoxBlock* input,
+ const AES_Block* input,
const AES_BoxEncryptionRoundKeys* params,
- AES_BoxBlock* output,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_UNUSED_PARAMETER(err_details);
- output->aes_block = aes128_encrypt_block_(input->aes_block, &params->aes128_encryption_keys);
+ *output = aes128_encrypt_block_(*input, &params->aes128_encryption_keys);
return AES_SUCCESS;
}
static AES_StatusCode aes_box_decrypt_block_aes128(
- const AES_BoxBlock* input,
+ const AES_Block* input,
const AES_BoxDecryptionRoundKeys* params,
- AES_BoxBlock* output,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_UNUSED_PARAMETER(err_details);
- output->aes_block = aes128_decrypt_block_(input->aes_block, &params->aes128_decryption_keys);
+ *output = aes128_decrypt_block_(*input, &params->aes128_decryption_keys);
return AES_SUCCESS;
}
static AES_StatusCode aes_box_encrypt_block_aes192(
- const AES_BoxBlock* input,
+ const AES_Block* input,
const AES_BoxEncryptionRoundKeys* params,
- AES_BoxBlock* output,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_UNUSED_PARAMETER(err_details);
- output->aes_block = aes192_encrypt_block_(input->aes_block, &params->aes192_encryption_keys);
+ *output = aes192_encrypt_block_(*input, &params->aes192_encryption_keys);
return AES_SUCCESS;
}
static AES_StatusCode aes_box_decrypt_block_aes192(
- const AES_BoxBlock* input,
+ const AES_Block* input,
const AES_BoxDecryptionRoundKeys* params,
- AES_BoxBlock* output,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_UNUSED_PARAMETER(err_details);
- output->aes_block = aes192_decrypt_block_(input->aes_block, &params->aes192_decryption_keys);
+ *output = aes192_decrypt_block_(*input, &params->aes192_decryption_keys);
return AES_SUCCESS;
}
static AES_StatusCode aes_box_encrypt_block_aes256(
- const AES_BoxBlock* input,
+ const AES_Block* input,
const AES_BoxEncryptionRoundKeys* params,
- AES_BoxBlock* output,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_UNUSED_PARAMETER(err_details);
- output->aes_block = aes256_encrypt_block_(input->aes_block, &params->aes256_encryption_keys);
+ *output = aes256_encrypt_block_(*input, &params->aes256_encryption_keys);
return AES_SUCCESS;
}
static AES_StatusCode aes_box_decrypt_block_aes256(
- const AES_BoxBlock* input,
+ const AES_Block* input,
const AES_BoxDecryptionRoundKeys* params,
- AES_BoxBlock* output,
+ AES_Block* output,
AES_ErrorDetails* err_details
) {
AES_UNUSED_PARAMETER(err_details);
- output->aes_block = aes256_decrypt_block_(input->aes_block, &params->aes256_decryption_keys);
+ *output = aes256_decrypt_block_(*input, &params->aes256_decryption_keys);
return AES_SUCCESS;
}
AES_BoxInterface aes128_box_interface = {
&aes_box_derive_params_aes128,
- &aes_box_parse_block_aes,
&aes_box_parse_key_aes128,
- &aes_box_format_block_aes,
&aes_box_format_key_aes128,
&aes_box_encrypt_block_aes128,
&aes_box_decrypt_block_aes128,
- &aes_box_xor_block_aes,
- &aes_box_inc_block_aes,
&aes_box_get_block_size_aes,
- &aes_box_store_block_aes,
- &aes_box_load_block_aes,
};
AES_BoxInterface aes192_box_interface = {
&aes_box_derive_params_aes192,
- &aes_box_parse_block_aes,
&aes_box_parse_key_aes192,
- &aes_box_format_block_aes,
&aes_box_format_key_aes192,
&aes_box_encrypt_block_aes192,
&aes_box_decrypt_block_aes192,
- &aes_box_xor_block_aes,
- &aes_box_inc_block_aes,
&aes_box_get_block_size_aes,
- &aes_box_store_block_aes,
- &aes_box_load_block_aes,
};
AES_BoxInterface aes256_box_interface = {
&aes_box_derive_params_aes256,
- &aes_box_parse_block_aes,
&aes_box_parse_key_aes256,
- &aes_box_format_block_aes,
&aes_box_format_key_aes256,
&aes_box_encrypt_block_aes256,
&aes_box_decrypt_block_aes256,
- &aes_box_xor_block_aes,
- &aes_box_inc_block_aes,
&aes_box_get_block_size_aes,
- &aes_box_store_block_aes,
- &aes_box_load_block_aes,
};