mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 08:37:46 +00:00
LibTLS+LibCrypto: More ByteBuffer -> Span conversion
This commit is contained in:
parent
8e20208dd6
commit
f82b0a78ef
13 changed files with 45 additions and 40 deletions
|
@ -68,12 +68,10 @@ public:
|
|||
m_inner_hasher.update(message, length);
|
||||
}
|
||||
|
||||
TagType process(const ReadonlyBytes& span) { return process(span.data(), span.size()); }
|
||||
TagType process(const ByteBuffer& buffer) { return process(buffer.data(), buffer.size()); }
|
||||
TagType process(ReadonlyBytes span) { return process(span.data(), span.size()); }
|
||||
TagType process(const StringView& string) { return process((const u8*)string.characters_without_null_termination(), string.length()); }
|
||||
|
||||
void update(const ReadonlyBytes& span) { return update(span.data(), span.size()); }
|
||||
void update(const ByteBuffer& buffer) { return update(buffer.data(), buffer.size()); }
|
||||
void update(ReadonlyBytes span) { return update(span.data(), span.size()); }
|
||||
void update(const StringView& string) { return update((const u8*)string.characters_without_null_termination(), string.length()); }
|
||||
|
||||
TagType digest()
|
||||
|
@ -106,7 +104,7 @@ private:
|
|||
auto block_size = m_inner_hasher.block_size();
|
||||
u8 v_key[block_size];
|
||||
__builtin_memset(v_key, 0, block_size);
|
||||
ByteBuffer key_buffer = ByteBuffer::wrap(v_key, block_size);
|
||||
auto key_buffer = Bytes { v_key, block_size };
|
||||
// m_key_data is zero'd, so copying the data in
|
||||
// the first few bytes leaves the rest zero, which
|
||||
// is exactly what we want (zero padding)
|
||||
|
@ -129,8 +127,8 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
void derive_key(const ByteBuffer& key) { derive_key(key.data(), key.size()); }
|
||||
void derive_key(const StringView& key) { derive_key((const u8*)key.characters_without_null_termination(), key.length()); }
|
||||
void derive_key(ReadonlyBytes key) { derive_key(key.data(), key.size()); }
|
||||
void derive_key(const StringView& key) { derive_key(key.bytes()); }
|
||||
|
||||
HashType m_inner_hasher, m_outer_hasher;
|
||||
u8 m_key_data[2048];
|
||||
|
|
|
@ -45,8 +45,11 @@ public:
|
|||
static size_t digest_size() { return DigestSize; };
|
||||
|
||||
virtual void update(const u8*, size_t) = 0;
|
||||
virtual void update(const ByteBuffer& buffer) { update(buffer.data(), buffer.size()); };
|
||||
virtual void update(const StringView& string) { update((const u8*)string.characters_without_null_termination(), string.length()); };
|
||||
|
||||
void update(const Bytes& buffer) { update(buffer.data(), buffer.size()); };
|
||||
void update(const ReadonlyBytes& buffer) { update(buffer.data(), buffer.size()); };
|
||||
void update(const ByteBuffer& buffer) { update(buffer.data(), buffer.size()); };
|
||||
void update(const StringView& string) { update((const u8*)string.characters_without_null_termination(), string.length()); };
|
||||
|
||||
virtual DigestType peek() = 0;
|
||||
virtual DigestType digest() = 0;
|
||||
|
|
|
@ -117,6 +117,8 @@ struct MultiHashDigestVariant {
|
|||
|
||||
class Manager final : public HashFunction<0, MultiHashDigestVariant> {
|
||||
public:
|
||||
using HashFunction::update;
|
||||
|
||||
Manager()
|
||||
{
|
||||
m_pre_init_buffer = ByteBuffer::create_zeroed(0);
|
||||
|
@ -142,8 +144,6 @@ public:
|
|||
m_md5 = nullptr;
|
||||
}
|
||||
|
||||
virtual void update(const ByteBuffer& buffer) override { update(buffer.data(), buffer.size()); };
|
||||
virtual void update(const StringView& string) override { update((const u8*)string.characters_without_null_termination(), string.length()); };
|
||||
inline size_t digest_size() const
|
||||
{
|
||||
switch (m_kind) {
|
||||
|
|
|
@ -75,14 +75,14 @@ constexpr u8 PADDING[] = {
|
|||
|
||||
class MD5 final : public HashFunction<512, MD5Digest> {
|
||||
public:
|
||||
using HashFunction::update;
|
||||
|
||||
MD5()
|
||||
{
|
||||
m_buffer = ByteBuffer::wrap(m_data_buffer, sizeof(m_data_buffer));
|
||||
m_buffer = Bytes { m_data_buffer, sizeof(m_data_buffer) };
|
||||
}
|
||||
|
||||
virtual void update(const u8*, size_t) override;
|
||||
virtual void update(const ByteBuffer& buffer) override { update(buffer.data(), buffer.size()); };
|
||||
virtual void update(const StringView& string) override { update((const u8*)string.characters_without_null_termination(), string.length()); };
|
||||
virtual DigestType digest() override;
|
||||
virtual DigestType peek() override;
|
||||
|
||||
|
@ -118,7 +118,7 @@ private:
|
|||
|
||||
u32 m_A { MD5Constants::init_A }, m_B { MD5Constants::init_B }, m_C { MD5Constants::init_C }, m_D { MD5Constants::init_D };
|
||||
u32 m_count[2] { 0, 0 };
|
||||
ByteBuffer m_buffer;
|
||||
Bytes m_buffer;
|
||||
|
||||
u8 m_data_buffer[64];
|
||||
};
|
||||
|
|
|
@ -56,6 +56,8 @@ struct SHA1Digest {
|
|||
|
||||
class SHA1 final : public HashFunction<512, SHA1Digest<160 / 8>> {
|
||||
public:
|
||||
using HashFunction::update;
|
||||
|
||||
SHA1()
|
||||
{
|
||||
reset();
|
||||
|
@ -63,9 +65,6 @@ public:
|
|||
|
||||
virtual void update(const u8*, size_t) override;
|
||||
|
||||
virtual void update(const ByteBuffer& buffer) override { update(buffer.data(), buffer.size()); };
|
||||
virtual void update(const StringView& string) override { update((const u8*)string.characters_without_null_termination(), string.length()); };
|
||||
|
||||
virtual DigestType digest() override;
|
||||
virtual DigestType peek() override;
|
||||
|
||||
|
|
|
@ -96,6 +96,8 @@ struct SHA2Digest {
|
|||
// FIXME: I want template<size_t BlockSize> but the compiler gets confused
|
||||
class SHA256 final : public HashFunction<512, SHA2Digest<256 / 8>> {
|
||||
public:
|
||||
using HashFunction::update;
|
||||
|
||||
SHA256()
|
||||
{
|
||||
reset();
|
||||
|
@ -103,9 +105,6 @@ public:
|
|||
|
||||
virtual void update(const u8*, size_t) override;
|
||||
|
||||
virtual void update(const ByteBuffer& buffer) override { update(buffer.data(), buffer.size()); };
|
||||
virtual void update(const StringView& string) override { update((const u8*)string.characters_without_null_termination(), string.length()); };
|
||||
|
||||
virtual DigestType digest() override;
|
||||
virtual DigestType peek() override;
|
||||
|
||||
|
@ -149,6 +148,8 @@ private:
|
|||
|
||||
class SHA512 final : public HashFunction<1024, SHA2Digest<512 / 8>> {
|
||||
public:
|
||||
using HashFunction::update;
|
||||
|
||||
SHA512()
|
||||
{
|
||||
reset();
|
||||
|
@ -156,9 +157,6 @@ public:
|
|||
|
||||
virtual void update(const u8*, size_t) override;
|
||||
|
||||
virtual void update(const ByteBuffer& buffer) override { update(buffer.data(), buffer.size()); };
|
||||
virtual void update(const StringView& string) override { update((const u8*)string.characters_without_null_termination(), string.length()); };
|
||||
|
||||
virtual DigestType digest() override;
|
||||
virtual DigestType peek() override;
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ public:
|
|||
EMSA_PSS(Args... args)
|
||||
: Code<HashFunction>(args...)
|
||||
{
|
||||
m_buffer = ByteBuffer::wrap(m_data_buffer, sizeof(m_data_buffer));
|
||||
m_buffer = Bytes { m_data_buffer, sizeof(m_data_buffer) };
|
||||
}
|
||||
|
||||
static constexpr auto SaltLength = SaltSize;
|
||||
|
@ -72,7 +72,7 @@ public:
|
|||
auto hash = hash_fn.digest();
|
||||
|
||||
u8 DB_data[em_length - HashFunction::DigestSize - 1];
|
||||
auto DB = ByteBuffer::wrap(DB_data, em_length - HashFunction::DigestSize - 1);
|
||||
auto DB = Bytes { DB_data, em_length - HashFunction::DigestSize - 1 };
|
||||
auto DB_offset = 0;
|
||||
|
||||
for (size_t i = 0; i < em_length - SaltLength - HashFunction::DigestSize - 2; ++i)
|
||||
|
@ -85,7 +85,7 @@ public:
|
|||
auto mask_length = em_length - HashFunction::DigestSize - 1;
|
||||
|
||||
u8 DB_mask[mask_length];
|
||||
auto DB_mask_buffer = ByteBuffer::wrap(DB_mask, mask_length);
|
||||
auto DB_mask_buffer = Bytes { DB_mask, mask_length };
|
||||
// FIXME: we should probably allow reading from u8*
|
||||
MGF1(ReadonlyBytes { hash.data, HashFunction::DigestSize }, mask_length, DB_mask_buffer);
|
||||
|
||||
|
@ -123,7 +123,7 @@ public:
|
|||
return VerificationConsistency::Inconsistent;
|
||||
|
||||
u8 DB_mask[mask_length];
|
||||
auto DB_mask_buffer = ByteBuffer::wrap(DB_mask, mask_length);
|
||||
auto DB_mask_buffer = Bytes { DB_mask, mask_length };
|
||||
MGF1(H, mask_length, DB_mask_buffer);
|
||||
|
||||
u8 DB[mask_length];
|
||||
|
@ -145,7 +145,7 @@ public:
|
|||
auto* salt = DB + mask_length - SaltLength;
|
||||
u8 m_prime[8 + HashFunction::DigestSize + SaltLength] { 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
auto m_prime_buffer = ByteBuffer::wrap(m_prime, sizeof(m_prime));
|
||||
auto m_prime_buffer = Bytes { m_prime, sizeof(m_prime) };
|
||||
|
||||
m_prime_buffer.overwrite(8, message_hash.data, HashFunction::DigestSize);
|
||||
m_prime_buffer.overwrite(8 + HashFunction::DigestSize, salt, SaltLength);
|
||||
|
@ -159,7 +159,7 @@ public:
|
|||
return VerificationConsistency::Consistent;
|
||||
}
|
||||
|
||||
void MGF1(ReadonlyBytes seed, size_t length, ByteBuffer& out)
|
||||
void MGF1(ReadonlyBytes seed, size_t length, Bytes out)
|
||||
{
|
||||
auto& hash_fn = this->hasher();
|
||||
ByteBuffer T = ByteBuffer::create_zeroed(0);
|
||||
|
@ -173,7 +173,7 @@ public:
|
|||
|
||||
private:
|
||||
u8 m_data_buffer[8 + HashFunction::DigestSize + SaltLength];
|
||||
ByteBuffer m_buffer;
|
||||
Bytes m_buffer;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -204,7 +204,7 @@ void RSA_EMSA_PSS<HashFunction>::sign(ReadonlyBytes in, ByteBuffer& out)
|
|||
auto mod_bits = m_rsa.private_key().modulus().trimmed_length() * sizeof(u32) * 8;
|
||||
|
||||
u8 EM[mod_bits];
|
||||
auto EM_buf = ByteBuffer::wrap(EM, mod_bits);
|
||||
auto EM_buf = Bytes { EM, mod_bits };
|
||||
m_emsa_pss.encode(in, EM_buf, mod_bits - 1);
|
||||
|
||||
// -- sign via RSA
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue