@@ -9,10 +9,7 @@ use rayon::prelude::*;
99
1010use crate :: group:: Group ;
1111use crate :: utils:: { xor, xor_inplace} ;
12- use crate :: { decl_prg_trait, Cw , PointFn , Share } ;
13-
14- #[ cfg( feature = "prg" ) ]
15- pub mod prg;
12+ use crate :: { Cw , PointFn , Prg , Share } ;
1613
1714/// Distributed comparison function API.
1815///
@@ -64,22 +61,20 @@ where
6461 }
6562}
6663
67- decl_prg_trait ! ( ( [ u8 ; OUT_BLEN ] , [ u8 ; OUT_BLEN ] , bool ) ) ;
68-
6964/// [`Dcf`] impl.
7065///
7166/// `$\alpha$` itself is not included (or say exclusive endpoint), which means `$f(\alpha)$ = 0`.
7267pub struct DcfImpl < const IN_BLEN : usize , const OUT_BLEN : usize , P >
7368where
74- P : Prg < OUT_BLEN > ,
69+ P : Prg < OUT_BLEN , 2 > ,
7570{
7671 prg : P ,
7772 filter_bitn : usize ,
7873}
7974
8075impl < const IN_BLEN : usize , const OUT_BLEN : usize , P > DcfImpl < IN_BLEN , OUT_BLEN , P >
8176where
82- P : Prg < OUT_BLEN > ,
77+ P : Prg < OUT_BLEN , 2 > ,
8378{
8479 pub fn new ( prg : P ) -> Self {
8580 Self {
@@ -100,7 +95,7 @@ const IDX_R: usize = 1;
10095impl < const IN_BLEN : usize , const OUT_BLEN : usize , P , G > Dcf < IN_BLEN , OUT_BLEN , G >
10196 for DcfImpl < IN_BLEN , OUT_BLEN , P >
10297where
103- P : Prg < OUT_BLEN > ,
98+ P : Prg < OUT_BLEN , 2 > ,
10499 G : Group < OUT_BLEN > ,
105100{
106101 fn gen (
@@ -119,8 +114,8 @@ where
119114 for i in 0 ..n {
120115 // MSB is required since we index from high to low in arrays.
121116 let alpha_i = f. alpha . view_bits :: < Msb0 > ( ) [ i] ;
122- let [ ( s0l, v0l, t0l) , ( s0r, v0r, t0r) ] = self . prg . gen ( & ss_prev[ 0 ] ) ;
123- let [ ( s1l, v1l, t1l) , ( s1r, v1r, t1r) ] = self . prg . gen ( & ss_prev[ 1 ] ) ;
117+ let [ ( [ s0l, v0l] , t0l) , ( [ s0r, v0r] , t0r) ] = self . prg . gen ( & ss_prev[ 0 ] ) ;
118+ let [ ( [ s1l, v1l] , t1l) , ( [ s1r, v1r] , t1r) ] = self . prg . gen ( & ss_prev[ 1 ] ) ;
124119 // MSB is required since we index from high to low in arrays.
125120 let ( keep, lose) = if alpha_i {
126121 ( IDX_R , IDX_L )
@@ -201,7 +196,7 @@ where
201196
202197impl < const IN_BLEN : usize , const OUT_BLEN : usize , P > DcfImpl < IN_BLEN , OUT_BLEN , P >
203198where
204- P : Prg < OUT_BLEN > ,
199+ P : Prg < OUT_BLEN , 2 > ,
205200{
206201 /// Eval with single-threading.
207202 /// See [`Dcf::eval`].
@@ -255,7 +250,7 @@ where
255250
256251 let cw = & k. cws [ layer_i] ;
257252 // `*_hat` before in-place XOR.
258- let [ ( mut sl, vl_hat, mut tl) , ( mut sr, vr_hat, mut tr) ] = self . prg . gen ( & s) ;
253+ let [ ( [ mut sl, vl_hat] , mut tl) , ( [ mut sr, vr_hat] , mut tr) ] = self . prg . gen ( & s) ;
259254 xor_inplace ( & mut sl, & [ if t { & cw. s } else { & [ 0 ; OUT_BLEN ] } ] ) ;
260255 xor_inplace ( & mut sr, & [ if t { & cw. s } else { & [ 0 ; OUT_BLEN ] } ] ) ;
261256 tl ^= t & cw. tl ;
@@ -291,7 +286,7 @@ where
291286 for i in 0 ..n {
292287 let cw = & k. cws [ i] ;
293288 // `*_hat` before in-place XOR.
294- let [ ( mut sl, vl_hat, mut tl) , ( mut sr, vr_hat, mut tr) ] = self . prg . gen ( & s_prev) ;
289+ let [ ( [ mut sl, vl_hat] , mut tl) , ( [ mut sr, vr_hat] , mut tr) ] = self . prg . gen ( & s_prev) ;
295290 xor_inplace ( & mut sl, & [ if t_prev { & cw. s } else { & [ 0 ; OUT_BLEN ] } ] ) ;
296291 xor_inplace ( & mut sr, & [ if t_prev { & cw. s } else { & [ 0 ; OUT_BLEN ] } ] ) ;
297292 tl ^= t_prev & cw. tl ;
@@ -326,9 +321,9 @@ pub enum BoundState {
326321mod tests {
327322 use rand:: prelude:: * ;
328323
329- use super :: prg:: Aes256HirosePrg ;
330324 use super :: * ;
331325 use crate :: group:: byte:: ByteGroup ;
326+ use crate :: prg:: Aes256HirosePrg ;
332327
333328 const KEYS : & [ & [ u8 ; 32 ] ] = & [
334329 b"j9\x1b _\xb3 X\xf3 3\xac W\x15 \x1b \x08 12K\xb3 I\xb9 \x90 r\x1c N\xb5 \xee 9W\xd3 \xbb @\xc6 d" ,
@@ -345,7 +340,7 @@ mod tests {
345340
346341 #[ test]
347342 fn test_dcf_gen_then_eval ( ) {
348- let prg = Aes256HirosePrg :: < 16 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
343+ let prg = Aes256HirosePrg :: < 16 , 2 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
349344 let dcf = DcfImpl :: < 16 , 16 , _ > :: new ( prg) ;
350345 let s0s: [ [ u8 ; 16 ] ; 2 ] = thread_rng ( ) . gen ( ) ;
351346 let f = CmpFn {
@@ -377,7 +372,7 @@ mod tests {
377372
378373 #[ test]
379374 fn test_dcf_gen_gt_beta_then_eval ( ) {
380- let prg = Aes256HirosePrg :: < 16 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
375+ let prg = Aes256HirosePrg :: < 16 , 2 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
381376 let dcf = DcfImpl :: < 16 , 16 , _ > :: new ( prg) ;
382377 let s0s: [ [ u8 ; 16 ] ; 2 ] = thread_rng ( ) . gen ( ) ;
383378 let f = CmpFn {
@@ -409,7 +404,7 @@ mod tests {
409404
410405 #[ test]
411406 fn test_dcf_gen_then_eval_with_filter ( ) {
412- let prg = Aes256HirosePrg :: < 16 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
407+ let prg = Aes256HirosePrg :: < 16 , 2 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
413408 let dcf = DcfImpl :: < 16 , 16 , _ > :: new_with_filter ( prg, 127 ) ;
414409 let s0s: [ [ u8 ; 16 ] ; 2 ] = thread_rng ( ) . gen ( ) ;
415410 let f = CmpFn {
@@ -441,7 +436,7 @@ mod tests {
441436
442437 #[ test]
443438 fn test_dcf_gen_then_eval_not_zeros ( ) {
444- let prg = Aes256HirosePrg :: < 16 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
439+ let prg = Aes256HirosePrg :: < 16 , 2 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
445440 let dcf = DcfImpl :: < 16 , 16 , _ > :: new ( prg) ;
446441 let s0s: [ [ u8 ; 16 ] ; 2 ] = thread_rng ( ) . gen ( ) ;
447442 let f = CmpFn {
@@ -465,7 +460,7 @@ mod tests {
465460 #[ test]
466461 fn test_dcf_full_eval ( ) {
467462 let x: [ u8 ; 2 ] = ALPHAS [ 2 ] [ ..2 ] . try_into ( ) . unwrap ( ) ;
468- let prg = Aes256HirosePrg :: < 16 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
463+ let prg = Aes256HirosePrg :: < 16 , 2 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
469464 let dcf = DcfImpl :: < 2 , 16 , _ > :: new ( prg) ;
470465 let s0s: [ [ u8 ; 16 ] ; 2 ] = thread_rng ( ) . gen ( ) ;
471466 let f = CmpFn {
@@ -491,7 +486,7 @@ mod tests {
491486 #[ test]
492487 fn test_dcf_full_eval_with_filter ( ) {
493488 let x: [ u8 ; 2 ] = ALPHAS [ 2 ] [ ..2 ] . try_into ( ) . unwrap ( ) ;
494- let prg = Aes256HirosePrg :: < 16 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
489+ let prg = Aes256HirosePrg :: < 16 , 2 , 2 > :: new ( std:: array:: from_fn ( |i| KEYS [ i] ) ) ;
495490 let dcf = DcfImpl :: < 2 , 16 , _ > :: new_with_filter ( prg, 15 ) ;
496491 let s0s: [ [ u8 ; 16 ] ; 2 ] = thread_rng ( ) . gen ( ) ;
497492 let f = CmpFn {
0 commit comments