zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp
Go to the documentation of this file.
95 /************************ TON Virtual Machine compatible serialization *************************/
111 static const std::size_t g1_byteblob_size = curve_element_serializer<CurveType>::sizeof_field_element;
112 static const std::size_t g2_byteblob_size = 2 * curve_element_serializer<CurveType>::sizeof_field_element;
113 static const std::size_t fp_byteblob_size = CurveType::base_field_type::modulus_bits / chunk_size +
119 static const std::size_t linear_term_byteblob_size = std_size_t_byteblob_size + fr_byteblob_size;
123 static inline typename std::enable_if<!::nil::crypto3::algebra::is_extended_field<FieldType>::value,
147 static inline typename std::enable_if<::nil::crypto3::algebra::is_extended_field<FieldType>::value,
212 std_size_t_process(read_iter_begin, read_iter_begin + std_size_t_byteblob_size, processingStatus);
236 std_size_t_process(read_iter_begin, read_iter_begin + std_size_t_byteblob_size, processingStatus);
264 std_size_t_process(read_iter_begin, read_iter_begin + std_size_t_byteblob_size, processingStatus);
314 r1cs_constraint_system_process(typename std::vector<chunk_type>::const_iterator read_iter_begin,
319 std_size_t_process(read_iter_begin, read_iter_begin + std_size_t_byteblob_size, processingStatus);
325 std::size_t auxiliary_input_size = std_size_t_process(read_iter_begin + std_size_t_byteblob_size,
375 typename CurveType::template g2_type<>::value_type g = g2_group_type_process<typename CurveType::template g2_type<>>(
378 typename CurveType::template g1_type<>::value_type h = g1_group_type_process<typename CurveType::template g1_type<>>(
382 return crypto3::zk::snark::detail::element_kc<typename CurveType::template g2_type<>, typename CurveType::template g1_type<>>(
386 static inline knowledge_commitment_vector<typename CurveType::template g2_type<>, typename CurveType::template g1_type<>>
392 using T = knowledge_commitment<typename CurveType::template g2_type<>, typename CurveType::template g1_type<>>;
402 std_size_t_process(read_iter_begin, read_iter_begin + std_size_t_byteblob_size, processingStatus);
479 nil::crypto3::detail::pack_from<nil::crypto3::stream_endian::big_octet_big_bit, 8, 32>(vector_c, iter);
498 std_size_t_process(read_iter_begin, read_iter_begin + std_size_t_byteblob_size, processingStatus);
563 g1_accumulation_vector_process(typename std::vector<chunk_type>::const_iterator read_iter_begin,
575 g1_group_type_process<T>(read_iter_begin, read_iter_begin + g1_byteblob_size, processingStatus);
582 g1_sparse_vector_process<T>(read_iter_begin + g1_byteblob_size, read_iter_end, processingStatus);
605 field_type_process<typename CurveType::gt_type>(read_iter_begin, read_iter_begin + gt_byteblob_size,
612 typename CurveType::template g2_type<>::value_type gamma_g2 = g2_group_type_process<typename CurveType::template g2_type<>>(
620 typename CurveType::template g2_type<>::value_type delta_g2 = g2_group_type_process<typename CurveType::template g2_type<>>(
629 g1_accumulation_vector_process<typename CurveType::template g1_type<>>(read_iter_begin + gt_byteblob_size +
638 return typename scheme_type::verification_key_type(alpha_g1_beta_g2, gamma_g2, delta_g2, gamma_ABC_g1);
648 typename CurveType::template g1_type<>::value_type alpha_g1 = g1_group_type_process<typename CurveType::template g1_type<>>(
651 typename CurveType::template g1_type<>::value_type beta_g1 = g1_group_type_process<typename CurveType::template g1_type<>>(
654 typename CurveType::template g2_type<>::value_type beta_g2 = g2_group_type_process<typename CurveType::template g2_type<>>(
657 typename CurveType::template g1_type<>::value_type delta_g1 = g1_group_type_process<typename CurveType::template g1_type<>>(
660 typename CurveType::template g2_type<>::value_type delta_g2 = g2_group_type_process<typename CurveType::template g2_type<>>(
680 knowledge_commitment_vector<typename CurveType::template g2_type<>, typename CurveType::template g1_type<>> B_query =
715 std::move(delta_g2), std::move(A_query), std::move(B_query), std::move(H_query), std::move(L_query),
732 std_size_t_process(read_iter_begin, read_iter_begin + std_size_t_byteblob_size, processingStatus);
775 typename CurveType::template g1_type<>::value_type g_A = g1_group_type_process<typename CurveType::template g1_type<>>(
782 typename CurveType::template g2_type<>::value_type g_B = g2_group_type_process<typename CurveType::template g2_type<>>(
791 typename CurveType::template g1_type<>::value_type g_C = g1_group_type_process<typename CurveType::template g1_type<>>(
872 struct verifier_input_serializer_tvm<nil::crypto3::zk::snark::r1cs_gg_ppzksnark<algebra::curves::bls12<381>>> {
881 static const std::size_t g1_byteblob_size = curve_element_serializer<CurveType>::sizeof_field_element;
882 static const std::size_t g2_byteblob_size = 2 * curve_element_serializer<CurveType>::sizeof_field_element;
883 static const std::size_t fp_byteblob_size = CurveType::base_field_type::modulus_bits / chunk_size +
889 static const std::size_t linear_term_byteblob_size = std_size_t_byteblob_size + fr_byteblob_size;
894 typename std::enable_if<!::nil::crypto3::algebra::is_extended_field<FieldType>::value, void>::type
898 typedef nil::crypto3::multiprecision::number<nil::crypto3::multiprecision::backends::cpp_int_backend<>>
906 nil::crypto3::multiprecision::export_bits(integral_type(input_fp.data), write_iter, chunk_size, false);
912 typename std::enable_if<::nil::crypto3::algebra::is_extended_field<FieldType>::value, void>::type
918 const std::size_t data_dimension = field_type::arity / field_type::underlying_field_type::arity;
949 static inline void std_size_t_process(std::size_t input_s, std::vector<chunk_type>::iterator &write_iter) {
1016 get_r1cs_constraint_byteblob_size(r1cs_constraint<typename CurveType::scalar_field_type> input_rc) {
1050 crypto3::zk::snark::detail::element_kc<typename CurveType::template g2_type<>, typename CurveType::template g1_type<>>
1059 knowledge_commitment_vector<typename CurveType::template g2_type<>, typename CurveType::template g1_type<>> input_kv) {
1066 knowledge_commitment_vector<typename CurveType::template g2_type<>, typename CurveType::template g1_type<>>
1133 r1cs_constraint_system_process<typename CurveType::scalar_field_type>(pk.constraint_system, write_iter);
1138 static inline std::vector<chunk_type> process(typename scheme_type::verification_key_type vk) {
1156 std::size_t accumulation_vector_byteblob_size = sparse_vector_byteblob_size + g1_byteblob_size;
1171 // g1_group_type_process<typename CurveType::template g1_type<>>(vk.gamma_ABC_g1.first, write_iter);
1194 std::size_t primary_byteblob_input_size = std_size_t_byteblob_size + pi_count * modulus_chunks;
A struct representing a BLS12-381 and BLS12-377 curve.
Definition: curves/bls12.hpp:49
Definition: accumulation_vector.hpp:46
sparse_vector< Type > rest
Definition: accumulation_vector.hpp:53
underlying_value_type first
Definition: accumulation_vector.hpp:52
ppzkSNARK for R1CS with a security proof in the generic group (GG) model
Definition: r1cs_gg_ppzksnark.hpp:109
OutputIterator move(const SinglePassRange &rng, OutputIterator result)
Definition: move.hpp:45
Definition: set_commitment_component.hpp:37
Definition: pair.hpp:32
Definition: pair.hpp:31
Definition: element_knowledge_commitment.hpp:54
Definition: knowledge_commitment.hpp:49
Definition: variable.hpp:229
std::vector< linear_term< FieldType > > terms
Definition: variable.hpp:233
Definition: variable.hpp:144
variable< FieldType >::index_type index
Definition: variable.hpp:148
std::vector< r1cs_constraint< FieldType > > constraints
Definition: r1cs.hpp:130
std::size_t primary_input_size
Definition: r1cs.hpp:127
std::size_t auxiliary_input_size
Definition: r1cs.hpp:128
Definition: r1cs.hpp:60
Definition: sparse_vector.hpp:48
std::vector< underlying_value_type > values
Definition: sparse_vector.hpp:58
std::size_t domain_size() const
Definition: sparse_vector.hpp:167
std::vector< std::size_t > indices
Definition: sparse_vector.hpp:57
std::size_t domain_size_
Definition: sparse_vector.hpp:59
Definition: variable.hpp:66
Definition: algebra/include/nil/crypto3/algebra/curves/detail/marshalling.hpp:43
static GroupType::value_type g1_group_type_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:172
static knowledge_commitment_vector< typename CurveType::template g2_type<>, typename CurveType::template g1_type<> > g2g1_knowledge_commitment_vector_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:387
static std::size_t std_size_t_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:457
static scheme_type::proof_type proof_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:763
static std::enable_if<::nil::crypto3::algebra::is_extended_field< FieldType >::value, typename FieldType::value_type >::type field_type_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:149
static sparse_vector< T > g1_sparse_vector_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:486
static scheme_type::proving_key_type proving_key_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:642
static r1cs_constraint_system< typename CurveType::scalar_field_type > r1cs_constraint_system_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:314
static linear_term< typename CurveType::scalar_field_type > linear_term_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:205
static std::tuple< typename scheme_type::verification_key_type, typename scheme_type::primary_input_type, typename scheme_type::proof_type > verifier_input_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:805
static scheme_type::primary_input_type primary_input_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:720
static GroupType::value_type g2_group_type_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:189
static crypto3::zk::snark::detail::element_kc< typename CurveType::template g2_type<>, typename CurveType::template g1_type<> > g2g1_element_kc_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:371
static linear_combination< typename CurveType::scalar_field_type > linear_combination_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:229
std::uint8_t chunk_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:107
static r1cs_constraint< typename CurveType::scalar_field_type > r1cs_constraint_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:259
typename algebra::curves::bls12< 381 > CurveType
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:104
static std::enable_if<!::nil::crypto3::algebra::is_extended_field< FieldType >::value, typename FieldType::value_type >::type field_type_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:125
static accumulation_vector< T > g1_accumulation_vector_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:563
static scheme_type::verification_key_type verification_key_process(typename std::vector< chunk_type >::const_iterator read_iter_begin, typename std::vector< chunk_type >::const_iterator read_iter_end, status_type &processingStatus)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:592
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:98
static void linear_combination_process(linear_combination< T > input_cm, std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1005
static std::vector< chunk_type > process(typename scheme_type::primary_input_type pi)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1183
static std::enable_if<!::nil::crypto3::algebra::is_extended_field< FieldType >::value, void >::type field_type_process(typename FieldType::value_type input_fp, typename std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:895
static void linear_term_process(linear_term< T > input_lt, std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:996
static void g1_group_type_process(typename GroupType::value_type input_g, typename std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:926
static void r1cs_constraint_system_process(r1cs_constraint_system< T > input_rs, std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1037
std::uint8_t chunk_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:877
static std::vector< chunk_type > process(typename scheme_type::verification_key_type vk)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1138
static std::vector< chunk_type > process(typename scheme_type::proving_key_type pk)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1087
static void g2_group_type_process(typename GroupType::value_type input_g, typename std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:938
static void std_size_t_process(std::size_t input_s, std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:949
static void g2g1_knowledge_commitment_vector_process(knowledge_commitment_vector< typename CurveType::template g2_type<>, typename CurveType::template g1_type<>> input_kv, std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1065
static void g1_accumulation_vector_process(accumulation_vector< T > input_av, std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:987
static std::size_t get_g2g1_knowledge_commitment_vector_size(knowledge_commitment_vector< typename CurveType::template g2_type<>, typename CurveType::template g1_type<>> input_kv)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1058
static std::vector< chunk_type > process(typename scheme_type::proof_type pr)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1209
typename algebra::curves::bls12< 381 > CurveType
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:874
static void g1_sparse_vector_process(sparse_vector< T > input_sv, std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:962
static void r1cs_constraint_process(r1cs_constraint< T > input_rc, std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1027
static std::enable_if<::nil::crypto3::algebra::is_extended_field< FieldType >::value, void >::type field_type_process(typename FieldType::value_type input_fp, typename std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:913
static std::size_t get_r1cs_constraint_byteblob_size(r1cs_constraint< typename CurveType::scalar_field_type > input_rc)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1016
static void g2g1_element_kc_process(crypto3::zk::snark::detail::element_kc< typename CurveType::template g2_type<>, typename CurveType::template g1_type<>> input_ek, std::vector< chunk_type >::iterator &write_iter)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:1049
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/marshalling.hpp:869