mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-11 12:07:12 -06:00
Add SHA3 hashing
- added these variants: SHA3-256, SHA3-384, SHA3-512 - reordered also the hashing id's - added some notes about them in DOC/Hashes.txt Signed-off-by: Tino Reichardt <milky-7zip@mcmilk.de>
This commit is contained in:
@@ -17,6 +17,9 @@ COMMON_OBJS = \
|
||||
$O\Sha256Reg.obj \
|
||||
$O\Sha384Reg.obj \
|
||||
$O\Sha512Reg.obj \
|
||||
$O\Sha3-256Reg.obj \
|
||||
$O\Sha3-384Reg.obj \
|
||||
$O\Sha3-512Reg.obj \
|
||||
$O\StringConvert.obj \
|
||||
$O\StringToInt.obj \
|
||||
$O\UTFConvert.obj \
|
||||
@@ -269,6 +272,7 @@ HASHES_OBJS = \
|
||||
$O\md2.obj \
|
||||
$O\md4.obj \
|
||||
$O\md5.obj \
|
||||
$O\sha3.obj \
|
||||
$O\sha512.obj \
|
||||
|
||||
C_OBJS = \
|
||||
|
||||
@@ -807,18 +807,10 @@ static const char *SkipWhite(const char *s)
|
||||
|
||||
static const char * const k_CsumMethodNames[] =
|
||||
{
|
||||
"sha256"
|
||||
, "sha224"
|
||||
// , "sha512/224"
|
||||
// , "sha512/256"
|
||||
, "sha512"
|
||||
, "sha384"
|
||||
, "sha1"
|
||||
, "md5"
|
||||
, "blake2b"
|
||||
, "crc64"
|
||||
, "crc32"
|
||||
, "cksum"
|
||||
"sha3-512", "sha3-384", "sha3-256",
|
||||
"sha512", "sha384", "sha256", "sha224",
|
||||
"sha1", "md5", "blake2b",
|
||||
"crc32", "crc64" , "cksum"
|
||||
};
|
||||
|
||||
static UString GetMethod_from_FileName(const UString &name)
|
||||
@@ -1421,7 +1413,8 @@ static bool CheckDigests(const Byte *a, const Byte *b, size_t size)
|
||||
static void AddDefaultMethod(UStringVector &methods, unsigned size)
|
||||
{
|
||||
const char *m = NULL;
|
||||
if (size == 32) m = "sha256";
|
||||
if (size == 64) m = "sha512";
|
||||
else if (size == 32) m = "sha256";
|
||||
else if (size == 20) m = "sha1";
|
||||
else if (size == 16) m = "md5";
|
||||
else if (size == 8) m = "crc64";
|
||||
@@ -2098,11 +2091,11 @@ void Codecs_AddHashArcHandler(CCodecs *codecs)
|
||||
|
||||
// ubuntu uses "SHA256SUMS" file
|
||||
item.AddExts(UString (
|
||||
"sha256 sha512 sha224 sha384 sha1 sha md5"
|
||||
// "b2sum"
|
||||
" crc32 crc64"
|
||||
" asc"
|
||||
" cksum"
|
||||
"sha3-512 sha3-384 sha3-256 "
|
||||
"sha512 sha384 sha256 sha224 "
|
||||
"sha1 sha md5 "
|
||||
"crc32 crc64 "
|
||||
"asc cksum"
|
||||
),
|
||||
UString());
|
||||
|
||||
|
||||
@@ -242,13 +242,16 @@ static const CHashCommand g_HashCommands[] =
|
||||
{ CZipContextMenu::kHash_MD4, "MD4", "MD4" },
|
||||
{ CZipContextMenu::kHash_MD5, "MD5", "MD5" },
|
||||
{ CZipContextMenu::kHash_SHA1, "SHA-1", "SHA1" },
|
||||
{ CZipContextMenu::kHash_SHA256, "SHA-256", "SHA256" },
|
||||
{ CZipContextMenu::kHash_SHA384, "SHA-384", "SHA384" },
|
||||
{ CZipContextMenu::kHash_SHA512, "SHA-512", "SHA512" },
|
||||
{ CZipContextMenu::kHash_SHA256, "SHA2-256", "SHA256" },
|
||||
{ CZipContextMenu::kHash_SHA384, "SHA2-384", "SHA384" },
|
||||
{ CZipContextMenu::kHash_SHA512, "SHA2-512", "SHA512" },
|
||||
{ CZipContextMenu::kHash_BLAKE2sp, "BLAKE2sp", "BLAKE2sp" },
|
||||
{ CZipContextMenu::kHash_BLAKE3, "BLAKE3", "BLAKE3" },
|
||||
{ CZipContextMenu::kHash_SHA256, "SHA3-256", "SHA3-256" },
|
||||
{ CZipContextMenu::kHash_SHA384, "SHA3-384", "SHA3-384" },
|
||||
{ CZipContextMenu::kHash_SHA512, "SHA3-512", "SHA3-512" },
|
||||
{ CZipContextMenu::kHash_All, "*", "*" },
|
||||
{ CZipContextMenu::kHash_Generate_SHA256, "SHA-256 -> file.sha256", "SHA256" },
|
||||
{ CZipContextMenu::kHash_Generate_SHA256, "SHA2-256 -> file.sha256", "SHA256" },
|
||||
{ CZipContextMenu::kHash_TestArc, "Checksum : Test", "Hash" }
|
||||
};
|
||||
|
||||
@@ -966,7 +969,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
|
||||
name += ".sha256";
|
||||
cmi.Folder = fs2us(folderPrefix);
|
||||
cmi.ArcName = name;
|
||||
s = "SHA-256 -> ";
|
||||
s = "SHA2-256 -> ";
|
||||
s += name;
|
||||
}
|
||||
else if (hc.CommandInternalID == kHash_TestArc)
|
||||
@@ -1231,6 +1234,9 @@ HRESULT CZipContextMenu::InvokeCommandCommon(const CCommandMapItem &cmi)
|
||||
case kHash_SHA512:
|
||||
case kHash_BLAKE2sp:
|
||||
case kHash_BLAKE3:
|
||||
case kHash_SHA3_256:
|
||||
case kHash_SHA3_384:
|
||||
case kHash_SHA3_512:
|
||||
case kHash_All:
|
||||
case kHash_Generate_SHA256:
|
||||
case kHash_TestArc:
|
||||
|
||||
@@ -59,6 +59,9 @@ public:
|
||||
kHash_SHA512,
|
||||
kHash_BLAKE2sp,
|
||||
kHash_BLAKE3,
|
||||
kHash_SHA3_256,
|
||||
kHash_SHA3_384,
|
||||
kHash_SHA3_512,
|
||||
kHash_All,
|
||||
kHash_Generate_SHA256,
|
||||
kHash_TestArc
|
||||
|
||||
@@ -40,4 +40,4 @@ STDMETHODIMP_(void) CBLAKE3Hasher::Final(Byte *digest) throw()
|
||||
{
|
||||
blake3_hasher_finalize(&_ctx, digest, BLAKE3_OUT_LEN);
|
||||
}
|
||||
REGISTER_HASHER(CBLAKE3Hasher, 0x20a, "BLAKE3", BLAKE3_OUT_LEN)
|
||||
REGISTER_HASHER(CBLAKE3Hasher, 0x204, "BLAKE3", BLAKE3_OUT_LEN)
|
||||
|
||||
@@ -57,4 +57,4 @@ STDMETHODIMP_(void) CCksumHasher::Final(Byte *digest) throw()
|
||||
SetUi32(digest, val);
|
||||
}
|
||||
|
||||
REGISTER_HASHER(CCksumHasher, 0x203, "CKSUM", 4)
|
||||
REGISTER_HASHER(CCksumHasher, 0x202, "CKSUM", 4)
|
||||
|
||||
43
CPP/Common/Sha3-256Reg.cpp
Normal file
43
CPP/Common/Sha3-256Reg.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
// Sha3-256Reg.cpp /TR 2023-06-18
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "../../C/CpuArch.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
#include "../../C/hashes/sha3.h"
|
||||
EXTERN_C_END
|
||||
|
||||
#include "../Common/MyCom.h"
|
||||
#include "../7zip/Common/RegisterCodec.h"
|
||||
|
||||
// SHA3-256
|
||||
class CSHA3_256Hasher:
|
||||
public IHasher,
|
||||
public CMyUnknownImp
|
||||
{
|
||||
SHA3_CTX _ctx;
|
||||
Byte mtDummy[1 << 7];
|
||||
|
||||
public:
|
||||
CSHA3_256Hasher() { SHA3_Init(&_ctx, 256); }
|
||||
|
||||
MY_UNKNOWN_IMP1(IHasher)
|
||||
INTERFACE_IHasher(;)
|
||||
};
|
||||
|
||||
STDMETHODIMP_(void) CSHA3_256Hasher::Init() throw()
|
||||
{
|
||||
SHA3_Init(&_ctx, 256);
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) CSHA3_256Hasher::Update(const void *data, UInt32 size) throw()
|
||||
{
|
||||
SHA3_Update(&_ctx, (const Byte *)data, size);
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) CSHA3_256Hasher::Final(Byte *digest) throw()
|
||||
{
|
||||
SHA3_Final(digest, &_ctx);
|
||||
}
|
||||
REGISTER_HASHER(CSHA3_256Hasher, 0x20a, "SHA3-256", SHA3_256_DIGEST_LENGTH)
|
||||
43
CPP/Common/Sha3-384Reg.cpp
Normal file
43
CPP/Common/Sha3-384Reg.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
// Sha3-384Reg.cpp /TR 2023-06-18
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "../../C/CpuArch.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
#include "../../C/hashes/sha3.h"
|
||||
EXTERN_C_END
|
||||
|
||||
#include "../Common/MyCom.h"
|
||||
#include "../7zip/Common/RegisterCodec.h"
|
||||
|
||||
// SHA3-384
|
||||
class CSHA3_384Hasher:
|
||||
public IHasher,
|
||||
public CMyUnknownImp
|
||||
{
|
||||
SHA3_CTX _ctx;
|
||||
Byte mtDummy[1 << 7];
|
||||
|
||||
public:
|
||||
CSHA3_384Hasher() { SHA3_Init(&_ctx, 384); }
|
||||
|
||||
MY_UNKNOWN_IMP1(IHasher)
|
||||
INTERFACE_IHasher(;)
|
||||
};
|
||||
|
||||
STDMETHODIMP_(void) CSHA3_384Hasher::Init() throw()
|
||||
{
|
||||
SHA3_Init(&_ctx, 384);
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) CSHA3_384Hasher::Update(const void *data, UInt32 size) throw()
|
||||
{
|
||||
SHA3_Update(&_ctx, (const Byte *)data, size);
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) CSHA3_384Hasher::Final(Byte *digest) throw()
|
||||
{
|
||||
SHA3_Final(digest, &_ctx);
|
||||
}
|
||||
REGISTER_HASHER(CSHA3_384Hasher, 0x20b, "SHA3-384", SHA3_384_DIGEST_LENGTH)
|
||||
43
CPP/Common/Sha3-512Reg.cpp
Normal file
43
CPP/Common/Sha3-512Reg.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
// Sha3-512Reg.cpp /TR 2023-06-18
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "../../C/CpuArch.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
#include "../../C/hashes/sha3.h"
|
||||
EXTERN_C_END
|
||||
|
||||
#include "../Common/MyCom.h"
|
||||
#include "../7zip/Common/RegisterCodec.h"
|
||||
|
||||
// SHA3-512
|
||||
class CSHA3_512Hasher:
|
||||
public IHasher,
|
||||
public CMyUnknownImp
|
||||
{
|
||||
SHA3_CTX _ctx;
|
||||
Byte mtDummy[1 << 7];
|
||||
|
||||
public:
|
||||
CSHA3_512Hasher() { SHA3_Init(&_ctx, 512); }
|
||||
|
||||
MY_UNKNOWN_IMP1(IHasher)
|
||||
INTERFACE_IHasher(;)
|
||||
};
|
||||
|
||||
STDMETHODIMP_(void) CSHA3_512Hasher::Init() throw()
|
||||
{
|
||||
SHA3_Init(&_ctx, 512);
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) CSHA3_512Hasher::Update(const void *data, UInt32 size) throw()
|
||||
{
|
||||
SHA3_Update(&_ctx, (const Byte *)data, size);
|
||||
}
|
||||
|
||||
STDMETHODIMP_(void) CSHA3_512Hasher::Final(Byte *digest) throw()
|
||||
{
|
||||
SHA3_Final(digest, &_ctx);
|
||||
}
|
||||
REGISTER_HASHER(CSHA3_512Hasher, 0x20c, "SHA3-512", SHA3_512_DIGEST_LENGTH)
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "../../C/CpuArch.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
#include "../../C/hashes/sha.h"
|
||||
#include "../../C/hashes/sha512.h"
|
||||
EXTERN_C_END
|
||||
|
||||
#include "../Common/MyCom.h"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "../../C/CpuArch.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
#include "../../C/hashes/sha.h"
|
||||
#include "../../C/hashes/sha512.h"
|
||||
EXTERN_C_END
|
||||
|
||||
#include "../Common/MyCom.h"
|
||||
|
||||
@@ -42,4 +42,4 @@ STDMETHODIMP_(void) CXXH32Hasher::Final(Byte *digest) throw()
|
||||
SetUi32(digest, val);
|
||||
}
|
||||
|
||||
REGISTER_HASHER(CXXH32Hasher, 0x203, "XXH32", 4)
|
||||
REGISTER_HASHER(CXXH32Hasher, 0x20d, "XXH32", 4)
|
||||
|
||||
@@ -41,4 +41,4 @@ STDMETHODIMP_(void) CXXH64Hasher::Final(Byte *digest) throw()
|
||||
UInt64 val = XXH64_digest(_ctx);
|
||||
SetUi64(digest, val);
|
||||
}
|
||||
REGISTER_HASHER(CXXH64Hasher, 0x204, "XXH64", 8)
|
||||
REGISTER_HASHER(CXXH64Hasher, 0x20e, "XXH64", 8)
|
||||
|
||||
Reference in New Issue
Block a user