1#ifndef SECP256K1_HASH_ACCEL_HPP
2#define SECP256K1_HASH_ACCEL_HPP
40#if defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)
41 #ifndef SECP256K1_X86_TARGET
42 #define SECP256K1_X86_TARGET 1
72std::array<std::uint8_t, 32>
sha256(const
void* data, std::
size_t len) noexcept;
76void sha256_33(const std::uint8_t* pubkey33, std::uint8_t* out32) noexcept;
79void sha256_32(const std::uint8_t* in32, std::uint8_t* out32) noexcept;
82std::array<std::uint8_t, 32>
sha256d(const
void* data, std::
size_t len) noexcept;
87std::array<std::uint8_t, 20>
ripemd160(const
void* data, std::
size_t len) noexcept;
91void ripemd160_32(const std::uint8_t* in32, std::uint8_t* out20) noexcept;
96std::array<std::uint8_t, 20>
hash160(const
void* data, std::
size_t len) noexcept;
100void hash160_33(const std::uint8_t* pubkey33, std::uint8_t* out20) noexcept;
117 const std::uint8_t* pubkeys,
118 std::uint8_t* out32s,
119 std::
size_t count) noexcept;
124 const std::uint8_t* in32s,
125 std::uint8_t* out20s,
126 std::
size_t count) noexcept;
132 const std::uint8_t* pubkeys,
133 std::uint8_t* out20s,
134 std::
size_t count) noexcept;
141 void sha256_33(
const std::uint8_t* pubkey33, std::uint8_t* out32)
noexcept;
142 void sha256_32(
const std::uint8_t* in32, std::uint8_t* out32)
noexcept;
144 void ripemd160_32(
const std::uint8_t* in32, std::uint8_t* out20)
noexcept;
145 void hash160_33(
const std::uint8_t* pubkey33, std::uint8_t* out20)
noexcept;
148#ifdef SECP256K1_X86_TARGET
150 void sha256_compress(
const std::uint8_t block[64], std::uint32_t state[8])
noexcept;
151 void sha256_33(
const std::uint8_t* pubkey33, std::uint8_t* out32)
noexcept;
152 void sha256_32(
const std::uint8_t* in32, std::uint8_t* out32)
noexcept;
153 void hash160_33(
const std::uint8_t* pubkey33, std::uint8_t* out20)
noexcept;
void sha256_compress(const std::uint8_t block[64], std::uint32_t state[8]) noexcept
void ripemd160_compress(const std::uint8_t block[64], std::uint32_t state[5]) noexcept
void ripemd160_32(const std::uint8_t *in32, std::uint8_t *out20) noexcept
void hash160_33_batch(const std::uint8_t *pubkeys, std::uint8_t *out20s, std::size_t count) noexcept
void sha256_33(const std::uint8_t *pubkey33, std::uint8_t *out32) noexcept
std::array< std::uint8_t, 20 > ripemd160(const void *data, std::size_t len) noexcept
RIPEMD-160 of arbitrary data (auto-selects best implementation).
void hash160_33(const std::uint8_t *pubkey33, std::uint8_t *out20) noexcept
std::array< std::uint8_t, 32 > sha256(const void *data, std::size_t len) noexcept
SHA-256 of arbitrary data (auto-selects best implementation).
void sha256_32(const std::uint8_t *in32, std::uint8_t *out32) noexcept
SHA-256 of exactly 32 bytes (e.g. second hash in double-SHA256)
std::array< std::uint8_t, 32 > sha256d(const void *data, std::size_t len) noexcept
Double-SHA256: SHA256(SHA256(data)) for arbitrary data.
void sha256_33_batch(const std::uint8_t *pubkeys, std::uint8_t *out32s, std::size_t count) noexcept
bool sha_ni_available() noexcept
Check individual features.
HashTier detect_hash_tier() noexcept
Detect best available hashing tier at runtime.
bool avx2_available() noexcept
const char * hash_tier_name(HashTier tier) noexcept
Human-readable tier name.
void ripemd160_32_batch(const std::uint8_t *in32s, std::uint8_t *out20s, std::size_t count) noexcept
std::array< std::uint8_t, 20 > hash160(const void *data, std::size_t len) noexcept
Hash160 of arbitrary data.
bool avx512_available() noexcept