mame/3rdparty/lzma/CPP/7zip/Crypto/MyAes.h

80 lines
1.7 KiB
C++

// Crypto/MyAes.h
#ifndef __CRYPTO_MY_AES_H
#define __CRYPTO_MY_AES_H
#include "../../../C/Aes.h"
#include "../../Common/MyBuffer2.h"
#include "../../Common/MyCom.h"
#include "../ICoder.h"
namespace NCrypto {
class CAesCoder:
public ICompressFilter,
public ICryptoProperties,
#ifndef _SFX
public ICompressSetCoderProperties,
#endif
public CMyUnknownImp
{
AES_CODE_FUNC _codeFunc;
// unsigned _offset;
unsigned _keySize;
bool _keyIsSet;
bool _encodeMode;
bool _ctrMode;
// UInt32 _aes[AES_NUM_IVMRK_WORDS + 3];
CAlignedBuffer _aes;
Byte _iv[AES_BLOCK_SIZE];
// UInt32 *Aes() { return _aes + _offset; }
UInt32 *Aes() { return (UInt32 *)(void *)(Byte *)_aes; }
bool SetFunctions(UInt32 algo);
public:
CAesCoder(bool encodeMode, unsigned keySize, bool ctrMode);
virtual ~CAesCoder() {}; // we need virtual destructor for derived classes
MY_QUERYINTERFACE_BEGIN2(ICompressFilter)
MY_QUERYINTERFACE_ENTRY(ICryptoProperties)
#ifndef _SFX
MY_QUERYINTERFACE_ENTRY(ICompressSetCoderProperties)
#endif
MY_QUERYINTERFACE_END
MY_ADDREF_RELEASE
INTERFACE_ICompressFilter(;)
void SetKeySize(unsigned size) { _keySize = size; }
STDMETHOD(SetKey)(const Byte *data, UInt32 size);
STDMETHOD(SetInitVector)(const Byte *data, UInt32 size);
#ifndef _SFX
STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
#endif
};
#ifndef _SFX
struct CAesCbcEncoder: public CAesCoder
{
CAesCbcEncoder(unsigned keySize = 0): CAesCoder(true, keySize, false) {}
};
#endif
struct CAesCbcDecoder: public CAesCoder
{
CAesCbcDecoder(unsigned keySize = 0): CAesCoder(false, keySize, false) {}
};
}
#endif