1// Crypto/MyAes.h 2 3#ifndef __CRYPTO_MY_AES_H 4#define __CRYPTO_MY_AES_H 5 6#include "../../../C/Aes.h" 7 8#include "../../Common/MyCom.h" 9 10#include "../ICoder.h" 11 12namespace NCrypto { 13 14class CAesCbcCoder: 15 public ICompressFilter, 16 public ICryptoProperties, 17 public ICompressSetCoderProperties, 18 public CMyUnknownImp 19{ 20 AES_CODE_FUNC _codeFunc; 21 unsigned _offset; 22 unsigned _keySize; 23 bool _keyIsSet; 24 bool _encodeMode; 25 UInt32 _aes[AES_NUM_IVMRK_WORDS + 3]; 26 Byte _iv[AES_BLOCK_SIZE]; 27 28 bool SetFunctions(UInt32 algo); 29public: 30 CAesCbcCoder(bool encodeMode, unsigned keySize); 31 MY_UNKNOWN_IMP2(ICryptoProperties, ICompressSetCoderProperties) 32 STDMETHOD(Init)(); 33 STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); 34 STDMETHOD(SetKey)(const Byte *data, UInt32 size); 35 STDMETHOD(SetInitVector)(const Byte *data, UInt32 size); 36 STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps); 37}; 38 39struct CAesCbcEncoder: public CAesCbcCoder 40{ 41 CAesCbcEncoder(unsigned keySize = 0): CAesCbcCoder(true, keySize) {} 42}; 43 44struct CAesCbcDecoder: public CAesCbcCoder 45{ 46 CAesCbcDecoder(unsigned keySize = 0): CAesCbcCoder(false, keySize) {} 47}; 48 49 50} 51 52#endif 53