From: Patrick Steuer Date: Tue, 5 Dec 2017 12:10:11 +0000 (+0100) Subject: apps/speed.c: detect evp cipher 32-bit ctr overflow and reset iv X-Git-Tag: OpenSSL_1_1_1-pre1~369 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=723a7c5af0733eb4165947064731570adfa7457a apps/speed.c: detect evp cipher 32-bit ctr overflow and reset iv Signed-off-by: Patrick Steuer Reviewed-by: Andy Polyakov Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/4846) --- diff --git a/apps/speed.c b/apps/speed.c index 271472eb09..8d671e7046 100644 --- a/apps/speed.c +++ b/apps/speed.c @@ -872,16 +872,23 @@ static int EVP_Update_loop(void *args) loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; EVP_CIPHER_CTX *ctx = tempargs->ctx; - int outl, count; + int outl, count, rc; #ifndef SIGALRM int nb_iter = save_count * 4 * lengths[0] / lengths[testnum]; #endif - if (decrypt) - for (count = 0; COND(nb_iter); count++) - EVP_DecryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); - else - for (count = 0; COND(nb_iter); count++) - EVP_EncryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); + if (decrypt) { + for (count = 0; COND(nb_iter); count++) { + rc = EVP_DecryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); + if (rc != 1) + EVP_CipherInit_ex(ctx, NULL, NULL, NULL, iv, -1); + } + } else { + for (count = 0; COND(nb_iter); count++) { + rc = EVP_EncryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); + if (rc != 1) + EVP_CipherInit_ex(ctx, NULL, NULL, NULL, iv, -1); + } + } if (decrypt) EVP_DecryptFinal_ex(ctx, buf, &outl); else