Embedded systems coursework 2.
Fork of Crypto_light by
cipher/AES.h@7:2dbbdfb08123, 2013-09-14 (annotated)
- Committer:
- feb11
- Date:
- Sat Sep 14 18:21:32 2013 +0000
- Revision:
- 7:2dbbdfb08123
- Parent:
- AES.h@0:7a1237bd2d13
- Child:
- 8:a090264e9b2d
added DES (not tested yet)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
feb11 | 0:7a1237bd2d13 | 1 | #ifndef AES_H |
feb11 | 0:7a1237bd2d13 | 2 | #define AES_H |
feb11 | 0:7a1237bd2d13 | 3 | |
feb11 | 0:7a1237bd2d13 | 4 | #include "Cipher.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 | 0:7a1237bd2d13 | 13 | class AES : public Cipher |
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); |
feb11 | 0:7a1237bd2d13 | 18 | |
feb11 | 0:7a1237bd2d13 | 19 | virtual void encrypt(uint8_t *out, uint8_t *in, uint32_t length); |
feb11 | 0:7a1237bd2d13 | 20 | virtual void decrypt(uint8_t *out, uint8_t *in, uint32_t length); |
feb11 | 0:7a1237bd2d13 | 21 | virtual uint32_t getBlockSize() const; |
feb11 | 0:7a1237bd2d13 | 22 | |
feb11 | 0:7a1237bd2d13 | 23 | private : |
feb11 | 0:7a1237bd2d13 | 24 | |
feb11 | 0:7a1237bd2d13 | 25 | void encryptBlock(uint8_t *out, uint8_t *in); |
feb11 | 0:7a1237bd2d13 | 26 | void decryptBlock(uint8_t *out, uint8_t *in); |
feb11 | 0:7a1237bd2d13 | 27 | |
feb11 | 0:7a1237bd2d13 | 28 | void keyExpansion(uint8_t *key); |
feb11 | 0:7a1237bd2d13 | 29 | uint32_t rotWord(uint32_t w); |
feb11 | 0:7a1237bd2d13 | 30 | uint32_t invRotWord(uint32_t w); |
feb11 | 0:7a1237bd2d13 | 31 | uint32_t subWord(uint32_t w); |
feb11 | 0:7a1237bd2d13 | 32 | void subBytes(); |
feb11 | 0:7a1237bd2d13 | 33 | void invSubBytes(); |
feb11 | 0:7a1237bd2d13 | 34 | void shiftRows(); |
feb11 | 0:7a1237bd2d13 | 35 | void invShiftRows(); |
feb11 | 0:7a1237bd2d13 | 36 | void mul(uint8_t *r); |
feb11 | 0:7a1237bd2d13 | 37 | void invMul(uint8_t *r); |
feb11 | 0:7a1237bd2d13 | 38 | void mixColumns(); |
feb11 | 0:7a1237bd2d13 | 39 | void invMixColumns(); |
feb11 | 0:7a1237bd2d13 | 40 | void addRoundKey(int round); |
feb11 | 0:7a1237bd2d13 | 41 | |
feb11 | 0:7a1237bd2d13 | 42 | uint8_t state[16]; |
feb11 | 0:7a1237bd2d13 | 43 | uint32_t w[60]; |
feb11 | 0:7a1237bd2d13 | 44 | uint8_t nr,nk; |
feb11 | 0:7a1237bd2d13 | 45 | }; |
feb11 | 0:7a1237bd2d13 | 46 | |
feb11 | 0:7a1237bd2d13 | 47 | #endif |