@@ -70,4 +70,52 @@ mod tests {
70
70
let recovered_secret = sskr_combine ( & recovered_shares) . unwrap ( ) ;
71
71
assert_eq ! ( recovered_secret, secret) ;
72
72
}
73
+
74
+ #[ test]
75
+ fn test_split_2_7 ( ) {
76
+ let mut rng = FakeRandomNumberGenerator ;
77
+ let secret = Secret :: new ( hex ! ( "204188bfa6b440a1bdfd6753ff55a8241e07af5c5be943db917e3efabc184b1a" ) ) . unwrap ( ) ;
78
+ let group = GroupSpec :: new ( 2 , 7 ) . unwrap ( ) ;
79
+ let spec = Spec :: new ( 1 , vec ! [ group] ) . unwrap ( ) ;
80
+ let shares = sskr_generate_using ( & spec, & secret, & mut rng) . unwrap ( ) ;
81
+ // println!("shares: {:?}", shares);
82
+ assert_eq ! ( shares. len( ) , 1 ) ;
83
+ assert_eq ! ( shares[ 0 ] . len( ) , 7 ) ;
84
+ let flattened_shares = shares. into_iter ( ) . flatten ( ) . collect :: < Vec < _ > > ( ) ;
85
+ assert_eq ! ( flattened_shares. len( ) , 7 ) ;
86
+ for share in & flattened_shares {
87
+ assert_eq ! ( share. len( ) , METADATA_LENGTH_BYTES + secret. len( ) ) ;
88
+ // println!("share: {}", hex::encode(share));
89
+ }
90
+
91
+ let recovered_share_indexes = vec ! [ 3 , 4 ] ;
92
+ let recovered_shares = recovered_share_indexes. iter ( ) . map ( |index| flattened_shares[ * index] . clone ( ) ) . collect :: < Vec < _ > > ( ) ;
93
+ let recovered_secret = sskr_combine ( & recovered_shares) . unwrap ( ) ;
94
+ assert_eq ! ( recovered_secret, secret) ;
95
+ }
96
+
97
+ #[ test]
98
+ fn test_split_2_3_2_3 ( ) {
99
+ let mut rng = FakeRandomNumberGenerator ;
100
+ let secret = Secret :: new ( hex ! ( "204188bfa6b440a1bdfd6753ff55a8241e07af5c5be943db917e3efabc184b1a" ) ) . unwrap ( ) ;
101
+ let group1 = GroupSpec :: new ( 2 , 3 ) . unwrap ( ) ;
102
+ let group2 = GroupSpec :: new ( 2 , 3 ) . unwrap ( ) ;
103
+ let spec = Spec :: new ( 2 , vec ! [ group1, group2] ) . unwrap ( ) ;
104
+ let shares = sskr_generate_using ( & spec, & secret, & mut rng) . unwrap ( ) ;
105
+ println ! ( "shares: {:?}" , shares) ;
106
+ assert_eq ! ( shares. len( ) , 2 ) ;
107
+ assert_eq ! ( shares[ 0 ] . len( ) , 3 ) ;
108
+ assert_eq ! ( shares[ 1 ] . len( ) , 3 ) ;
109
+ let flattened_shares = shares. into_iter ( ) . flatten ( ) . collect :: < Vec < _ > > ( ) ;
110
+ assert_eq ! ( flattened_shares. len( ) , 6 ) ;
111
+ for share in & flattened_shares {
112
+ assert_eq ! ( share. len( ) , METADATA_LENGTH_BYTES + secret. len( ) ) ;
113
+ println ! ( "share: {}" , hex:: encode( share) ) ;
114
+ }
115
+
116
+ let recovered_share_indexes = vec ! [ 0 , 1 , 3 , 5 ] ;
117
+ let recovered_shares = recovered_share_indexes. iter ( ) . map ( |index| flattened_shares[ * index] . clone ( ) ) . collect :: < Vec < _ > > ( ) ;
118
+ let recovered_secret = sskr_combine ( & recovered_shares) . unwrap ( ) ;
119
+ assert_eq ! ( recovered_secret, secret) ;
120
+ }
73
121
}
0 commit comments