From 09d45ffd7991e6b64a76d86f338a2f0973527be6 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 27 Sep 2012 01:37:06 +0100 Subject: [PATCH] [crypto] Allow in-place CBC decryption Signed-off-by: Michael Brown --- src/crypto/cbc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/crypto/cbc.c b/src/crypto/cbc.c index 28d38b2d..9bf0e8b4 100644 --- a/src/crypto/cbc.c +++ b/src/crypto/cbc.c @@ -88,13 +88,15 @@ void cbc_encrypt ( void *ctx, const void *src, void *dst, size_t len, void cbc_decrypt ( void *ctx, const void *src, void *dst, size_t len, struct cipher_algorithm *raw_cipher, void *cbc_ctx ) { size_t blocksize = raw_cipher->blocksize; + uint8_t next_cbc_ctx[blocksize]; assert ( ( len % blocksize ) == 0 ); while ( len ) { + memcpy ( next_cbc_ctx, src, blocksize ); cipher_decrypt ( raw_cipher, ctx, src, dst, blocksize ); cbc_xor ( cbc_ctx, dst, blocksize ); - memcpy ( cbc_ctx, src, blocksize ); + memcpy ( cbc_ctx, next_cbc_ctx, blocksize ); dst += blocksize; src += blocksize; len -= blocksize;