mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-14 12:11:39 -06:00
4.44 beta
This commit is contained in:
committed by
Kornel Lesiński
parent
804edc5756
commit
d9666cf046
94
CPP/7zip/Crypto/AES/MyAES.cpp
Executable file
94
CPP/7zip/Crypto/AES/MyAES.cpp
Executable file
@@ -0,0 +1,94 @@
|
||||
// Crypto/AES/MyAES.cpp
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "windows.h"
|
||||
|
||||
#include "MyAES.h"
|
||||
#include "Windows/Defs.h"
|
||||
|
||||
#include "AES_CBC.h"
|
||||
|
||||
static const int kAESBlockSize = 16;
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include "aesopt.h"
|
||||
}
|
||||
|
||||
class CTabInit
|
||||
{
|
||||
public:
|
||||
CTabInit() { gen_tabs();}
|
||||
} g_TabInit;
|
||||
|
||||
STDMETHODIMP CAESFilter::Init() { return S_OK; }
|
||||
|
||||
STDMETHODIMP_(UInt32) CAESFilter::Filter(Byte *data, UInt32 size)
|
||||
{
|
||||
if (size > 0 && size < kAESBlockSize)
|
||||
return kAESBlockSize;
|
||||
UInt32 i;
|
||||
for (i = 0; i + kAESBlockSize <= size; i += kAESBlockSize)
|
||||
{
|
||||
Byte outBlock[kAESBlockSize];
|
||||
SubFilter(data + i, outBlock);
|
||||
for (int j = 0; j < kAESBlockSize; j++)
|
||||
data[i + j] = outBlock[j];
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
STDMETHODIMP CAESFilter::SetInitVector(const Byte *data, UInt32 size)
|
||||
{
|
||||
if (size != 16)
|
||||
return E_INVALIDARG;
|
||||
AES.Init(data);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CAESEncoder::SetKey(const Byte *data, UInt32 size)
|
||||
{ return (AES.enc_key(data, size) == aes_good) ? S_OK: E_FAIL; }
|
||||
|
||||
void CAESEncoder::SubFilter(const Byte *inBlock, Byte *outBlock)
|
||||
{ AES.Encode(inBlock, outBlock); }
|
||||
|
||||
STDMETHODIMP CAESDecoder::SetKey(const Byte *data, UInt32 size)
|
||||
{ return (AES.dec_key(data, size) == aes_good) ? S_OK: E_FAIL; }
|
||||
|
||||
void CAESDecoder::SubFilter(const Byte *inBlock, Byte *outBlock)
|
||||
{ AES.Decode(inBlock, outBlock); }
|
||||
|
||||
////////////////////////////
|
||||
// ECB mode
|
||||
|
||||
STDMETHODIMP CAesEcbFilter::Init() { return S_OK; }
|
||||
STDMETHODIMP CAesEcbFilter::SetInitVector(const Byte * /* data */, UInt32 size)
|
||||
{ return (size == 0) ? S_OK: E_INVALIDARG; }
|
||||
|
||||
STDMETHODIMP_(UInt32) CAesEcbFilter::Filter(Byte *data, UInt32 size)
|
||||
{
|
||||
if (size > 0 && size < kAESBlockSize)
|
||||
return kAESBlockSize;
|
||||
UInt32 i;
|
||||
for (i = 0; i + kAESBlockSize <= size; i += kAESBlockSize)
|
||||
{
|
||||
Byte outBlock[kAESBlockSize];
|
||||
SubFilter(data + i, outBlock);
|
||||
for (int j = 0; j < kAESBlockSize; j++)
|
||||
data[i + j] = outBlock[j];
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
STDMETHODIMP CAesEcbEncoder::SetKey(const Byte *data, UInt32 size)
|
||||
{ return (AES.enc_key(data, size) == aes_good) ? S_OK: E_FAIL; }
|
||||
|
||||
void CAesEcbEncoder::SubFilter(const Byte *inBlock, Byte *outBlock)
|
||||
{ AES.enc_blk(inBlock, outBlock); }
|
||||
|
||||
STDMETHODIMP CAesEcbDecoder::SetKey(const Byte *data, UInt32 size)
|
||||
{ return (AES.dec_key(data, size) == aes_good) ? S_OK: E_FAIL; }
|
||||
|
||||
void CAesEcbDecoder::SubFilter(const Byte *inBlock, Byte *outBlock)
|
||||
{ AES.dec_blk(inBlock, outBlock); }
|
||||
Reference in New Issue
Block a user