@@ -11,42 +11,20 @@ use crate::stacked::{EncodingProof as VanillaEncodingProof, PublicParams};
1111#[ derive( Debug , Clone ) ]
1212pub struct EncodingProof {
1313 node : Option < u64 > ,
14- encoded_node : Option < Fr > ,
15- // The inner `Option` is for the circuit, the outer to determine if
16- // if we need to encode sth.
17- #[ allow( clippy:: option_option) ]
18- decoded_node : Option < Option < Fr > > ,
1914 parents : Vec < Option < Fr > > ,
2015}
2116
2217impl EncodingProof {
2318 /// Create an empty proof, used in `blank_circuit`s.
24- pub fn empty < H : Hasher > ( params : & PublicParams < H > ) -> Self {
25- EncodingProof {
26- node : None ,
27- encoded_node : None ,
28- decoded_node : None ,
29- parents : vec ! [ None ; params. graph. degree( ) ] ,
30- }
31- }
32-
33- /// Create an empty proof, used in `blank_circuit`s.
34- pub fn empty_base < H : Hasher > ( params : & PublicParams < H > ) -> Self {
35- EncodingProof {
36- node : None ,
37- encoded_node : None ,
38- decoded_node : None ,
39- parents : vec ! [ None ; params. graph. base_graph( ) . degree( ) ] ,
40- }
41- }
42-
43- /// Create an empty proof, used in `blank_circuit`s.
44- pub fn empty_with_decoded < H : Hasher > ( params : & PublicParams < H > ) -> Self {
19+ pub fn empty < H : Hasher > ( params : & PublicParams < H > , layer : usize ) -> Self {
20+ let degree = if layer == 1 {
21+ params. graph . base_graph ( ) . degree ( )
22+ } else {
23+ params. graph . degree ( )
24+ } ;
4525 EncodingProof {
4626 node : None ,
47- encoded_node : None ,
48- decoded_node : Some ( None ) ,
49- parents : vec ! [ None ; params. graph. degree( ) ] ,
27+ parents : vec ! [ None ; degree] ,
5028 }
5129 }
5230
@@ -91,18 +69,38 @@ impl EncodingProof {
9169 )
9270 }
9371
94- pub fn synthesize < CS : ConstraintSystem < Bls12 > > (
72+ pub fn synthesize_key < CS : ConstraintSystem < Bls12 > > (
9573 self ,
9674 mut cs : CS ,
9775 params : & <Bls12 as JubjubEngine >:: Params ,
9876 replica_id : & [ Boolean ] ,
77+ exp_encoded_node : & num:: AllocatedNum < Bls12 > ,
9978 ) -> Result < ( ) , SynthesisError > {
100- let EncodingProof {
79+ let EncodingProof { node, parents } = self ;
80+
81+ let key = Self :: create_key (
82+ cs. namespace ( || "create_key" ) ,
83+ params,
84+ replica_id,
10185 node,
10286 parents,
103- encoded_node,
104- decoded_node,
105- } = self ;
87+ ) ?;
88+
89+ // enforce equality
90+ constraint:: equal ( & mut cs, || "equality_key" , & exp_encoded_node, & key) ;
91+
92+ Ok ( ( ) )
93+ }
94+
95+ pub fn synthesize_decoded < CS : ConstraintSystem < Bls12 > > (
96+ self ,
97+ mut cs : CS ,
98+ params : & <Bls12 as JubjubEngine >:: Params ,
99+ replica_id : & [ Boolean ] ,
100+ exp_encoded_node : & num:: AllocatedNum < Bls12 > ,
101+ decoded_node : & num:: AllocatedNum < Bls12 > ,
102+ ) -> Result < ( ) , SynthesisError > {
103+ let EncodingProof { node, parents } = self ;
106104
107105 let key = Self :: create_key (
108106 cs. namespace ( || "create_key" ) ,
@@ -112,44 +110,26 @@ impl EncodingProof {
112110 parents,
113111 ) ?;
114112
115- let encoded_node = num:: AllocatedNum :: alloc ( cs. namespace ( || "encoded_num" ) , || {
116- encoded_node
117- . map ( Into :: into)
118- . ok_or_else ( || SynthesisError :: AssignmentMissing )
119- } ) ?;
120-
121- let encoded_node_new = if let Some ( decoded_node) = decoded_node {
122- let decoded_num = num:: AllocatedNum :: alloc ( cs. namespace ( || "decoded_num" ) , || {
123- decoded_node
124- . map ( Into :: into)
125- . ok_or_else ( || SynthesisError :: AssignmentMissing )
126- } ) ?;
127- encode ( cs. namespace ( || "encode" ) , & key, & decoded_num) ?
128- } else {
129- key
130- } ;
113+ let encoded_node = encode ( cs. namespace ( || "encode" ) , & key, decoded_node) ?;
131114
132115 // enforce equality
133- constraint:: equal ( & mut cs, || "equality" , & encoded_node_new, & encoded_node) ;
116+ constraint:: equal (
117+ & mut cs,
118+ || "equality_encoded_node" ,
119+ & exp_encoded_node,
120+ & encoded_node,
121+ ) ;
134122
135123 Ok ( ( ) )
136124 }
137125}
138126
139127impl < H : Hasher > From < VanillaEncodingProof < H > > for EncodingProof {
140128 fn from ( vanilla_proof : VanillaEncodingProof < H > ) -> Self {
141- let VanillaEncodingProof {
142- parents,
143- decoded_node,
144- encoded_node,
145- node,
146- ..
147- } = vanilla_proof;
129+ let VanillaEncodingProof { parents, node, .. } = vanilla_proof;
148130
149131 EncodingProof {
150132 node : Some ( node) ,
151- encoded_node : Some ( encoded_node. into_fr ( ) ) ,
152- decoded_node : decoded_node. map ( |n| Some ( n. into_fr ( ) ) ) ,
153133 parents : parents. into_iter ( ) . map ( |p| Some ( p. into ( ) ) ) . collect ( ) ,
154134 }
155135 }
0 commit comments