Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
r1cs_pcd_params.tcc
Go to the documentation of this file.
1 /** @file
2  *****************************************************************************
3  * @author This file is part of libsnark, developed by SCIPR Lab
4  * and contributors (see AUTHORS).
5  * @copyright MIT license (see LICENSE file)
6  *****************************************************************************/
7 #ifndef R1CS_PCD_PARAMS_TCC_
8 #define R1CS_PCD_PARAMS_TCC_
9 
10 namespace libsnark
11 {
12 
13 template<typename FieldT>
14 r1cs_primary_input<FieldT> r1cs_pcd_compliance_predicate_primary_input<
15  FieldT>::as_r1cs_primary_input() const
16 {
17  return outgoing_message->as_r1cs_variable_assignment();
18 }
19 
20 template<typename FieldT>
21 r1cs_auxiliary_input<FieldT> r1cs_pcd_compliance_predicate_auxiliary_input<
22  FieldT>::as_r1cs_auxiliary_input(const std::vector<size_t> &
23  incoming_message_payload_lengths) const
24 {
25  const size_t arity = incoming_messages.size();
26 
27  r1cs_auxiliary_input<FieldT> result;
28  result.emplace_back(FieldT(arity));
29 
30  const size_t max_arity = incoming_message_payload_lengths.size();
31  assert(arity <= max_arity);
32 
33  for (size_t i = 0; i < arity; ++i) {
34  const r1cs_variable_assignment<FieldT> msg_as_r1cs_va =
35  incoming_messages[i]->as_r1cs_variable_assignment();
36  assert(
37  msg_as_r1cs_va.size() == (1 + incoming_message_payload_lengths[i]));
38  result.insert(
39  result.end(), msg_as_r1cs_va.begin(), msg_as_r1cs_va.end());
40  }
41 
42  /* pad with dummy messages of appropriate size */
43  for (size_t i = arity; i < max_arity; ++i) {
44  result.resize(
45  result.size() + (1 + incoming_message_payload_lengths[i]),
46  FieldT::zero());
47  }
48 
49  const r1cs_variable_assignment<FieldT> local_data_as_r1cs_va =
50  local_data->as_r1cs_variable_assignment();
51  result.insert(
52  result.end(),
53  local_data_as_r1cs_va.begin(),
54  local_data_as_r1cs_va.end());
55  result.insert(result.end(), witness.begin(), witness.end());
56 
57  return result;
58 }
59 
60 } // namespace libsnark
61 
62 #endif // R1CS_PCD_PARAMS_TCC_