Bitcoin ABC 0.34.2
P2P Digital Currency
hasher.h
Go to the documentation of this file.
1// Copyright (c) 2019 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_UTIL_HASHER_H
6#define BITCOIN_UTIL_HASHER_H
7
8#include <addresstype.h>
9#include <crypto/siphash.h>
12#include <primitives/txid.h>
13#include <script/solver.h>
14#include <uint256.h>
15
17private:
19 const uint64_t k0, k1;
20
21public:
23
24 size_t hash(const uint256 &h) const { return SipHashUint256(k0, k1, h); }
25 size_t operator()(const uint256 &h) const { return hash(h); }
26};
27
29public:
31
32 size_t operator()(const TxId &txid) const { return hash(txid); }
33};
34
36public:
38
39 size_t operator()(const BlockHash &block_hash) const {
40 return hash(block_hash);
41 }
42};
43
45private:
47 const uint64_t k0, k1;
48
49public:
50 SaltedOutpointHasher(bool deterministic = false);
51
62 size_t operator()(const COutPoint &outpoint) const noexcept {
63 return SipHashUint256Extra(k0, k1, outpoint.GetTxId(), outpoint.GetN());
64 }
65};
66
68 size_t operator()(const uint256 &hash) const {
69 return ReadLE64(hash.begin());
70 }
71};
72
82public:
83 template <uint8_t hash_select>
84 uint32_t operator()(const uint256 &key) const {
85 static_assert(hash_select < 8,
86 "SignatureCacheHasher only has 8 hashes available.");
87 uint32_t u;
88 std::memcpy(&u, key.begin() + 4 * hash_select, 4);
89 return u;
90 }
91};
92
97 // this used to call `GetCheapHash()` in uint256, which was later moved; the
98 // cheap hash function simply calls ReadLE64() however, so the end result is
99 // identical
100 size_t operator()(const BlockHash &hash) const {
101 return ReadLE64(hash.begin());
102 }
103};
104
106private:
108 const uint64_t m_k0, m_k1;
109
110public:
112
113 size_t operator()(const Span<const uint8_t> &script) const;
114};
115
117 size_t operator()(const CTxDestination &dest) const {
119 }
120};
121
122#endif // BITCOIN_UTIL_HASHER_H
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a Bitcoin scriptPubKey for the given CTxDestination.
std::variant< CNoDestination, PKHash, ScriptHash > CTxDestination
A txout script template with a specific destination.
Definition: addresstype.h:54
An outpoint - a combination of a transaction hash and an index n into its vout.
Definition: transaction.h:20
size_t operator()(const BlockHash &block_hash) const
Definition: hasher.h:39
const uint64_t k0
Salt.
Definition: hasher.h:47
const uint64_t k1
Definition: hasher.h:47
size_t operator()(const COutPoint &outpoint) const noexcept
Having the hash noexcept allows libstdc++'s unordered_map to recalculate the hash during rehash,...
Definition: hasher.h:62
SaltedOutpointHasher(bool deterministic=false)
Definition: hasher.cpp:13
size_t operator()(const Span< const uint8_t > &script) const
Definition: hasher.cpp:20
const uint64_t m_k0
Salt.
Definition: hasher.h:108
const uint64_t m_k1
Definition: hasher.h:108
SaltedTxIdHasher()
Definition: hasher.h:30
size_t operator()(const TxId &txid) const
Definition: hasher.h:32
size_t hash(const uint256 &h) const
Definition: hasher.h:24
size_t operator()(const uint256 &h) const
Definition: hasher.h:25
const uint64_t k0
Salt.
Definition: hasher.h:19
const uint64_t k1
Definition: hasher.h:19
We're hashing a nonce into the entries themselves, so we don't need extra blinding in the set hash co...
Definition: hasher.h:81
uint32_t operator()(const uint256 &key) const
Definition: hasher.h:84
constexpr uint8_t * begin()
Definition: uint256.h:122
256-bit opaque blob.
Definition: uint256.h:199
static uint64_t ReadLE64(const uint8_t *ptr)
Definition: common.h:25
uint64_t SipHashUint256Extra(uint64_t k0, uint64_t k1, const uint256 &val, uint32_t extra)
Definition: siphash.cpp:139
uint64_t SipHashUint256(uint64_t k0, uint64_t k1, const uint256 &val)
Optimized SipHash-2-4 implementation for uint256.
Definition: siphash.cpp:100
A BlockHash is a unqiue identifier for a block.
Definition: blockhash.h:13
Maintain a map of CBlockIndex for all known headers.
Definition: hasher.h:96
size_t operator()(const BlockHash &hash) const
Definition: hasher.h:100
size_t operator()(const uint256 &hash) const
Definition: hasher.h:68
size_t operator()(const CTxDestination &dest) const
Definition: hasher.h:117
A TxId is the identifier of a transaction.
Definition: txid.h:14