8#include "../pedersen_commitment/pedersen.hpp"
22template <
typename Curve>
25 const size_t num_bytes = input.size();
26 const size_t bytes_per_element = 31;
27 size_t num_elements =
static_cast<size_t>(num_bytes % bytes_per_element != 0) + (num_bytes / bytes_per_element);
29 const auto slice = [](
const std::vector<uint8_t>&
data,
const size_t start,
const size_t slice_size) {
31 for (
size_t i = 0; i < slice_size; ++i) {
39 for (
size_t i = 0; i < num_elements - 1; ++i) {
40 size_t bytes_to_slice = bytes_per_element;
41 Fq element =
slice(input, i * bytes_per_element, bytes_to_slice);
42 elements.emplace_back(element);
44 size_t bytes_to_slice = num_bytes - ((num_elements - 1) * bytes_per_element);
45 Fq element =
slice(input, (num_elements - 1) * bytes_per_element, bytes_to_slice);
46 elements.emplace_back(element);
77template <
typename Curve>
80 Element result = length_generator *
Fr(inputs.size());
87template <
typename Curve>
93 if (converted.size() < 2) {
96 auto result =
hash({ converted[0], converted[1] },
context);
97 for (
size_t i = 2; i < converted.size(); ++i) {
Performs pedersen commitments!
Performs pedersen hashes!
typename crypto::GeneratorContext< Curve > GeneratorContext
typename Curve::BaseField Fq
static std::vector< Fq > convert_buffer(const std::vector< uint8_t > &input)
Converts input uint8_t buffers into vector of field elements. Used to hash the Transcript in a SNARK-...
static Fq hash_buffer(const std::vector< uint8_t > &input, GeneratorContext context={})
Given an arbitrary length of bytes, convert them to fields and hash the result using the default gene...
typename Curve::Element Element
static Fq hash(const std::vector< Fq > &inputs, GeneratorContext context={})
Given a vector of fields, generate a pedersen hash using generators from context.
const std::vector< FF > data
StrictMock< MockContext > context
void hash(State &state) noexcept
C slice(C const &container, size_t start)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept