git / moonbite-core / src/crypto/sha3.h · raw

// Copyright (c) 2020 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#ifndef BITCOIN_CRYPTO_SHA3_H#define BITCOIN_CRYPTO_SHA3_H#include <span.h>#include <stdint.h>#include <stdlib.h>//! The Keccak-f[1600] transform.void KeccakF(uint64_t (&st)[25]);class SHA3_256{private:    uint64_t m_state[25] = {0};    unsigned char m_buffer[8];    unsigned m_bufsize = 0;    unsigned m_pos = 0;    //! Sponge rate in bits.    static constexpr unsigned RATE_BITS = 1088;    //! Sponge rate expressed as a multiple of the buffer size.    static constexpr unsigned RATE_BUFFERS = RATE_BITS / (8 * sizeof(m_buffer));    static_assert(RATE_BITS % (8 * sizeof(m_buffer)) == 0, "Rate must be a multiple of 8 bytes");public:    static constexpr size_t OUTPUT_SIZE = 32;    SHA3_256() {}    SHA3_256& Write(Span<const unsigned char> data);    SHA3_256& Finalize(Span<unsigned char> output);    SHA3_256& Reset();};#endif // BITCOIN_CRYPTO_SHA3_H