xref: /third_party/lzma/CPP/7zip/Crypto/MyAes.h (revision 370b324c)
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