aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/aes/src/block.c
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2026-07-22 23:48:16 +0200
committerEgor Tensin <egor@tensin.name>2026-07-23 10:54:24 +0200
commitd6ba2397803c5f2d6a39a8684239c53f84e73b80 (patch)
treec33b3fe76890e05ddea32071f461f892f9d17e6a /aes/src/block.c
parentaesxx/utils: add tests for invalid inputs (diff)
downloadaes-tools-d6ba2397803c5f2d6a39a8684239c53f84e73b80.tar.gz
aes-tools-d6ba2397803c5f2d6a39a8684239c53f84e73b80.zip
aes: always require full inputs
I.e. no 31 digit for 128-bit blocks, reuse code, etc. Also, generalize hex string parsing.
Diffstat (limited to 'aes/src/block.c')
-rw-r--r--aes/src/block.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/aes/src/block.c b/aes/src/block.c
index 3fbd24f..1b72b62 100644
--- a/aes/src/block.c
+++ b/aes/src/block.c
@@ -77,19 +77,12 @@ AES_StatusCode aes_parse_block(AES_Block* dest, const char* src, AES_ErrorDetail
if (src == NULL)
return aes_error_null_argument(err_details, "src");
- const char* cursor = src;
-
AES_ALIGN(unsigned char, 16) bytes[16];
- for (int i = 0; i < 16; ++i) {
- int n;
- unsigned int byte;
- if (sscanf(cursor, "%2x%n", &byte, &n) != 1)
- return aes_error_parse(err_details, src, "a 128-bit block");
- bytes[i] = (unsigned char)byte;
- cursor += n;
- }
+ AES_StatusCode status = aes_parse_hex_string(bytes, src, sizeof(bytes), err_details);
+ if (aes_is_error(status))
+ return status;
*dest = aes_load_block_aligned(bytes);
- return AES_SUCCESS;
+ return status;
}