diff src/win32/7zip/7z/CPP/7zip/Crypto/MyAes.cpp @ 1:f9f4f1b99eed

importing src directory
author Robert McIntyre <rlm@mit.edu>
date Sat, 03 Mar 2012 10:31:27 -0600
parents
children
line wrap: on
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/win32/7zip/7z/CPP/7zip/Crypto/MyAes.cpp	Sat Mar 03 10:31:27 2012 -0600
     1.3 @@ -0,0 +1,57 @@
     1.4 +// Crypto/MyAes.cpp
     1.5 +
     1.6 +#include "StdAfx.h"
     1.7 +
     1.8 +#include "MyAes.h"
     1.9 +
    1.10 +namespace NCrypto {
    1.11 +
    1.12 +struct CAesTabInit { CAesTabInit() { AesGenTables();} } g_AesTabInit;
    1.13 +
    1.14 +STDMETHODIMP CAesCbcEncoder::Init() { return S_OK; }
    1.15 +
    1.16 +STDMETHODIMP_(UInt32) CAesCbcEncoder::Filter(Byte *data, UInt32 size)
    1.17 +{
    1.18 +  return (UInt32)AesCbc_Encode(&Aes, data, size);
    1.19 +}
    1.20 +
    1.21 +STDMETHODIMP CAesCbcEncoder::SetKey(const Byte *data, UInt32 size)
    1.22 +{
    1.23 +  if ((size & 0x7) != 0 || size < 16 || size > 32)
    1.24 +    return E_INVALIDARG;
    1.25 +  Aes_SetKeyEncode(&Aes.aes, data, size);
    1.26 +  return S_OK;
    1.27 +}
    1.28 +
    1.29 +STDMETHODIMP CAesCbcEncoder::SetInitVector(const Byte *data, UInt32 size)
    1.30 +{
    1.31 +  if (size != AES_BLOCK_SIZE)
    1.32 +    return E_INVALIDARG;
    1.33 +  AesCbc_Init(&Aes, data);
    1.34 +  return S_OK;
    1.35 +}
    1.36 +
    1.37 +STDMETHODIMP CAesCbcDecoder::Init() { return S_OK; }
    1.38 +
    1.39 +STDMETHODIMP_(UInt32) CAesCbcDecoder::Filter(Byte *data, UInt32 size)
    1.40 +{
    1.41 +  return (UInt32)AesCbc_Decode(&Aes, data, size);
    1.42 +}
    1.43 +
    1.44 +STDMETHODIMP CAesCbcDecoder::SetKey(const Byte *data, UInt32 size)
    1.45 +{
    1.46 +  if ((size & 0x7) != 0 || size < 16 || size > 32)
    1.47 +    return E_INVALIDARG;
    1.48 +  Aes_SetKeyDecode(&Aes.aes, data, size);
    1.49 +  return S_OK;
    1.50 +}
    1.51 +
    1.52 +STDMETHODIMP CAesCbcDecoder::SetInitVector(const Byte *data, UInt32 size)
    1.53 +{
    1.54 +  if (size != AES_BLOCK_SIZE)
    1.55 +    return E_INVALIDARG;
    1.56 +  AesCbc_Init(&Aes, data);
    1.57 +  return S_OK;
    1.58 +}
    1.59 +
    1.60 +}