projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Improve small block cipher performance
[openssl.git]
/
providers
/
implementations
/
ciphers
/
ciphercommon.c
diff --git
a/providers/implementations/ciphers/ciphercommon.c
b/providers/implementations/ciphers/ciphercommon.c
index 967622cf64e196321eebfaec9807412deba281c5..33afa575855c49332b620f9e1f7f9e474f26a243 100644
(file)
--- a/
providers/implementations/ciphers/ciphercommon.c
+++ b/
providers/implementations/ciphers/ciphercommon.c
@@
-176,7
+176,12
@@
int cipher_generic_block_update(void *vctx, unsigned char *out, size_t *outl,
size_t outlint = 0;
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
size_t blksz = ctx->blocksize;
size_t outlint = 0;
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
size_t blksz = ctx->blocksize;
- size_t nextblocks = fillblock(ctx->buf, &ctx->bufsz, blksz, &in, &inl);
+ size_t nextblocks;
+
+ if (ctx->bufsz != 0)
+ nextblocks = fillblock(ctx->buf, &ctx->bufsz, blksz, &in, &inl);
+ else
+ nextblocks = inl & ~(blksz-1);
/*
* If we're decrypting and we end an update on a block boundary we hold
/*
* If we're decrypting and we end an update on a block boundary we hold
@@
-218,7
+223,7
@@
int cipher_generic_block_update(void *vctx, unsigned char *out, size_t *outl,
in += nextblocks;
inl -= nextblocks;
}
in += nextblocks;
inl -= nextblocks;
}
- if (!trailingdata(ctx->buf, &ctx->bufsz, blksz, &in, &inl)) {
+ if (
inl != 0 &&
!trailingdata(ctx->buf, &ctx->bufsz, blksz, &in, &inl)) {
/* ERR_raise already called */
return 0;
}
/* ERR_raise already called */
return 0;
}