Embedded systems coursework 2.
Fork of Crypto_light by
cipher/BlockCipher.cpp@8:a090264e9b2d, 2013-09-14 (annotated)
- Committer:
- feb11
- Date:
- Sat Sep 14 20:54:59 2013 +0000
- Revision:
- 8:a090264e9b2d
- Child:
- 14:f04410cef037
refactored public API for ciphers & added TDES
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
feb11 | 8:a090264e9b2d | 1 | #include "BlockCipher.h" |
feb11 | 8:a090264e9b2d | 2 | #include <string.h> |
feb11 | 8:a090264e9b2d | 3 | |
feb11 | 8:a090264e9b2d | 4 | BlockCipher::BlockCipher(uint32_t bs, BLOCK_CIPHER_MODE m, uint8_t *iv): |
feb11 | 8:a090264e9b2d | 5 | Cipher(), |
feb11 | 8:a090264e9b2d | 6 | blockSize(bs), |
feb11 | 8:a090264e9b2d | 7 | mode(m), |
feb11 | 8:a090264e9b2d | 8 | IV(0) |
feb11 | 8:a090264e9b2d | 9 | { |
feb11 | 8:a090264e9b2d | 10 | if(mode == CBC_MODE) |
feb11 | 8:a090264e9b2d | 11 | { |
feb11 | 8:a090264e9b2d | 12 | IV = new uint8_t[blockSize]; |
feb11 | 8:a090264e9b2d | 13 | memcpy(IV, iv, blockSize); |
feb11 | 8:a090264e9b2d | 14 | } |
feb11 | 8:a090264e9b2d | 15 | } |
feb11 | 8:a090264e9b2d | 16 | |
feb11 | 8:a090264e9b2d | 17 | BlockCipher::~BlockCipher() |
feb11 | 8:a090264e9b2d | 18 | { |
feb11 | 8:a090264e9b2d | 19 | if(IV != 0) |
feb11 | 8:a090264e9b2d | 20 | delete[] IV; |
feb11 | 8:a090264e9b2d | 21 | } |
feb11 | 8:a090264e9b2d | 22 | |
feb11 | 8:a090264e9b2d | 23 | CIPHER_TYPE BlockCipher::getType() const |
feb11 | 8:a090264e9b2d | 24 | { |
feb11 | 8:a090264e9b2d | 25 | return BLOCK_CIPHER; |
feb11 | 8:a090264e9b2d | 26 | } |
feb11 | 8:a090264e9b2d | 27 | |
feb11 | 8:a090264e9b2d | 28 | uint32_t BlockCipher::getBlockSize() const |
feb11 | 8:a090264e9b2d | 29 | { |
feb11 | 8:a090264e9b2d | 30 | return blockSize; |
feb11 | 8:a090264e9b2d | 31 | } |
feb11 | 8:a090264e9b2d | 32 | |
feb11 | 8:a090264e9b2d | 33 | void BlockCipher::encrypt(uint8_t *out, uint8_t *in, uint32_t length) |
feb11 | 8:a090264e9b2d | 34 | { |
feb11 | 8:a090264e9b2d | 35 | for(uint32_t i = 0; i < length; i += getBlockSize()) |
feb11 | 8:a090264e9b2d | 36 | { |
feb11 | 8:a090264e9b2d | 37 | encryptBlock(&out[i], &in[i]); |
feb11 | 8:a090264e9b2d | 38 | |
feb11 | 8:a090264e9b2d | 39 | } |
feb11 | 8:a090264e9b2d | 40 | } |
feb11 | 8:a090264e9b2d | 41 | |
feb11 | 8:a090264e9b2d | 42 | void BlockCipher::decrypt(uint8_t *out, uint8_t *in, uint32_t length) |
feb11 | 8:a090264e9b2d | 43 | { |
feb11 | 8:a090264e9b2d | 44 | for(uint32_t i = 0; i < length; i += getBlockSize()) |
feb11 | 8:a090264e9b2d | 45 | { |
feb11 | 8:a090264e9b2d | 46 | decryptBlock(&out[i], &in[i]); |
feb11 | 8:a090264e9b2d | 47 | |
feb11 | 8:a090264e9b2d | 48 | } |
feb11 | 8:a090264e9b2d | 49 | } |
feb11 | 8:a090264e9b2d | 50 |