1 // Copyright (c) 2015-2022 Clearmatics Technologies Ltd
3 // SPDX-License-Identifier: LGPL-3.0+
5 #ifndef __ZETH_SERIALIZATION_R1CS_VARIABLE_ASSIGNMENT_SERIALIZATION_TCC__
6 #define __ZETH_SERIALIZATION_R1CS_VARIABLE_ASSIGNMENT_SERIALIZATION_TCC__
8 #include "libzeth/core/field_element_utils.hpp"
9 #include "libzeth/serialization/r1cs_variable_assignment_serialization.hpp"
10 #include "libzeth/serialization/stream_utils.hpp"
15 template<typename FieldT>
16 void r1cs_variable_assignment_read_bytes(
17 libsnark::r1cs_variable_assignment<FieldT> &assignment, std::istream &in_s)
19 collection_read_bytes<
20 libsnark::r1cs_variable_assignment<FieldT>,
21 field_element_read_bytes<FieldT>>(assignment, in_s);
24 template<typename FieldT>
25 void r1cs_variable_assignment_read_bytes(
26 libsnark::r1cs_primary_input<FieldT> &primary,
27 libsnark::r1cs_auxiliary_input<FieldT> &auxiliary,
28 const size_t primary_input_size,
31 // Manually read the collection size, compute the primary and auxiliary
32 // sizes and read into the separate arrays.
33 const size_t n = read_bytes<size_t>(in_s);
34 if (n < primary_input_size) {
35 throw std::length_error(
36 "assignment length smaller than primary input size");
40 collection_n_read_bytes<
41 libsnark::r1cs_primary_input<FieldT>,
42 field_element_read_bytes<FieldT>>(primary, primary_input_size, in_s);
45 collection_n_read_bytes<
46 libsnark::r1cs_auxiliary_input<FieldT>,
47 field_element_read_bytes<FieldT>>(
48 auxiliary, n - primary_input_size, in_s);
51 template<typename FieldT>
52 void r1cs_variable_assignment_write_bytes(
53 const libsnark::r1cs_variable_assignment<FieldT> &assignment,
56 collection_write_bytes<
57 libsnark::r1cs_variable_assignment<FieldT>,
58 field_element_write_bytes<FieldT>>(assignment, out_s);
61 template<typename FieldT>
62 void r1cs_variable_assignment_write_bytes(
63 const libsnark::r1cs_primary_input<FieldT> &primary,
64 const libsnark::r1cs_auxiliary_input<FieldT> &auxiliary,
67 // Manually write out the aggregation of primary and auxiliary as a single
69 const size_t total_size = primary.size() + auxiliary.size();
70 write_bytes(total_size, out_s);
71 collection_n_write_bytes<
72 libsnark::r1cs_primary_input<FieldT>,
73 field_element_write_bytes>(primary, primary.size(), out_s);
74 collection_n_write_bytes<
75 libsnark::r1cs_primary_input<FieldT>,
76 field_element_write_bytes>(auxiliary, auxiliary.size(), out_s);
79 } // namespace libzeth
81 #endif // __ZETH_SERIALIZATION_R1CS_VARIABLE_ASSIGNMENT_SERIALIZATION_TCC__