summaryrefslogtreecommitdiffstats
path: root/crypto/aes
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2003-10-29 06:21:25 +0000
committerRichard Levitte <levitte@openssl.org>2003-10-29 06:21:25 +0000
commitdb5b10fab5a726805cc1c4aab36e52830b3ab61c (patch)
tree079c13bf4283e1bed530387d8a8df35321d1ee0f /crypto/aes
parentfa5846e58b2caecbb33460a7d6f78b02719d312e (diff)
Removing those memcpy()s also took away the possibility for in and out to
be the same. Therefore, the removed memcpy()s need to be restored.
Diffstat (limited to 'crypto/aes')
-rw-r--r--crypto/aes/aes_cbc.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/crypto/aes/aes_cbc.c b/crypto/aes/aes_cbc.c
index 0a28ab8d34..1222a21002 100644
--- a/crypto/aes/aes_cbc.c
+++ b/crypto/aes/aes_cbc.c
@@ -91,20 +91,21 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
}
} else {
while (len >= AES_BLOCK_SIZE) {
+ memcpy(tmp, in, AES_BLOCK_SIZE);
AES_decrypt(in, out, key);
for(n=0; n < AES_BLOCK_SIZE; ++n)
out[n] ^= ivec[n];
- memcpy(ivec, in, AES_BLOCK_SIZE);
+ memcpy(ivec, tmp, AES_BLOCK_SIZE);
len -= AES_BLOCK_SIZE;
in += AES_BLOCK_SIZE;
out += AES_BLOCK_SIZE;
}
if (len) {
memcpy(tmp, in, AES_BLOCK_SIZE);
- AES_decrypt(in, tmp, key);
+ AES_decrypt(tmp, tmp, key);
for(n=0; n < len; ++n)
out[n] = tmp[n] ^ ivec[n];
- memcpy(ivec, in, AES_BLOCK_SIZE);
+ memcpy(ivec, tmp, AES_BLOCK_SIZE);
}
}
}