From: Tomas Mraz Date: Thu, 24 Oct 2024 14:06:32 +0000 (+0200) Subject: speed.c: Check block size before running EVP_Cipher_loop() X-Git-Tag: openssl-3.5.0-alpha1~960 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a3660729e68dc11c01edb4a349ff2610b6b59ee0;p=thirdparty%2Fopenssl.git speed.c: Check block size before running EVP_Cipher_loop() Reviewed-by: Saša Nedvědický Reviewed-by: Paul Dale Reviewed-by: Tom Cosgrove Reviewed-by: Todd Short (Merged from https://github.com/openssl/openssl/pull/25792) --- diff --git a/apps/speed.c b/apps/speed.c index c9137995cd6..a6da71fe6d6 100644 --- a/apps/speed.c +++ b/apps/speed.c @@ -1445,6 +1445,19 @@ static int SIG_verify_loop(void *args) return count; } +static int check_block_size(EVP_CIPHER_CTX *ctx, int length) +{ + const EVP_CIPHER *ciph = EVP_CIPHER_CTX_get0_cipher(ctx); + + if (length % EVP_CIPHER_get_block_size(ciph) != 0) { + BIO_printf(bio_err, + "\nRequested encryption length not a multiple of block size for %s!\n", + EVP_CIPHER_get0_name(ciph)); + return 0; + } + return 1; +} + static int run_benchmark(int async_jobs, int (*loop_function) (void *), loopargs_t *loopargs) { @@ -2665,6 +2678,8 @@ int speed_main(int argc, char **argv) } algindex = D_CBC_DES; for (testnum = 0; st && testnum < size_num; testnum++) { + if (!check_block_size(loopargs[0].ctx, lengths[testnum])) + break; print_message(names[D_CBC_DES], lengths[testnum], seconds.sym); Time_F(START); count = run_benchmark(async_jobs, EVP_Cipher_loop, loopargs); @@ -2685,6 +2700,8 @@ int speed_main(int argc, char **argv) } algindex = D_EDE3_DES; for (testnum = 0; st && testnum < size_num; testnum++) { + if (!check_block_size(loopargs[0].ctx, lengths[testnum])) + break; print_message(names[D_EDE3_DES], lengths[testnum], seconds.sym); Time_F(START); count = @@ -2709,6 +2726,8 @@ int speed_main(int argc, char **argv) } for (testnum = 0; st && testnum < size_num; testnum++) { + if (!check_block_size(loopargs[0].ctx, lengths[testnum])) + break; print_message(names[algindex], lengths[testnum], seconds.sym); Time_F(START); count = @@ -2734,6 +2753,8 @@ int speed_main(int argc, char **argv) } for (testnum = 0; st && testnum < size_num; testnum++) { + if (!check_block_size(loopargs[0].ctx, lengths[testnum])) + break; print_message(names[algindex], lengths[testnum], seconds.sym); Time_F(START); count = @@ -2758,6 +2779,8 @@ int speed_main(int argc, char **argv) } for (testnum = 0; st && testnum < size_num; testnum++) { + if (!check_block_size(loopargs[0].ctx, lengths[testnum])) + break; print_message(names[algindex], lengths[testnum], seconds.sym); Time_F(START); count =