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 13 namespace 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 23 class 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 39 public: 40 Z7_IFACE_COM7_IMP_NONFINAL(ICompressFilter) 41 Z7_IFACE_COM7_IMP(ICryptoProperties) 42 private: 43 #ifndef Z7_EXTRACT_ONLY 44 Z7_IFACE_COM7_IMP(ICompressSetCoderProperties) 45 #endif 46 47 protected: 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; 56 private: 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; } 63 protected: Aes()64 UInt32 *Aes() { return (UInt32 *)(void *)(Byte *)_aes; } 65 66 Z7_IFACE_PURE(IAesCoderSetFunctions) 67 68 public: 69 CAesCoder( 70 // bool encodeMode, 71 unsigned keySize 72 // , bool ctrMode 73 ); ~CAesCoder()74 virtual ~CAesCoder() {} // we need virtual destructor for derived classes SetKeySize(unsigned size)75 void SetKeySize(unsigned size) { _keySize = size; } 76 }; 77 78 79 #ifndef Z7_EXTRACT_ONLY 80 struct CAesCbcEncoder: public CAesCoder 81 { CAesCoderCAesCbcEncoder82 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 91 struct CAesCbcDecoder: public CAesCoder 92 { CAesCoderCAesCbcDecoder93 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 102 struct CAesCtrCoder: public CAesCoder 103 { 104 private: 105 // unsigned _ctrPos; 106 // Z7_IFACE_COM7_IMP(ICompressFilter) 107 // Z7_COM7F_IMP(Init()) Z7_COM7F_IMP2CAesCtrCoder108 Z7_COM7F_IMP2(UInt32, Filter(Byte *data, UInt32 size)) 109 public: 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