@@ -17,12 +17,17 @@ fn gen_msg_codeword<F: Field>(
17
17
( random_msg0, codeword0)
18
18
}
19
19
20
- fn vec_add < F : Field > ( vec0 : Vec < F > , vec1 : Vec < F > ) -> Vec < F > {
21
- assert_eq ! ( vec0 . len( ) , vec1 . len( ) ) ;
20
+ fn linear_combine < F : Field > ( vec_s : & Vec < Vec < F > > , scalars : & [ F ] ) -> Vec < F > {
21
+ assert_eq ! ( vec_s . len( ) , scalars . len( ) ) ;
22
22
23
- let mut out = vec ! [ F :: ZERO ; vec0 . len( ) ] ;
23
+ let mut out = vec ! [ F :: ZERO ; vec_s [ 0 ] . len( ) ] ;
24
24
25
- ( 0 ..vec0. len ( ) ) . for_each ( |i| out[ i] = vec0[ i] + vec1[ i] ) ;
25
+ scalars. iter ( ) . enumerate ( ) . for_each ( |( i, scalar) | {
26
+ vec_s[ i]
27
+ . iter ( )
28
+ . zip ( out. iter_mut ( ) )
29
+ . for_each ( |( v_ij, o_j) | * o_j += * v_ij * scalar) ;
30
+ } ) ;
26
31
27
32
out
28
33
}
@@ -49,16 +54,23 @@ fn test_orion_code_generic<F: Field>() {
49
54
50
55
let orion_code = OrionCode :: < F > :: new ( example_orion_code_parameter, & mut rng) ;
51
56
52
- // TODO: linearity to random linear combination over vector spaces
53
- let ( msg0, codeword0) = gen_msg_codeword ( & orion_code, & mut rng) ;
54
- let ( msg1, codeword1) = gen_msg_codeword ( & orion_code, & mut rng) ;
57
+ // TODO: 128 scalars
58
+ let linear_combine_size = 128 ;
55
59
56
- let msg_sum = vec_add ( msg0, msg1) ;
57
- let codeword_sum = vec_add ( codeword0, codeword1) ;
60
+ let random_scalrs: Vec < _ > = ( 0 ..linear_combine_size)
61
+ . map ( |_| F :: random_unsafe ( & mut rng) )
62
+ . collect ( ) ;
63
+
64
+ let ( msgs, codewords) : ( Vec < _ > , Vec < _ > ) = ( 0 ..linear_combine_size)
65
+ . map ( |_| gen_msg_codeword ( & orion_code, & mut rng) )
66
+ . unzip ( ) ;
67
+
68
+ let msg_linear_combined = linear_combine ( & msgs, & random_scalrs) ;
69
+ let codeword_linear_combined = linear_combine ( & codewords, & random_scalrs) ;
58
70
59
- let codeword_computed = orion_code. encode ( & msg_sum ) . unwrap ( ) ;
71
+ let codeword_computed = orion_code. encode ( & msg_linear_combined ) . unwrap ( ) ;
60
72
61
- assert_eq ! ( codeword_sum , codeword_computed) ;
73
+ assert_eq ! ( codeword_linear_combined , codeword_computed) ;
62
74
}
63
75
64
76
#[ test]
0 commit comments