32 template <
typename RecursiveCurve>
34 typename RecursiveCurve::Builder*
builder,
41 for (
auto& element : native_claim.challenge) {
42 result.challenge.emplace_back(FF::from_witness(
builder, element));
45 result.non_shifted_evaluation = FF::from_witness(
builder, native_claim.non_shifted_evaluation);
46 result.shifted_evaluation = FF::from_witness(
builder, native_claim.shifted_evaluation);
47 result.non_shifted_commitment = Commitment::from_witness(
builder, native_claim.non_shifted_commitment);
48 result.shifted_commitment = Commitment::from_witness(
builder, native_claim.shifted_commitment);
58 requires Curve::is_stdlib_type
61 native_claim.challenge.reserve(
challenge.size());
63 for (
auto& recursive_challenge :
challenge) {
64 native_claim.challenge.emplace_back(recursive_challenge.get_value());
77 template <
typename Codec,
typename HashFn>
FF hash_with_origin_tagging(
const OriginTag&
tag)
const
80 std::vector<FF> claim_elements;
82 auto append_tagged = [&]<
typename U>(
const U& component) {
83 auto frs = bb::tag_and_serialize<in_circuit, Codec>(component,
tag);
84 claim_elements.insert(claim_elements.end(), frs.begin(), frs.end());
88 append_tagged(element);
97 bb::unset_free_witness_tags<in_circuit, FF>(claim_elements);
99 return HashFn::hash(claim_elements);
105 template <
typename TranscriptType>
FF hash_with_origin_tagging(
const TranscriptType& transcript)
const
108 return hash_with_origin_tagging<typename TranscriptType::Codec, typename TranscriptType::HashFunction>(
tag);