Skip to content

Commit

Permalink
Merge pull request #169 from cppalliance/simplification
Browse files Browse the repository at this point in the history
  • Loading branch information
mborland authored Jan 9, 2025
2 parents a5e7692 + a6db3dc commit 1151f1f
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 41 deletions.
64 changes: 27 additions & 37 deletions include/boost/crypt2/hash/detail/sha224_256_hasher.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,13 @@ class sha_224_256_hasher final : public sha_1_2_hasher_base<digest_size, 8U>
using base_class::buffer_;
using base_class::buffer_index_;

using is_sha224 = compat::bool_constant<digest_size == 28U>;

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto process_message_block() noexcept -> void override;

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto init(const compat::true_type&) noexcept -> void;

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto init(const compat::false_type&) noexcept -> void;

public:

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR sha_224_256_hasher() noexcept { init(is_sha224()); }

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR ~sha_224_256_hasher() noexcept override { base_class::base_destroy(); };
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR sha_224_256_hasher() noexcept { init(); }

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto init() noexcept { init(is_sha224()); }
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto init() noexcept -> void;
};

namespace sha256_detail {
Expand Down Expand Up @@ -185,36 +177,34 @@ BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto sha_224_256_hasher<digest_size>::process_

// Initial values for SHA224
template <compat::size_t digest_size>
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto sha_224_256_hasher<digest_size>::init(const compat::true_type&) noexcept -> void
{
base_class::base_init();

// https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
intermediate_hash_[0] = 0xC1059ED8;
intermediate_hash_[1] = 0x367CD507;
intermediate_hash_[2] = 0x3070DD17;
intermediate_hash_[3] = 0xF70E5939;
intermediate_hash_[4] = 0xFFC00B31;
intermediate_hash_[5] = 0x68581511;
intermediate_hash_[6] = 0x64F98FA7;
intermediate_hash_[7] = 0xBEFA4FA4;
}

// Initial values for SHA256
template <compat::size_t digest_size>
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto sha_224_256_hasher<digest_size>::init(const compat::false_type&) noexcept -> void
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto sha_224_256_hasher<digest_size>::init() noexcept -> void
{
base_class::base_init();

// https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
intermediate_hash_[0] = 0xC1059ED8;
intermediate_hash_[1] = 0x367CD507;
intermediate_hash_[2] = 0x3070DD17;
intermediate_hash_[3] = 0xF70E5939;
intermediate_hash_[4] = 0xFFC00B31;
intermediate_hash_[5] = 0x68581511;
intermediate_hash_[6] = 0x64F98FA7;
intermediate_hash_[7] = 0xBEFA4FA4;
if constexpr (digest_size == 28U)
{
// https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
intermediate_hash_[0] = 0xC1059ED8;
intermediate_hash_[1] = 0x367CD507;
intermediate_hash_[2] = 0x3070DD17;
intermediate_hash_[3] = 0xF70E5939;
intermediate_hash_[4] = 0xFFC00B31;
intermediate_hash_[5] = 0x68581511;
intermediate_hash_[6] = 0x64F98FA7;
intermediate_hash_[7] = 0xBEFA4FA4;
}
else
{
// https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
intermediate_hash_[0] = 0x6A09E667;
intermediate_hash_[1] = 0xBB67AE85;
intermediate_hash_[2] = 0x3C6EF372;
intermediate_hash_[3] = 0xA54FF53A;
intermediate_hash_[4] = 0x510E527F;
intermediate_hash_[5] = 0x9B05688C;
intermediate_hash_[6] = 0x1F83D9AB;
intermediate_hash_[7] = 0x5BE0CD19;
}
}

} // namespace boost::crypt::hash_detail
Expand Down
5 changes: 2 additions & 3 deletions include/boost/crypt2/hash/detail/sha_1_2_hasher_base.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class sha_1_2_hasher_base
using return_type = compat::array<compat::byte, digest_size>;

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR sha_1_2_hasher_base() noexcept { base_init(); }
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR virtual ~sha_1_2_hasher_base() noexcept { base_destroy(); }
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR ~sha_1_2_hasher_base() noexcept;

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto process_bytes(compat::span<const compat::byte> data) noexcept -> state;

Expand All @@ -59,7 +59,6 @@ class sha_1_2_hasher_base
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto get_digest(Range&& data) noexcept -> void;

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto base_init() noexcept -> void;
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto base_destroy() noexcept -> void;
};

template <compat::size_t digest_size, compat::size_t intermediate_hash_size>
Expand Down Expand Up @@ -253,7 +252,7 @@ BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto sha_1_2_hasher_base<digest_size, intermed
}

template <compat::size_t digest_size, compat::size_t intermediate_hash_size>
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto sha_1_2_hasher_base<digest_size, intermediate_hash_size>::base_destroy() noexcept -> void
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR sha_1_2_hasher_base<digest_size, intermediate_hash_size>::~sha_1_2_hasher_base() noexcept
{
detail::clear_mem(intermediate_hash_);
detail::clear_mem(buffer_);
Expand Down
1 change: 0 additions & 1 deletion include/boost/crypt2/hash/sha1.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ BOOST_CRYPT_EXPORT class sha1_hasher final : public hash_detail::sha_1_2_hasher_
public:

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR sha1_hasher() noexcept { init(); }
BOOST_CRYPT_GPU_ENABLED_CONSTEXPR ~sha1_hasher() noexcept override { base_destroy(); }

BOOST_CRYPT_GPU_ENABLED_CONSTEXPR auto init() noexcept -> void;
};
Expand Down

0 comments on commit 1151f1f

Please sign in to comment.