Bitcoin Core 28.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
sha3.h
Go to the documentation of this file.
1// Copyright (c) 2020-2022 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#ifndef BITCOIN_CRYPTO_SHA3_H
6#define BITCOIN_CRYPTO_SHA3_H
7
8#include <span.h>
9
10#include <cstdlib>
11#include <stdint.h>
12
14void KeccakF(uint64_t (&st)[25]);
15
17{
18private:
19 uint64_t m_state[25] = {0};
20 unsigned char m_buffer[8];
21 unsigned m_bufsize = 0;
22 unsigned m_pos = 0;
23
25 static constexpr unsigned RATE_BITS = 1088;
26
28 static constexpr unsigned RATE_BUFFERS = RATE_BITS / (8 * sizeof(m_buffer));
29
30 static_assert(RATE_BITS % (8 * sizeof(m_buffer)) == 0, "Rate must be a multiple of 8 bytes");
31
32public:
33 static constexpr size_t OUTPUT_SIZE = 32;
34
35 SHA3_256() = default;
38 SHA3_256& Reset();
39};
40
41#endif // BITCOIN_CRYPTO_SHA3_H
unsigned char m_buffer[8]
Definition sha3.h:20
unsigned m_bufsize
Definition sha3.h:21
static constexpr unsigned RATE_BUFFERS
Sponge rate expressed as a multiple of the buffer size.
Definition sha3.h:28
SHA3_256 & Write(Span< const unsigned char > data)
Definition sha3.cpp:106
SHA3_256 & Reset()
Definition sha3.cpp:150
SHA3_256 & Finalize(Span< unsigned char > output)
Definition sha3.cpp:136
unsigned m_pos
Definition sha3.h:22
uint64_t m_state[25]
Definition sha3.h:19
static constexpr size_t OUTPUT_SIZE
Definition sha3.h:33
static constexpr unsigned RATE_BITS
Sponge rate in bits.
Definition sha3.h:25
SHA3_256()=default
A Span is an object that can refer to a contiguous sequence of objects.
Definition span.h:98
void KeccakF(uint64_t(&st)[25])
The Keccak-f[1600] transform.
Definition sha3.cpp:18