summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/lzma/CPP/Common/Sha256Reg.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/lzma/CPP/Common/Sha256Reg.cpp')
-rw-r--r--3rdparty/lzma/CPP/Common/Sha256Reg.cpp59
1 files changed, 43 insertions, 16 deletions
diff --git a/3rdparty/lzma/CPP/Common/Sha256Reg.cpp b/3rdparty/lzma/CPP/Common/Sha256Reg.cpp
index 66941699e61..b5689c42d49 100644
--- a/3rdparty/lzma/CPP/Common/Sha256Reg.cpp
+++ b/3rdparty/lzma/CPP/Common/Sha256Reg.cpp
@@ -4,37 +4,64 @@
#include "../../C/Sha256.h"
+#include "../Common/MyBuffer2.h"
#include "../Common/MyCom.h"
#include "../7zip/Common/RegisterCodec.h"
-class CSha256Hasher:
- public IHasher,
- public CMyUnknownImp
-{
- CSha256 _sha;
- Byte mtDummy[1 << 7];
-
+Z7_CLASS_IMP_COM_2(
+ CSha256Hasher
+ , IHasher
+ , ICompressSetCoderProperties
+)
+ CAlignedBuffer1 _buf;
public:
- CSha256Hasher() { Sha256_Init(&_sha); }
+ Byte _mtDummy[1 << 7];
- MY_UNKNOWN_IMP1(IHasher)
- INTERFACE_IHasher(;)
+ CSha256 *Sha() { return (CSha256 *)(void *)(Byte *)_buf; }
+public:
+ CSha256Hasher():
+ _buf(sizeof(CSha256))
+ {
+ Sha256_SetFunction(Sha(), 0);
+ Sha256_InitState(Sha());
+ }
};
-STDMETHODIMP_(void) CSha256Hasher::Init() throw()
+Z7_COM7F_IMF2(void, CSha256Hasher::Init())
{
- Sha256_Init(&_sha);
+ Sha256_InitState(Sha());
}
-STDMETHODIMP_(void) CSha256Hasher::Update(const void *data, UInt32 size) throw()
+Z7_COM7F_IMF2(void, CSha256Hasher::Update(const void *data, UInt32 size))
{
- Sha256_Update(&_sha, (const Byte *)data, size);
+ Sha256_Update(Sha(), (const Byte *)data, size);
}
-STDMETHODIMP_(void) CSha256Hasher::Final(Byte *digest) throw()
+Z7_COM7F_IMF2(void, CSha256Hasher::Final(Byte *digest))
+{
+ Sha256_Final(Sha(), digest);
+}
+
+
+Z7_COM7F_IMF(CSha256Hasher::SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *coderProps, UInt32 numProps))
{
- Sha256_Final(&_sha, digest);
+ unsigned algo = 0;
+ for (UInt32 i = 0; i < numProps; i++)
+ {
+ if (propIDs[i] == NCoderPropID::kDefaultProp)
+ {
+ const PROPVARIANT &prop = coderProps[i];
+ if (prop.vt != VT_UI4)
+ return E_INVALIDARG;
+ if (prop.ulVal > 2)
+ return E_NOTIMPL;
+ algo = (unsigned)prop.ulVal;
+ }
+ }
+ if (!Sha256_SetFunction(Sha(), algo))
+ return E_NOTIMPL;
+ return S_OK;
}
REGISTER_HASHER(CSha256Hasher, 0xA, "SHA256", SHA256_DIGEST_SIZE)