1// Crypto/MyAes.h 2 3#ifndef ZIP7_INC_CRYPTO_MY_AES_H 4#define ZIP7_INC_CRYPTO_MY_AES_H 5 6#include "../../../C/Aes.h" 7 8#include "../../Common/MyBuffer2.h" 9#include "../../Common/MyCom.h" 10 11#include "../ICoder.h" 12 13namespace NCrypto { 14 15#ifdef Z7_EXTRACT_ONLY 16#define Z7_IFACEN_IAesCoderSetFunctions(x) 17#else 18#define Z7_IFACEN_IAesCoderSetFunctions(x) \ 19 virtual bool SetFunctions(UInt32 algo) x 20#endif 21 22 23class CAesCoder: 24 public ICompressFilter, 25 public ICryptoProperties, 26 #ifndef Z7_EXTRACT_ONLY 27 public ICompressSetCoderProperties, 28 #endif 29 public CMyUnknownImp 30{ 31 Z7_COM_QI_BEGIN2(ICompressFilter) 32 Z7_COM_QI_ENTRY(ICryptoProperties) 33 #ifndef Z7_EXTRACT_ONLY 34 Z7_COM_QI_ENTRY(ICompressSetCoderProperties) 35 #endif 36 Z7_COM_QI_END 37 Z7_COM_ADDREF_RELEASE 38 39public: 40 Z7_IFACE_COM7_IMP_NONFINAL(ICompressFilter) 41 Z7_IFACE_COM7_IMP(ICryptoProperties) 42private: 43 #ifndef Z7_EXTRACT_ONLY 44 Z7_IFACE_COM7_IMP(ICompressSetCoderProperties) 45 #endif 46 47protected: 48 bool _keyIsSet; 49 // bool _encodeMode; 50 // bool _ctrMode; 51 // unsigned _offset; 52 unsigned _keySize; 53 unsigned _ctrPos; // we need _ctrPos here for Init() / SetInitVector() 54 AES_CODE_FUNC _codeFunc; 55 AES_SET_KEY_FUNC _setKeyFunc; 56private: 57 // UInt32 _aes[AES_NUM_IVMRK_WORDS + 3]; 58 CAlignedBuffer1 _aes; 59 60 Byte _iv[AES_BLOCK_SIZE]; 61 62 // UInt32 *Aes() { return _aes + _offset; } 63protected: 64 UInt32 *Aes() { return (UInt32 *)(void *)(Byte *)_aes; } 65 66 Z7_IFACE_PURE(IAesCoderSetFunctions) 67 68public: 69 CAesCoder( 70 // bool encodeMode, 71 unsigned keySize 72 // , bool ctrMode 73 ); 74 virtual ~CAesCoder() {} // we need virtual destructor for derived classes 75 void SetKeySize(unsigned size) { _keySize = size; } 76}; 77 78 79#ifndef Z7_EXTRACT_ONLY 80struct CAesCbcEncoder: public CAesCoder 81{ 82 CAesCbcEncoder(unsigned keySize = 0): CAesCoder(keySize) 83 { 84 _setKeyFunc = Aes_SetKey_Enc; 85 _codeFunc = g_AesCbc_Encode; 86 } 87 Z7_IFACE_IMP(IAesCoderSetFunctions) 88}; 89#endif 90 91struct CAesCbcDecoder: public CAesCoder 92{ 93 CAesCbcDecoder(unsigned keySize = 0): CAesCoder(keySize) 94 { 95 _setKeyFunc = Aes_SetKey_Dec; 96 _codeFunc = g_AesCbc_Decode; 97 } 98 Z7_IFACE_IMP(IAesCoderSetFunctions) 99}; 100 101#ifndef Z7_SFX 102struct CAesCtrCoder: public CAesCoder 103{ 104private: 105 // unsigned _ctrPos; 106 // Z7_IFACE_COM7_IMP(ICompressFilter) 107 // Z7_COM7F_IMP(Init()) 108 Z7_COM7F_IMP2(UInt32, Filter(Byte *data, UInt32 size)) 109public: 110 CAesCtrCoder(unsigned keySize = 0): CAesCoder(keySize) 111 { 112 _ctrPos = 0; 113 _setKeyFunc = Aes_SetKey_Enc; 114 _codeFunc = g_AesCtr_Code; 115 } 116 Z7_IFACE_IMP(IAesCoderSetFunctions) 117}; 118#endif 119 120} 121 122#endif 123