aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorPatrick Steuer <patrick.steuer@de.ibm.com>2017-12-05 13:10:11 +0100
committerRich Salz <rsalz@openssl.org>2017-12-05 17:57:29 -0500
commit723a7c5af0733eb4165947064731570adfa7457a (patch)
tree8a0f32a57030f8bb49861abc5f169e5a80c20e3c /apps
parent40866074c29dddd87a1436f2c7435f37dac425a7 (diff)
downloadopenssl-723a7c5af0733eb4165947064731570adfa7457a.zip
openssl-723a7c5af0733eb4165947064731570adfa7457a.tar.gz
openssl-723a7c5af0733eb4165947064731570adfa7457a.tar.bz2
apps/speed.c: detect evp cipher 32-bit ctr overflow and reset iv
Signed-off-by: Patrick Steuer <patrick.steuer@de.ibm.com> Reviewed-by: Andy Polyakov <appro@openssl.org> Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4846)
Diffstat (limited to 'apps')
-rw-r--r--apps/speed.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/apps/speed.c b/apps/speed.c
index 271472e..8d671e7 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