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

Dependents:   AES_example shaun_larada Smartage

Fork of Crypto by Francois Berder

cipher/AES.h

Committer:
Geremia
Date:
2015-01-28
Revision:
16:4399e2e6260b
Parent:
15:6093fc19aad6

File content as of revision 16:4399e2e6260b:

#ifndef AES_H
#define AES_H

#include "BlockCipher.h"

enum AES_TYPE
{
    AES_128 = 4,
    AES_192 = 6,
    AES_256 = 8
};

class AES : public BlockCipher
{
    public :
    
        AES(const AES_TYPE type, uint8_t *key);
        AES(const AES_TYPE type, uint8_t *key, uint8_t *iv, BLOCK_CIPHER_MODE m=CBC_MODE);
        void keyExpansion(uint8_t *key);
               
    private :
    
        virtual void encryptBlock(uint8_t *out, uint8_t *in);
        virtual void decryptBlock(uint8_t *out, uint8_t *in);
        
        uint32_t rotWord(uint32_t w);
        uint32_t invRotWord(uint32_t w);        
        uint32_t subWord(uint32_t w);
        void subBytes();
        void invSubBytes();
        void shiftRows();
        void invShiftRows();
        void mul(uint8_t *r);
        void invMul(uint8_t *r);
        void mixColumns();
        void invMixColumns();
        void addRoundKey(int round);

        uint8_t state[16];
        uint32_t w[60];
        uint8_t nr,nk;
};

#endif