Source code

Revision control

Copy as Markdown

Other Tools

// 7zAes.h↩
#ifndef __CRYPTO_7Z_AES_H↩
#define __CRYPTO_7Z_AES_H↩
#include "../../Common/MyBuffer.h"
#include "../../Common/MyCom.h"
#include "../../Common/MyVector.h"
#include "../ICoder.h"
#include "../IPassword.h"
namespace NCrypto {↩
namespace N7z {↩
const unsigned kKeySize = 32;↩
const unsigned kSaltSizeMax = 16;↩
const unsigned kIvSizeMax = 16; // AES_BLOCK_SIZE;↩
class CKeyInfo↩
{↩
public:↩
unsigned NumCyclesPower;↩
unsigned SaltSize;↩
Byte Salt[kSaltSizeMax];↩
CByteBuffer Password;↩
Byte Key[kKeySize];↩
bool IsEqualTo(const CKeyInfo &a) const;↩
void CalcKey();↩
CKeyInfo() { ClearProps(); }↩
void ClearProps()↩
{↩
NumCyclesPower = 0;↩
SaltSize = 0;↩
for (unsigned i = 0; i < sizeof(Salt); i++)↩
Salt[i] = 0;↩
}↩
};↩
class CKeyInfoCache↩
{↩
unsigned Size;↩
CObjectVector<CKeyInfo> Keys;↩
public:↩
CKeyInfoCache(unsigned size): Size(size) {}↩
bool GetKey(CKeyInfo &key);↩
void Add(const CKeyInfo &key);↩
void FindAndAdd(const CKeyInfo &key);↩
};↩
class CBase↩
{↩
CKeyInfoCache _cachedKeys;↩
protected:↩
CKeyInfo _key;↩
Byte _iv[kIvSizeMax];↩
unsigned _ivSize;↩
void PrepareKey();↩
CBase();↩
};↩
class CBaseCoder:↩
public ICompressFilter,↩
public ICryptoSetPassword,↩
public CMyUnknownImp,↩
public CBase↩
{↩
protected:↩
CMyComPtr<ICompressFilter> _aesFilter;↩
public:↩
INTERFACE_ICompressFilter(;)↩
STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size);↩
};↩
#ifndef EXTRACT_ONLY↩
class CEncoder:↩
public CBaseCoder,↩
public ICompressWriteCoderProperties,↩
// public ICryptoResetSalt,↩
public ICryptoResetInitVector↩
{↩
public:↩
MY_UNKNOWN_IMP4(↩
ICompressFilter,↩
ICryptoSetPassword,↩
ICompressWriteCoderProperties,↩
// ICryptoResetSalt,↩
ICryptoResetInitVector)↩
STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);↩
// STDMETHOD(ResetSalt)();↩
STDMETHOD(ResetInitVector)();↩
CEncoder();↩
};↩
#endif
class CDecoder:↩
public CBaseCoder,↩
public ICompressSetDecoderProperties2↩
{↩
public:↩
MY_UNKNOWN_IMP3(↩
ICompressFilter,↩
ICryptoSetPassword,↩
ICompressSetDecoderProperties2)↩
STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);↩
CDecoder();↩
};↩
}}↩
#endif