Embedded systems coursework 2.
Fork of Crypto_light by
Diff: cipher/BlockCipher.cpp
- Revision:
- 14:f04410cef037
- Parent:
- 8:a090264e9b2d
--- a/cipher/BlockCipher.cpp Sun May 11 11:14:51 2014 +0000 +++ b/cipher/BlockCipher.cpp Sun May 11 13:36:45 2014 +0000 @@ -32,19 +32,41 @@ void BlockCipher::encrypt(uint8_t *out, uint8_t *in, uint32_t length) { + uint8_t *tmp = 0; + if(mode == CBC_MODE) + tmp = new uint8_t[getBlockSize()]; for(uint32_t i = 0; i < length; i += getBlockSize()) { - encryptBlock(&out[i], &in[i]); + if(mode == CBC_MODE) + { + memcpy(tmp, &in[i], getBlockSize()); + for(int j = 0; j < (int)getBlockSize(); ++j) + tmp[j] ^= IV[j]; + + encryptBlock(&out[i], tmp); + memcpy(IV, &out[i], getBlockSize()); + } + else + encryptBlock(&out[i], &in[i]); } + if(mode == CBC_MODE) + delete[] tmp; } void BlockCipher::decrypt(uint8_t *out, uint8_t *in, uint32_t length) { for(uint32_t i = 0; i < length; i += getBlockSize()) { - decryptBlock(&out[i], &in[i]); + if(mode == CBC_MODE) + { + decryptBlock(&out[i], &in[i]); + for(int j = 0; j < (int)getBlockSize(); ++j) + out[i+j] ^= IV[j]; + memcpy(IV, &in[i], getBlockSize()); + } + else + decryptBlock(&out[i], &in[i]); } } -