// Crypto/MyAes.h | |
#ifndef __CRYPTO_MY_AES_H | |
#define __CRYPTO_MY_AES_H | |
#include "../../../C/Aes.h" | |
#include "../../Common/MyCom.h" | |
#include "../ICoder.h" | |
namespace NCrypto { | |
class CAesCbcCoder: | |
public ICompressFilter, | |
public ICryptoProperties, | |
public ICompressSetCoderProperties, | |
public CMyUnknownImp | |
{ | |
AES_CODE_FUNC _codeFunc; | |
unsigned _offset; | |
unsigned _keySize; | |
bool _keyIsSet; | |
bool _encodeMode; | |
UInt32 _aes[AES_NUM_IVMRK_WORDS + 3]; | |
Byte _iv[AES_BLOCK_SIZE]; | |
bool SetFunctions(UInt32 algo); | |
public: | |
CAesCbcCoder(bool encodeMode, unsigned keySize); | |
MY_UNKNOWN_IMP2(ICryptoProperties, ICompressSetCoderProperties) | |
STDMETHOD(Init)(); | |
STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); | |
STDMETHOD(SetKey)(const Byte *data, UInt32 size); | |
STDMETHOD(SetInitVector)(const Byte *data, UInt32 size); | |
STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps); | |
}; | |
struct CAesCbcEncoder: public CAesCbcCoder | |
{ | |
CAesCbcEncoder(unsigned keySize = 0): CAesCbcCoder(true, keySize) {} | |
}; | |
struct CAesCbcDecoder: public CAesCbcCoder | |
{ | |
CAesCbcDecoder(unsigned keySize = 0): CAesCbcCoder(false, keySize) {} | |
}; | |
} | |
#endif |