@@ -205,7 +205,6 @@ impl Encodable for KeyManager {
205205 let mut len = Into :: < u32 > :: into ( self . swap_index ) . consensus_encode ( writer) ?;
206206 len += self . bitcoin_account_key . consensus_encode ( writer) ?;
207207 len += self . monero_account_key . consensus_encode ( writer) ?;
208- // TODO: don't add derivations, but test that key manager encoding is correct modulo cached derivations
209208 Ok ( len)
210209 }
211210}
@@ -564,3 +563,45 @@ fn test_keymanager_consensus_encoding() {
564563 key_manager. consensus_encode ( & mut encoder) . unwrap ( ) ;
565564 KeyManager :: consensus_decode ( & mut std:: io:: Cursor :: new ( encoder) ) . unwrap ( ) ;
566565}
566+
567+ #[ test]
568+ fn test_keymanager_restore_index ( ) {
569+ let key_manager = KeyManager :: new ( [ 0 ; 32 ] , 42 ) . unwrap ( ) ;
570+ let mut encoder = Vec :: new ( ) ;
571+ key_manager. consensus_encode ( & mut encoder) . unwrap ( ) ;
572+ let restore = KeyManager :: consensus_decode ( & mut std:: io:: Cursor :: new ( encoder) ) . unwrap ( ) ;
573+ assert_eq ! (
574+ restore. swap_index,
575+ ChildNumber :: from_hardened_idx( 42 ) . unwrap( )
576+ ) ;
577+ }
578+
579+ #[ test]
580+ fn test_keymanager_restore_bitcoin_key ( ) {
581+ let mut key_manager = KeyManager :: new ( [ 0 ; 32 ] , 1 ) . unwrap ( ) ;
582+ let orig_key = key_manager
583+ . get_or_derive_bitcoin_key ( ArbitratingKeyId :: Lock )
584+ . unwrap ( ) ;
585+ let mut encoder = Vec :: new ( ) ;
586+ key_manager. consensus_encode ( & mut encoder) . unwrap ( ) ;
587+ let mut restore = KeyManager :: consensus_decode ( & mut std:: io:: Cursor :: new ( encoder) ) . unwrap ( ) ;
588+ let restored_key = restore
589+ . get_or_derive_bitcoin_key ( ArbitratingKeyId :: Lock )
590+ . unwrap ( ) ;
591+ assert_eq ! ( orig_key, restored_key) ;
592+ }
593+
594+ #[ test]
595+ fn test_keymanager_restore_monero_key ( ) {
596+ let mut key_manager = KeyManager :: new ( [ 0 ; 32 ] , 1 ) . unwrap ( ) ;
597+ let orig_key = key_manager
598+ . get_or_derive_monero_key ( AccordantKeyId :: Spend )
599+ . unwrap ( ) ;
600+ let mut encoder = Vec :: new ( ) ;
601+ key_manager. consensus_encode ( & mut encoder) . unwrap ( ) ;
602+ let mut restore = KeyManager :: consensus_decode ( & mut std:: io:: Cursor :: new ( encoder) ) . unwrap ( ) ;
603+ let restored_key = restore
604+ . get_or_derive_monero_key ( AccordantKeyId :: Spend )
605+ . unwrap ( ) ;
606+ assert_eq ! ( orig_key, restored_key) ;
607+ }
0 commit comments