1
1
//! This module provides the circuits used in the key exchange protocol.
2
2
3
- use mpz_circuits:: { ops:: add_mod, Circuit , CircuitBuilder } ;
3
+ use mpz_circuits:: { ops:: add_mod, Circuit , CircuitBuilder , Feed , Node } ;
4
4
use std:: sync:: Arc ;
5
5
6
6
/// Circuit for combining additive shares of the PMS, twice
@@ -19,19 +19,41 @@ use std::sync::Arc;
19
19
/// 2. EQ: Equality check of PMS_0 and PMS_1
20
20
pub ( crate ) fn build_pms_circuit ( ) -> Arc < Circuit > {
21
21
let mut builder = CircuitBuilder :: new ( ) ;
22
+
22
23
let share_a0 = ( 0 ..32 * 8 ) . map ( |_| builder. add_input ( ) ) . collect :: < Vec < _ > > ( ) ;
23
24
let share_b0 = ( 0 ..32 * 8 ) . map ( |_| builder. add_input ( ) ) . collect :: < Vec < _ > > ( ) ;
24
25
let share_a1 = ( 0 ..32 * 8 ) . map ( |_| builder. add_input ( ) ) . collect :: < Vec < _ > > ( ) ;
25
26
let share_b1 = ( 0 ..32 * 8 ) . map ( |_| builder. add_input ( ) ) . collect :: < Vec < _ > > ( ) ;
26
27
27
28
let modulus = ( 0 ..32 * 8 ) . map ( |_| builder. add_input ( ) ) . collect :: < Vec < _ > > ( ) ;
28
29
29
- let pms_0 = add_mod ( & mut builder, & share_a0, & share_b0, & modulus) ;
30
+ /// assumes input is provided as big endian
31
+ fn to_little_endian ( input : & [ Node < Feed > ] ) -> Vec < Node < Feed > > {
32
+ let mut be_lsb0_output = vec ! [ ] ;
33
+ for node in input. chunks_exact ( 8 ) . rev ( ) {
34
+ for & bit in node. iter ( ) {
35
+ be_lsb0_output. push ( bit) ;
36
+ }
37
+ }
38
+ be_lsb0_output
39
+ }
40
+
41
+ let pms_0 = add_mod (
42
+ & mut builder,
43
+ & to_little_endian ( & share_a0) ,
44
+ & to_little_endian ( & share_b0) ,
45
+ & to_little_endian ( & modulus) ,
46
+ ) ;
30
47
for node in pms_0. iter ( ) {
31
48
builder. add_output ( * node) ;
32
49
}
33
50
34
- let pms_1 = add_mod ( & mut builder, & share_a1, & share_b1, & modulus) ;
51
+ let pms_1 = add_mod (
52
+ & mut builder,
53
+ & to_little_endian ( & share_a1) ,
54
+ & to_little_endian ( & share_b1) ,
55
+ & to_little_endian ( & modulus) ,
56
+ ) ;
35
57
for node in pms_1. iter ( ) {
36
58
builder. add_output ( * node) ;
37
59
}
0 commit comments