annotate src/win32/7zip/7z/CPP/7zip/Crypto/7zAes.h @ 1:f9f4f1b99eed

importing src directory
author Robert McIntyre <rlm@mit.edu>
date Sat, 03 Mar 2012 10:31:27 -0600
parents
children
rev   line source
rlm@1 1 // 7zAes.h
rlm@1 2
rlm@1 3 #ifndef __CRYPTO_7Z_AES_H
rlm@1 4 #define __CRYPTO_7Z_AES_H
rlm@1 5
rlm@1 6 #include "Common/Buffer.h"
rlm@1 7 #include "Common/MyCom.h"
rlm@1 8 #include "Common/MyVector.h"
rlm@1 9
rlm@1 10 #include "../ICoder.h"
rlm@1 11 #include "../IPassword.h"
rlm@1 12
rlm@1 13 namespace NCrypto {
rlm@1 14 namespace NSevenZ {
rlm@1 15
rlm@1 16 const int kKeySize = 32;
rlm@1 17
rlm@1 18 class CKeyInfo
rlm@1 19 {
rlm@1 20 public:
rlm@1 21 int NumCyclesPower;
rlm@1 22 UInt32 SaltSize;
rlm@1 23 Byte Salt[16];
rlm@1 24 CByteBuffer Password;
rlm@1 25 Byte Key[kKeySize];
rlm@1 26
rlm@1 27 bool IsEqualTo(const CKeyInfo &a) const;
rlm@1 28 void CalculateDigest();
rlm@1 29
rlm@1 30 CKeyInfo() { Init(); }
rlm@1 31 void Init()
rlm@1 32 {
rlm@1 33 NumCyclesPower = 0;
rlm@1 34 SaltSize = 0;
rlm@1 35 for (int i = 0; i < sizeof(Salt); i++)
rlm@1 36 Salt[i] = 0;
rlm@1 37 }
rlm@1 38 };
rlm@1 39
rlm@1 40 class CKeyInfoCache
rlm@1 41 {
rlm@1 42 int Size;
rlm@1 43 CObjectVector<CKeyInfo> Keys;
rlm@1 44 public:
rlm@1 45 CKeyInfoCache(int size): Size(size) {}
rlm@1 46 bool Find(CKeyInfo &key);
rlm@1 47 // HRESULT Calculate(CKeyInfo &key);
rlm@1 48 void Add(CKeyInfo &key);
rlm@1 49 };
rlm@1 50
rlm@1 51 class CBase
rlm@1 52 {
rlm@1 53 CKeyInfoCache _cachedKeys;
rlm@1 54 protected:
rlm@1 55 CKeyInfo _key;
rlm@1 56 Byte _iv[16];
rlm@1 57 UInt32 _ivSize;
rlm@1 58 void CalculateDigest();
rlm@1 59 CBase();
rlm@1 60 };
rlm@1 61
rlm@1 62 class CBaseCoder:
rlm@1 63 public ICompressFilter,
rlm@1 64 public ICryptoSetPassword,
rlm@1 65 public CMyUnknownImp,
rlm@1 66 public CBase
rlm@1 67 {
rlm@1 68 protected:
rlm@1 69 CMyComPtr<ICompressFilter> _aesFilter;
rlm@1 70
rlm@1 71 virtual HRESULT CreateFilter() = 0;
rlm@1 72 #ifndef CRYPTO_AES
rlm@1 73 HRESULT CreateFilterFromDLL(REFCLSID clsID);
rlm@1 74 #endif
rlm@1 75 public:
rlm@1 76 STDMETHOD(Init)();
rlm@1 77 STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size);
rlm@1 78
rlm@1 79 STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size);
rlm@1 80 };
rlm@1 81
rlm@1 82 #ifndef EXTRACT_ONLY
rlm@1 83
rlm@1 84 class CEncoder:
rlm@1 85 public CBaseCoder,
rlm@1 86 public ICompressWriteCoderProperties,
rlm@1 87 // public ICryptoResetSalt,
rlm@1 88 public ICryptoResetInitVector
rlm@1 89 {
rlm@1 90 virtual HRESULT CreateFilter();
rlm@1 91 public:
rlm@1 92 MY_UNKNOWN_IMP3(
rlm@1 93 ICryptoSetPassword,
rlm@1 94 ICompressWriteCoderProperties,
rlm@1 95 // ICryptoResetSalt,
rlm@1 96 ICryptoResetInitVector)
rlm@1 97 STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
rlm@1 98 // STDMETHOD(ResetSalt)();
rlm@1 99 STDMETHOD(ResetInitVector)();
rlm@1 100 };
rlm@1 101 #endif
rlm@1 102
rlm@1 103 class CDecoder:
rlm@1 104 public CBaseCoder,
rlm@1 105 public ICompressSetDecoderProperties2
rlm@1 106 {
rlm@1 107 virtual HRESULT CreateFilter();
rlm@1 108 public:
rlm@1 109 MY_UNKNOWN_IMP2(
rlm@1 110 ICryptoSetPassword,
rlm@1 111 ICompressSetDecoderProperties2)
rlm@1 112 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
rlm@1 113 };
rlm@1 114
rlm@1 115 }}
rlm@1 116
rlm@1 117 #endif