11use bc_rand:: RandomNumberGenerator ;
22use bc_shamir:: { split_secret, recover_secret} ;
3- use crate :: { SSKRError , METADATA_SIZE_BYTES , Secret , Spec , share:: SSKRShare } ;
3+ use crate :: { Error , Result , METADATA_SIZE_BYTES , Secret , Spec , share:: SSKRShare } ;
44
55/// Generates SSKR shares for the given `Spec` and `Secret`.
66///
@@ -11,7 +11,7 @@ use crate::{SSKRError, METADATA_SIZE_BYTES, Secret, Spec, share::SSKRShare};
1111pub fn sskr_generate (
1212 spec : & Spec ,
1313 master_secret : & Secret
14- ) -> Result < Vec < Vec < Vec < u8 > > > , SSKRError > {
14+ ) -> Result < Vec < Vec < Vec < u8 > > > > {
1515 let mut rng = bc_rand:: SecureRandomNumberGenerator ;
1616 sskr_generate_using ( spec, master_secret, & mut rng)
1717}
@@ -29,7 +29,7 @@ pub fn sskr_generate_using(
2929 spec : & Spec ,
3030 master_secret : & Secret ,
3131 random_generator : & mut impl RandomNumberGenerator
32- ) -> Result < Vec < Vec < Vec < u8 > > > , SSKRError > {
32+ ) -> Result < Vec < Vec < Vec < u8 > > > > {
3333 let groups_shares = generate_shares ( spec, master_secret, random_generator) ?;
3434
3535 let result: Vec < Vec < Vec < u8 > > > = groups_shares. iter ( ) . map ( |group| {
@@ -49,7 +49,7 @@ pub fn sskr_generate_using(
4949///
5050/// Returns an error if the shares do not meet the necessary quorum of groups
5151/// and member shares within each group.
52- pub fn sskr_combine < T > ( shares : & [ T ] ) -> Result < Secret , SSKRError >
52+ pub fn sskr_combine < T > ( shares : & [ T ] ) -> Result < Secret >
5353where
5454 T : AsRef < [ u8 ] >
5555{
@@ -97,24 +97,24 @@ fn serialize_share(share: &SSKRShare) -> Vec<u8> {
9797 result
9898}
9999
100- fn deserialize_share ( source : & [ u8 ] ) -> Result < SSKRShare , SSKRError > {
100+ fn deserialize_share ( source : & [ u8 ] ) -> Result < SSKRShare > {
101101 if source. len ( ) < METADATA_SIZE_BYTES {
102- return Err ( SSKRError :: ShareLengthInvalid ) ;
102+ return Err ( Error :: ShareLengthInvalid ) ;
103103 }
104104
105105 let group_threshold = ( ( source[ 2 ] >> 4 ) + 1 ) as usize ;
106106 let group_count = ( ( source[ 2 ] & 0xf ) + 1 ) as usize ;
107107
108108 if group_threshold > group_count {
109- return Err ( SSKRError :: GroupThresholdInvalid ) ;
109+ return Err ( Error :: GroupThresholdInvalid ) ;
110110 }
111111
112112 let identifier = ( ( source[ 0 ] as u16 ) << 8 ) | source[ 1 ] as u16 ;
113113 let group_index = ( source[ 3 ] >> 4 ) as usize ;
114114 let member_threshold = ( ( source[ 3 ] & 0xf ) + 1 ) as usize ;
115115 let reserved = source[ 4 ] >> 4 ;
116116 if reserved != 0 {
117- return Err ( SSKRError :: ShareReservedBitsInvalid ) ;
117+ return Err ( Error :: ShareReservedBitsInvalid ) ;
118118 }
119119 let member_index = ( source[ 4 ] & 0xf ) as usize ;
120120 let value = Secret :: new ( & source[ METADATA_SIZE_BYTES ..] ) ?;
@@ -134,22 +134,22 @@ fn generate_shares(
134134 spec : & Spec ,
135135 master_secret : & Secret ,
136136 random_generator : & mut impl RandomNumberGenerator
137- ) -> Result < Vec < Vec < SSKRShare > > , SSKRError > {
137+ ) -> Result < Vec < Vec < SSKRShare > > > {
138138 // assign a random identifier
139139 let mut identifier = [ 0u8 ; 2 ] ;
140140 random_generator. fill_random_data ( & mut identifier) ;
141141 let identifier: u16 = ( ( identifier[ 0 ] as u16 ) << 8 ) | identifier[ 1 ] as u16 ;
142142
143143 let mut groups_shares: Vec < Vec < SSKRShare > > = Vec :: with_capacity ( spec. group_count ( ) ) ;
144144
145- let group_secrets = split_secret ( spec. group_threshold ( ) , spec. group_count ( ) , master_secret. data ( ) , random_generator) . map_err ( SSKRError :: ShamirError ) ?;
145+ let group_secrets = split_secret ( spec. group_threshold ( ) , spec. group_count ( ) , master_secret. data ( ) , random_generator) . map_err ( Error :: ShamirError ) ?;
146146
147147 for ( group_index, group) in spec. groups ( ) . iter ( ) . enumerate ( ) {
148148 let group_secret = & group_secrets[ group_index] ;
149149 let member_secrets = split_secret ( group. member_threshold ( ) , group. member_count ( ) , group_secret, random_generator)
150- . map_err ( SSKRError :: ShamirError ) ?
150+ . map_err ( Error :: ShamirError ) ?
151151 . into_iter ( ) . map ( Secret :: new)
152- . collect :: < Result < Vec < Secret > , _ > > ( ) ?;
152+ . collect :: < Result < Vec < Secret > > > ( ) ?;
153153 let member_sskr_shares: Vec < SSKRShare > = member_secrets. into_iter ( ) . enumerate ( ) . map ( |( member_index, member_secret) | {
154154 SSKRShare :: new (
155155 identifier,
@@ -186,13 +186,13 @@ impl Group {
186186 }
187187}
188188
189- fn combine_shares ( shares : & [ SSKRShare ] ) -> Result < Secret , SSKRError > {
189+ fn combine_shares ( shares : & [ SSKRShare ] ) -> Result < Secret > {
190190 let mut identifier = 0 ;
191191 let mut group_threshold = 0 ;
192192 let mut group_count = 0 ;
193193
194194 if shares. is_empty ( ) {
195- return Err ( SSKRError :: SharesEmpty ) ;
195+ return Err ( Error :: SharesEmpty ) ;
196196 }
197197
198198 let mut next_group = 0 ;
@@ -213,7 +213,7 @@ fn combine_shares(shares: &[SSKRShare]) -> Result<Secret, SSKRError> {
213213 share. group_count ( ) != group_count ||
214214 share. value ( ) . len ( ) != secret_len
215215 {
216- return Err ( SSKRError :: ShareSetInvalid ) ;
216+ return Err ( Error :: ShareSetInvalid ) ;
217217 }
218218 }
219219
@@ -223,11 +223,11 @@ fn combine_shares(shares: &[SSKRShare]) -> Result<Secret, SSKRError> {
223223 if share. group_index ( ) == group. group_index {
224224 group_found = true ;
225225 if share. member_threshold ( ) != group. member_threshold {
226- return Err ( SSKRError :: MemberThresholdInvalid ) ;
226+ return Err ( Error :: MemberThresholdInvalid ) ;
227227 }
228228 for k in 0 ..group. member_indexes . len ( ) {
229229 if share. member_index ( ) == group. member_indexes [ k] {
230- return Err ( SSKRError :: DuplicateMemberIndex ) ;
230+ return Err ( Error :: DuplicateMemberIndex ) ;
231231 }
232232 }
233233 if group. member_indexes . len ( ) < group. member_threshold {
@@ -248,7 +248,7 @@ fn combine_shares(shares: &[SSKRShare]) -> Result<Secret, SSKRError> {
248248
249249 // Check that we have enough groups to recover the master secret
250250 if next_group < group_threshold {
251- return Err ( SSKRError :: NotEnoughGroups ) ;
251+ return Err ( Error :: NotEnoughGroups ) ;
252252 }
253253
254254 // Here, all of the shares are unpacked into member groups. Now we go through each
@@ -275,7 +275,7 @@ fn combine_shares(shares: &[SSKRShare]) -> Result<Secret, SSKRError> {
275275
276276 // If we don't have enough groups to recover the master secret, return an error
277277 if master_indexes. len ( ) < group_threshold {
278- return Err ( SSKRError :: NotEnoughGroups ) ;
278+ return Err ( Error :: NotEnoughGroups ) ;
279279 }
280280
281281 // Recover the master secret
0 commit comments