Fork of François Berder Crypto, fixed AES CBC and small rework

Dependents:   AES_example shaun_larada Smartage

Fork of Crypto by Francois Berder

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?

UserRevisionLine numberNew 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