@@ -21,6 +21,7 @@ use timeboost_crypto::{DecryptionScheme, Plaintext};
21
21
use timeboost_types:: {
22
22
DecryptionKey , DkgAccumulator , DkgBundle , DkgKeyStore , InclusionList , Subset ,
23
23
} ;
24
+ use timeboost_utils:: ResultIter ;
24
25
use tokio:: spawn;
25
26
use tokio:: sync:: mpsc:: { Receiver , Sender , channel} ;
26
27
use tokio:: task:: JoinHandle ;
@@ -663,24 +664,23 @@ impl Worker {
663
664
// TODO: centralize these constant, redeclared in DkgAccumulator.try_add()
664
665
let aad: & [ u8 ; 3 ] = b"dkg" ;
665
666
let vess = ShoupVess :: new_fast_from ( committee) ;
666
- let ( shares, commitments) = subset
667
- . bundles ( )
668
- . iter ( )
669
- . map ( |b| {
670
- vess. decrypt_share ( & self . dkg_sk , b. vess_ct ( ) , aad)
671
- . map ( |s| ( s, b. comm ( ) . clone ( ) ) )
672
- . map_err ( |e| DecrypterError :: Dkg ( e. to_string ( ) ) )
673
- } )
674
- . collect :: < Result < ( Vec < _ > , Vec < _ > ) > > ( ) ?;
667
+ let mut dealings_iter = ResultIter :: new ( subset. bundles ( ) . iter ( ) . map ( |b| {
668
+ vess. decrypt_share ( & self . dkg_sk , b. vess_ct ( ) , aad)
669
+ . map ( |s| ( s, b. comm ( ) . clone ( ) ) )
670
+ } ) ) ;
675
671
676
672
let dec_sk = DecryptionKey :: from_dkg (
677
673
committee. size ( ) . into ( ) ,
678
674
self . dkg_sk . node_idx ( ) ,
679
- & commitments,
680
- & shares,
675
+ & mut dealings_iter,
681
676
)
682
677
. map_err ( |e| DecrypterError :: Dkg ( e. to_string ( ) ) ) ?;
683
678
679
+ // in case of early-return of ResultIter
680
+ dealings_iter
681
+ . result ( )
682
+ . map_err ( |e| DecrypterError :: Dkg ( e. to_string ( ) ) ) ?;
683
+
684
684
self . enc_key . set ( dec_sk. pubkey ( ) . clone ( ) ) ;
685
685
self . dkg_state = DkgState :: Completed ( dec_sk) ;
686
686
info ! ( committee_id = %committee. id( ) , node = %self . label, "DKG finished (node successfully recovered)" ) ;
@@ -771,24 +771,23 @@ impl Worker {
771
771
// TODO:(alex) centralize these constant, redeclared in DkgAccumulator.try_add()
772
772
let aad: & [ u8 ; 3 ] = b"dkg" ;
773
773
let vess = ShoupVess :: new_fast_from ( committee) ;
774
- let ( shares, commitments) = subset
775
- . bundles ( )
776
- . iter ( )
777
- . map ( |b| {
778
- vess. decrypt_share ( & self . dkg_sk , b. vess_ct ( ) , aad)
779
- . map ( |s| ( s, b. comm ( ) . clone ( ) ) )
780
- . map_err ( |e| DecrypterError :: Dkg ( e. to_string ( ) ) )
781
- } )
782
- . collect :: < Result < ( Vec < _ > , Vec < _ > ) > > ( ) ?;
774
+ let mut dealings_iter = ResultIter :: new ( subset. bundles ( ) . iter ( ) . map ( |b| {
775
+ vess. decrypt_share ( & self . dkg_sk , b. vess_ct ( ) , aad)
776
+ . map ( |s| ( s, b. comm ( ) . clone ( ) ) )
777
+ } ) ) ;
783
778
784
779
let dec_sk = DecryptionKey :: from_dkg (
785
780
committee. size ( ) . into ( ) ,
786
781
self . dkg_sk . node_idx ( ) ,
787
- & commitments,
788
- & shares,
782
+ & mut dealings_iter,
789
783
)
790
784
. map_err ( |e| DecrypterError :: Dkg ( e. to_string ( ) ) ) ?;
791
785
786
+ // in case of early-return of ResultIter
787
+ dealings_iter
788
+ . result ( )
789
+ . map_err ( |e| DecrypterError :: Dkg ( e. to_string ( ) ) ) ?;
790
+
792
791
self . enc_key . set ( dec_sk. pubkey ( ) . clone ( ) ) ;
793
792
self . dkg_state = DkgState :: Completed ( dec_sk) ;
794
793
info ! ( committee_id = %committee. id( ) , node = %self . label, "DKG finished" ) ;
@@ -1419,8 +1418,12 @@ mod tests {
1419
1418
. iter ( )
1420
1419
. enumerate ( )
1421
1420
. map ( |( node_idx, shares) | {
1422
- super :: DecryptionKey :: from_dkg ( COMMITTEE_SIZE , node_idx, & commitments, shares)
1423
- . expect ( "threshold key derivation should succeed" )
1421
+ super :: DecryptionKey :: from_dkg (
1422
+ COMMITTEE_SIZE ,
1423
+ node_idx,
1424
+ shares. iter ( ) . cloned ( ) . zip ( commitments. iter ( ) . cloned ( ) ) ,
1425
+ )
1426
+ . expect ( "threshold key derivation should succeed" )
1424
1427
} )
1425
1428
. collect ( ) ;
1426
1429
tracing:: info!(
0 commit comments