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:
Geremia
Date:
Wed Jan 28 17:55:13 2015 +0000
Revision:
16:4399e2e6260b
Parent:
15:6093fc19aad6
AES: bugfixed CBC, added PCBC (i could add CFB and OFB if needed), added public setIV(), moved keyExpansion() to public, in and out buffers can be the same

Who changed what in which revision?

UserRevisionLine numberNew contents of line
feb11 0:7a1237bd2d13 1 #ifndef AES_H
feb11 0:7a1237bd2d13 2 #define AES_H
feb11 0:7a1237bd2d13 3
feb11 8:a090264e9b2d 4 #include "BlockCipher.h"
feb11 0:7a1237bd2d13 5
feb11 0:7a1237bd2d13 6 enum AES_TYPE
feb11 0:7a1237bd2d13 7 {
feb11 0:7a1237bd2d13 8 AES_128 = 4,
feb11 0:7a1237bd2d13 9 AES_192 = 6,
feb11 0:7a1237bd2d13 10 AES_256 = 8
feb11 0:7a1237bd2d13 11 };
feb11 0:7a1237bd2d13 12
feb11 8:a090264e9b2d 13 class AES : public BlockCipher
feb11 0:7a1237bd2d13 14 {
feb11 0:7a1237bd2d13 15 public :
feb11 0:7a1237bd2d13 16
feb11 0:7a1237bd2d13 17 AES(const AES_TYPE type, uint8_t *key);
Geremia 15:6093fc19aad6 18 AES(const AES_TYPE type, uint8_t *key, uint8_t *iv, BLOCK_CIPHER_MODE m=CBC_MODE);
Geremia 15:6093fc19aad6 19 void keyExpansion(uint8_t *key);
Geremia 15:6093fc19aad6 20
feb11 0:7a1237bd2d13 21 private :
feb11 0:7a1237bd2d13 22
feb11 8:a090264e9b2d 23 virtual void encryptBlock(uint8_t *out, uint8_t *in);
feb11 8:a090264e9b2d 24 virtual void decryptBlock(uint8_t *out, uint8_t *in);
feb11 0:7a1237bd2d13 25
feb11 0:7a1237bd2d13 26 uint32_t rotWord(uint32_t w);
feb11 0:7a1237bd2d13 27 uint32_t invRotWord(uint32_t w);
feb11 0:7a1237bd2d13 28 uint32_t subWord(uint32_t w);
feb11 0:7a1237bd2d13 29 void subBytes();
feb11 0:7a1237bd2d13 30 void invSubBytes();
feb11 0:7a1237bd2d13 31 void shiftRows();
feb11 0:7a1237bd2d13 32 void invShiftRows();
feb11 0:7a1237bd2d13 33 void mul(uint8_t *r);
feb11 0:7a1237bd2d13 34 void invMul(uint8_t *r);
feb11 0:7a1237bd2d13 35 void mixColumns();
feb11 0:7a1237bd2d13 36 void invMixColumns();
feb11 0:7a1237bd2d13 37 void addRoundKey(int round);
feb11 0:7a1237bd2d13 38
feb11 0:7a1237bd2d13 39 uint8_t state[16];
feb11 0:7a1237bd2d13 40 uint32_t w[60];
feb11 0:7a1237bd2d13 41 uint8_t nr,nk;
feb11 0:7a1237bd2d13 42 };
feb11 0:7a1237bd2d13 43
feb11 0:7a1237bd2d13 44 #endif