9#include <cuda_runtime.h>
10#include <cuda/std/array>
11#include <cuda/std/span>
12#include <cuda/std/tuple>
19template <
typename Hash>
20concept Hashable =
requires(Hash hash, cuda::std::span<const int4, 4> msg) {
21 { hash.Hash(msg) } -> std::same_as<cuda::std::array<int4, 2>>;
49template <
typename Hash>
51 requires(Hash hash, cuda::std::span<const cuda::std::array<int4, 4>, 4> msgs) {
52 { hash.Hash4(msgs) } -> std::same_as<cuda::std::array<cuda::std::array<int4, 2>, 4>>;
71template <
typename Hash>
72concept XorHashable =
requires(Hash hash, cuda::std::tuple<int4, const int4> msg) {
73 { hash.Hash(msg) } -> std::same_as<cuda::std::array<int4, 4>>;
85template <
typename Hash>
87 { hash.Hash(block) } -> std::same_as<int4>;
92namespace fss::detail {
94template <
typename Hash>
95cuda::std::array<int4, 8> HashBatch(Hash &hash,
const cuda::std::array<int4, 8> &blocks) {
96 cuda::std::array<int4, 8> out;
97 for (
int i = 0; i < 8; ++i) out[i] = hash.Hash(blocks[i]);
Circular-correlation-robust (CCR) hash interface for HalfTree schemes.
Definition hash.cuh:86
Optional four-message batch extension of Hashable.
Definition hash.cuh:50
Collision-resistant hash interface.
Definition hash.cuh:20
Collision-resistant and XOR-collision-resistant hash interface.
Definition hash.cuh:72