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