2
0
mirror of https://github.com/xcat2/xNBA.git synced 2024-11-25 19:08:35 +00:00

[crypto] Allow in-place CBC decryption

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2012-09-27 01:37:06 +01:00
parent c1adf7dabe
commit 09d45ffd79

View File

@ -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;