def test_decrypt_message(self): password = '******' enc_msg = ('QklFMQNkonLnVmRMF3dl+P0rHSbM4lvDPmnE2CFcD+98gGsOe6qtKtmVbCg4' '9bxmT6vfmzl7udrvT81wH1Ri7wZItndtLiNHii6FBNVzoSV/1ZqN3w==') d = Imported_KeyStore({}) pubkey = d.import_privkey("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ", password) dec_msg = d.decrypt_message(pubkey, enc_msg, password) assert dec_msg == b'BitcoinSV'
def test_sign_message(self): password = '******' message = 'BitcoinSV' d = Imported_KeyStore({}) pubkey = d.import_privkey("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ", password) msg_sig = d.sign_message(pubkey, message, password) assert msg_sig.hex() == ( '1c26a18cb236e54bbe7e3db56639ef5cbefcf5a2e28850cdd304970832f84031' 'fc073bed1a151f0510e5558a22d23f16ed8032a1b74ffcac05227c053e1a1d8af5' )
def test_update_password(self): keystore = Imported_KeyStore({'keypairs': keypairs_dict}) keystore.update_password('password', 'new password') pubkey = list(keystore.keypairs.keys())[0] assert keystore.export_private_key(pubkey, 'new password') == ( 'KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617') keystore.update_password('new password', '') assert keystore.export_private_key(pubkey, None) == ( 'KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617') with pytest.raises(InvalidPassword): keystore.export_private_key(pubkey, '')
def test_decrypt_message(self): password = '******' message = b'BitcoinSV' prvkey_text = "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ" enc_prvkey_text = pw_encode(prvkey_text, password) public_key = PrivateKey.from_text(prvkey_text).public_key d = Imported_KeyStore({}) d.import_private_key(1, public_key, enc_prvkey_text) enc_msg = ('QklFMQNkonLnVmRMF3dl+P0rHSbM4lvDPmnE2CFcD+98gGsOe6qtKtmVbCg4' '9bxmT6vfmzl7udrvT81wH1Ri7wZItndtLiNHii6FBNVzoSV/1ZqN3w==') decrypted_message = d.decrypt_message(public_key, enc_msg, password) assert decrypted_message == message
def test_sign_message(self): password = '******' message = 'BitcoinSV' prvkey_text = "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ" enc_prvkey_text = pw_encode(prvkey_text, password) public_key = PrivateKey.from_text(prvkey_text).public_key d = Imported_KeyStore({}) d.import_private_key(1, public_key, enc_prvkey_text) msg_sig = d.sign_message(public_key, message, password) assert msg_sig.hex() == ( '1c26a18cb236e54bbe7e3db56639ef5cbefcf5a2e28850cdd304970832f84031' 'fc073bed1a151f0510e5558a22d23f16ed8032a1b74ffcac05227c053e1a1d8af5' )
def test_update_password(self): keystore = Imported_KeyStore() keystore._keypairs = { PublicKey.from_hex(a): b for a, b in keypairs_dict.items() } keystore.update_password('new password', 'password') pubkey = list(keystore._keypairs.keys())[0] assert keystore.export_private_key(pubkey, 'new password') == ( 'KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617') with pytest.raises(AssertionError): keystore.update_password('', 'new password')
def test_import_privkey(self, WIF, pk_string): enc_prvkey_text = pw_encode(WIF, "password") public_key = PrivateKey.from_text(WIF).public_key d = Imported_KeyStore({}) d.import_private_key(1, public_key, enc_prvkey_text) assert d.get_public_key_for_id(1) == public_key assert WIF == d.export_private_key(public_key, "password")
def test_import_privkey_bad(self, WIF): d = Imported_KeyStore({}) with pytest.raises(Exception): d.import_privkey(WIF, b'')
def test_import_privkey(self, WIF, pk_string): d = Imported_KeyStore({}) pubkey = d.import_privkey(WIF, b'') assert pubkey.to_hex() == pk_string
assert keystore.get_pubkey_derivation( 'fe18863ac1de668decc6406880c4c8d9a74e9986a5e8d9f2be262ac4af8a68863b37d' 'f75ac48afcbb68bdd6a00f58a648bda9e5eb5e73bd51ef130a6e72dc698d001000301' ) is None assert keystore.get_pubkey_derivation("ff") is None # Password b'password'; one minikey, one WIF keypairs_dict = { '02d0de0aaeaefad02b8bdc8a01a1b8b11c696bd3d66a2c5f10780d95b7df42645c': 'tfxSNL1G2aHpNCELs8aGnmB0SvlRHgZ3tXlLmO/XoVPElTo4/Pr+Gx+icCa4Dpjd+HtfhA+5pChRumaQ5QFbzFItC0uQ+ZVtRhr/sRxakrE=', '04e7dd15b4271f8308ff52ad3d3e472b652e78a2c5bc6ed10250a543d28c0128894ae863d086488e6773c4589be93a1793f685dd3f1e8a1f1b390b23470f7d1095': 'NithPh1OqOiALYK0TP4wBdZZOOWVF+wJwBakvlrH7mpho65PVR3DMuC3WAdmyMJ2' } imported_keystore = Imported_KeyStore({ 'keypairs': keypairs_dict, }) class TestImported_KeyStore: @pytest.mark.parametrize("WIF,pk_string", ( ("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ", "04d0de0aaeaefad02b8bdc8a01a1b8b11c696bd3d66a2c5f10780d95b7df42645cd" "85228a6fb29940e858e7e55842ae2bd115d1ed7cc0e82d934e929c97648cb0a"), ("KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617", "02d0de0aaeaefad02b8bdc8a01a1b8b11c696bd3d66a2c5f10780d95b7df42645c"), ("SZEfg4eYxCJoqzumUqP34g", "04e7dd15b4271f8308ff52ad3d3e472b652e78a2c5bc6ed10250a543d28c0128894ae86" "3d086488e6773c4589be93a1793f685dd3f1e8a1f1b390b23470f7d1095"), ("S6c56bnXQiBjk9mqSYE7ykVQ7NzrRy", "04fb4fd5872ff2f8a46c2d496383fccc503c0260ef126ffbac61407f6bd384e5d"
'fe08863ac1de668decc6406880c4c8d9a74e9986a5e8d9f2be262ac4af8a68863b37d' 'f75ac48afcbb68bdd6a00f58a648bda9e5eb5e73bd51ef130a6e72dc698d001000301' )) with pytest.raises(ValueError): keystore.is_signature_candidate(XPublicKey.from_hex( 'fe18863ac1de668decc6406880c4c8d9a74e9986a5e8d9f2be262ac4af8a68863b37d' 'f75ac48afcbb68bdd6a00f58a648bda9e5eb5e73bd51ef130a6e72dc698d001000301' )) # Password b'password'; one minikey, one WIF keypairs_dict = { '02d0de0aaeaefad02b8bdc8a01a1b8b11c696bd3d66a2c5f10780d95b7df42645c': 'tfxSNL1G2aHpNCELs8aGnmB0SvlRHgZ3tXlLmO/XoVPElTo4/Pr+Gx+icCa4Dpjd+HtfhA+5pChRumaQ5QFbzFItC0uQ+ZVtRhr/sRxakrE=', '04e7dd15b4271f8308ff52ad3d3e472b652e78a2c5bc6ed10250a543d28c0128894ae863d086488e6773c4589be93a1793f685dd3f1e8a1f1b390b23470f7d1095': 'NithPh1OqOiALYK0TP4wBdZZOOWVF+wJwBakvlrH7mpho65PVR3DMuC3WAdmyMJ2' } imported_keystore = Imported_KeyStore() imported_keystore._keypairs = { PublicKey.from_hex(a): b for a, b in keypairs_dict.items() } class TestImported_KeyStore: @pytest.mark.parametrize("WIF,pk_string", ( ("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ", "04d0de0aaeaefad02b8bdc8a01a1b8b11c696bd3d66a2c5f10780d95b7df42645cd" "85228a6fb29940e858e7e55842ae2bd115d1ed7cc0e82d934e929c97648cb0a"), ("KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617", "02d0de0aaeaefad02b8bdc8a01a1b8b11c696bd3d66a2c5f10780d95b7df42645c"), ("SZEfg4eYxCJoqzumUqP34g", "04e7dd15b4271f8308ff52ad3d3e472b652e78a2c5bc6ed10250a543d28c0128894ae86" "3d086488e6773c4589be93a1793f685dd3f1e8a1f1b390b23470f7d1095" ), ("S6c56bnXQiBjk9mqSYE7ykVQ7NzrRy",