Add BLAKE3 hash function

This commit is contained in:
Tino Reichardt
2021-04-06 19:35:46 +02:00
parent f090495d25
commit 576c5df947
9 changed files with 1097 additions and 1 deletions
+2
View File
@@ -1,4 +1,5 @@
COMMON_OBJS = \
$O\Blake3Reg.obj \
$O\CRC.obj \
$O\CrcReg.obj \
$O\DynLimBuf.obj \
@@ -257,6 +258,7 @@ CRYPTO_OBJS = \
$O\ZipStrong.obj \
HASHES_OBJS = \
$O\blake3.obj \
$O\md2.obj \
$O\md4.obj \
$O\md5.obj \
+2
View File
@@ -237,6 +237,7 @@ static const CHashCommand g_HashCommands[] =
{ CZipContextMenu::kHash_SHA384, "SHA-384", "SHA384" },
{ CZipContextMenu::kHash_SHA512, "SHA-512", "SHA512" },
{ CZipContextMenu::kHash_BLAKE2sp, "BLAKE2sp", "BLAKE2sp" },
{ CZipContextMenu::kHash_BLAKE3, "BLAKE3", "BLAKE3" },
{ CZipContextMenu::kHash_All, "*", "*" }
};
@@ -951,6 +952,7 @@ STDMETHODIMP CZipContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO commandInfo)
case kHash_SHA384:
case kHash_SHA512:
case kHash_BLAKE2sp:
case kHash_BLAKE3:
case kHash_All:
{
for (unsigned i = 0; i < ARRAY_SIZE(g_HashCommands); i++)
+1
View File
@@ -44,6 +44,7 @@ public:
kHash_SHA384,
kHash_SHA512,
kHash_BLAKE2sp,
kHash_BLAKE3,
kHash_All
};
+2 -1
View File
@@ -588,7 +588,8 @@ bool ExecuteFileCommand(int id)
case IDM_SHA384: g_App.CalculateCrc("SHA384"); break;
case IDM_SHA512: g_App.CalculateCrc("SHA512"); break;
case IDM_BLAKE2sp: g_App.CalculateCrc("BLAKE2sp"); break;
case IDM_BLAKE3: g_App.CalculateCrc("BLAKE3"); break;
case IDM_DIFF: g_App.DiffFiles(); break;
case IDM_SPLIT: g_App.Split(); break;
case IDM_COMBINE: g_App.Combine(); break;
+1
View File
@@ -33,6 +33,7 @@
#define IDM_SHA384 111
#define IDM_SHA512 112
#define IDM_BLAKE2sp 113
#define IDM_BLAKE3 114
#define IDM_OPEN 540
#define IDM_OPEN_INSIDE 541
+1
View File
@@ -50,6 +50,7 @@ BEGIN
MENUITEM "SHA-384", IDM_SHA384
MENUITEM "SHA-512", IDM_SHA512
MENUITEM "Blake2sp", IDM_BLAKE2sp
MENUITEM "Blake3", IDM_BLAKE3
MENUITEM "*", IDM_HASH_ALL
END
MENUITEM "Di&ff", IDM_DIFF
+43
View File
@@ -0,0 +1,43 @@
// Blake3Reg.cpp /TR 2021-04-06
#include "StdAfx.h"
#include "../../C/CpuArch.h"
EXTERN_C_BEGIN
#include "../../C/hashes/blake3.h"
EXTERN_C_END
#include "../Common/MyCom.h"
#include "../7zip/Common/RegisterCodec.h"
// BLAKE3
class CBLAKE3Hasher:
public IHasher,
public CMyUnknownImp
{
blake3_hasher _ctx;
Byte mtDummy[1 << 7];
public:
CBLAKE3Hasher() { blake3_hasher_init(&_ctx); }
MY_UNKNOWN_IMP1(IHasher)
INTERFACE_IHasher(;)
};
STDMETHODIMP_(void) CBLAKE3Hasher::Init() throw()
{
blake3_hasher_init(&_ctx);
}
STDMETHODIMP_(void) CBLAKE3Hasher::Update(const void *data, UInt32 size) throw()
{
blake3_hasher_update(&_ctx, data, size);
}
STDMETHODIMP_(void) CBLAKE3Hasher::Final(Byte *digest) throw()
{
blake3_hasher_finalize(&_ctx, digest, BLAKE3_OUT_LEN);
}
REGISTER_HASHER(CBLAKE3Hasher, 0x20a, "BLAKE3", BLAKE3_OUT_LEN)