[+] HashStream SOO
[+] HashSteam extension padding for future use
This commit is contained in:
parent
a41a27198e
commit
9bd05a0752
@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
namespace Aurora::Hashing
|
namespace Aurora::Hashing
|
||||||
{
|
{
|
||||||
|
static const auto kSizeHashStream = 512ul;
|
||||||
|
|
||||||
struct IHashStream
|
struct IHashStream
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -58,5 +60,7 @@ namespace Aurora::Hashing
|
|||||||
virtual void Reset() = 0;
|
virtual void Reset() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
AUKN_SHARED_API(HashStream, IHashStream, EHashType type);
|
AUKN_SHARED_SOO2(HashStream, IHashStream, kSizeHashStream,
|
||||||
|
((EHashType,type)),
|
||||||
|
EHashType type);
|
||||||
}
|
}
|
@ -13,12 +13,17 @@ namespace Aurora::Hashing
|
|||||||
{
|
{
|
||||||
#define DIGEST_CHECK(n) SysAssert(n == CRYPT_OK)
|
#define DIGEST_CHECK(n) SysAssert(n == CRYPT_OK)
|
||||||
|
|
||||||
HashStream::HashStream(EHashType type) : type_(type)
|
HashStreamImpl::HashStreamImpl(EHashType type) : type_(type)
|
||||||
{
|
{
|
||||||
|
if (!EHashTypeIsValid(type))
|
||||||
|
{
|
||||||
|
AU_THROW_CONST_STRING("Invalid Hash Type");
|
||||||
|
}
|
||||||
|
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HashStream::Ingest(const Memory::MemoryViewRead &input)
|
void HashStreamImpl::Ingest(const Memory::MemoryViewRead &input)
|
||||||
{
|
{
|
||||||
if (this->bFinished_)
|
if (this->bFinished_)
|
||||||
{
|
{
|
||||||
@ -72,7 +77,7 @@ namespace Aurora::Hashing
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AuUInt8 const* HashStream::GetBytes(AuUInt32 &length)
|
AuUInt8 const* HashStreamImpl::GetBytes(AuUInt32 &length)
|
||||||
{
|
{
|
||||||
switch (this->type_)
|
switch (this->type_)
|
||||||
{
|
{
|
||||||
@ -201,14 +206,14 @@ namespace Aurora::Hashing
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
AuMemoryViewRead HashStream::Finalize()
|
AuMemoryViewRead HashStreamImpl::Finalize()
|
||||||
{
|
{
|
||||||
AuUInt32 length;
|
AuUInt32 length;
|
||||||
auto begin = GetBytes(length);
|
auto begin = GetBytes(length);
|
||||||
return AuMemoryViewRead(begin, length);
|
return AuMemoryViewRead(begin, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
Memory::MemoryViewRead HashStream::PeekFinalize()
|
Memory::MemoryViewRead HashStreamImpl::PeekFinalize()
|
||||||
{
|
{
|
||||||
if (this->bFinished_)
|
if (this->bFinished_)
|
||||||
{
|
{
|
||||||
@ -224,7 +229,7 @@ namespace Aurora::Hashing
|
|||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
AuResult<AuMemoryViewRead> HashStream::Export()
|
AuResult<AuMemoryViewRead> HashStreamImpl::Export()
|
||||||
{
|
{
|
||||||
// Defer to HASH_PROCESS defined in the private libtomcrypt header
|
// Defer to HASH_PROCESS defined in the private libtomcrypt header
|
||||||
|
|
||||||
@ -289,7 +294,7 @@ namespace Aurora::Hashing
|
|||||||
#undef ADD_EXPORT
|
#undef ADD_EXPORT
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HashStream::Import(const Memory::MemoryViewRead &view)
|
bool HashStreamImpl::Import(const Memory::MemoryViewRead &view)
|
||||||
{
|
{
|
||||||
this->bFinished_ = false;
|
this->bFinished_ = false;
|
||||||
|
|
||||||
@ -363,12 +368,12 @@ namespace Aurora::Hashing
|
|||||||
#undef ADD_IMPORT
|
#undef ADD_IMPORT
|
||||||
}
|
}
|
||||||
|
|
||||||
void HashStream::Reset()
|
void HashStreamImpl::Reset()
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HashStream::Init()
|
void HashStreamImpl::Init()
|
||||||
{
|
{
|
||||||
this->bFinished_ = false;
|
this->bFinished_ = false;
|
||||||
AuMemset(&this->state_, 0, sizeof(this->state_));
|
AuMemset(&this->state_, 0, sizeof(this->state_));
|
||||||
@ -425,11 +430,18 @@ namespace Aurora::Hashing
|
|||||||
|
|
||||||
AUKN_SYM IHashStream *HashStreamNew(EHashType type)
|
AUKN_SYM IHashStream *HashStreamNew(EHashType type)
|
||||||
{
|
{
|
||||||
return _new HashStream(type);
|
if (!EHashTypeIsValid(type))
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
return _new HashStreamImpl(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM void HashStreamRelease(IHashStream *stream)
|
AUKN_SYM void HashStreamRelease(IHashStream *pStream)
|
||||||
{
|
{
|
||||||
AuSafeDelete<HashStream*>(stream);
|
AuSafeDelete<HashStreamImpl *>(pStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AUROXTL_INTERFACE_SOO_SRC(HashStream, HashStreamImpl, (EHashType, type))
|
||||||
}
|
}
|
@ -9,9 +9,11 @@
|
|||||||
|
|
||||||
namespace Aurora::Hashing
|
namespace Aurora::Hashing
|
||||||
{
|
{
|
||||||
struct HashStream : IHashStream
|
#pragma pack(push)
|
||||||
|
#pragma pack(4)
|
||||||
|
struct HashStreamImpl : IHashStream
|
||||||
{
|
{
|
||||||
HashStream(EHashType type);
|
HashStreamImpl(EHashType type);
|
||||||
|
|
||||||
void Ingest(const Memory::MemoryViewRead &input) override;
|
void Ingest(const Memory::MemoryViewRead &input) override;
|
||||||
|
|
||||||
@ -28,9 +30,14 @@ namespace Aurora::Hashing
|
|||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
private:
|
private:
|
||||||
AuUInt8 buffer_[64] {};
|
|
||||||
hash_state state_ {};
|
|
||||||
EHashType type_ {};
|
EHashType type_ {};
|
||||||
bool bFinished_ {};
|
bool bFinished_ {};
|
||||||
|
AuUInt8 buffer_[64] {};
|
||||||
|
union
|
||||||
|
{
|
||||||
|
hash_state state_ {};
|
||||||
|
char altBuffer_[432];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user