tests: add test for signmessage with segwit address
This commit is contained in:
@@ -181,20 +181,21 @@ class Test_bitcoin(ElectrumTestCase):
|
|||||||
self.assertEqual(2 * G, inf + 2 * G)
|
self.assertEqual(2 * G, inf + 2 * G)
|
||||||
self.assertEqual(inf, 3 * G + (-3 * G))
|
self.assertEqual(inf, 3 * G + (-3 * G))
|
||||||
|
|
||||||
def test_msg_signing(self):
|
@staticmethod
|
||||||
|
def sign_message_with_wif_privkey(wif_privkey: str, msg: bytes) -> bytes:
|
||||||
|
txin_type, privkey, compressed = deserialize_privkey(wif_privkey)
|
||||||
|
key = ecc.ECPrivkey(privkey)
|
||||||
|
return key.sign_message(msg, compressed)
|
||||||
|
|
||||||
|
def test_signmessage_legacy_address(self):
|
||||||
msg1 = b'Chancellor on brink of second bailout for banks'
|
msg1 = b'Chancellor on brink of second bailout for banks'
|
||||||
msg2 = b'Electrum'
|
msg2 = b'Electrum'
|
||||||
|
|
||||||
def sign_message_with_wif_privkey(wif_privkey, msg):
|
sig1 = self.sign_message_with_wif_privkey(
|
||||||
txin_type, privkey, compressed = deserialize_privkey(wif_privkey)
|
'L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN', msg1) # compressed pubkey
|
||||||
key = ecc.ECPrivkey(privkey)
|
|
||||||
return key.sign_message(msg, compressed)
|
|
||||||
|
|
||||||
sig1 = sign_message_with_wif_privkey(
|
|
||||||
'L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN', msg1)
|
|
||||||
addr1 = '15hETetDmcXm1mM4sEf7U2KXC9hDHFMSzz'
|
addr1 = '15hETetDmcXm1mM4sEf7U2KXC9hDHFMSzz'
|
||||||
sig2 = sign_message_with_wif_privkey(
|
sig2 = self.sign_message_with_wif_privkey(
|
||||||
'5Hxn5C4SQuiV6e62A1MtZmbSeQyrLFhu5uYks62pU5VBUygK2KD', msg2)
|
'5Hxn5C4SQuiV6e62A1MtZmbSeQyrLFhu5uYks62pU5VBUygK2KD', msg2) # uncompressed pubkey
|
||||||
addr2 = '1GPHVTY8UD9my6jyP4tb2TYJwUbDetyNC6'
|
addr2 = '1GPHVTY8UD9my6jyP4tb2TYJwUbDetyNC6'
|
||||||
|
|
||||||
sig1_b64 = base64.b64encode(sig1)
|
sig1_b64 = base64.b64encode(sig1)
|
||||||
@@ -209,6 +210,21 @@ class Test_bitcoin(ElectrumTestCase):
|
|||||||
self.assertFalse(ecc.verify_message_with_address(addr1, b'wrong', msg1))
|
self.assertFalse(ecc.verify_message_with_address(addr1, b'wrong', msg1))
|
||||||
self.assertFalse(ecc.verify_message_with_address(addr1, sig2, msg1))
|
self.assertFalse(ecc.verify_message_with_address(addr1, sig2, msg1))
|
||||||
|
|
||||||
|
def test_signmessage_segwit_witness_v0_address(self):
|
||||||
|
msg = b'Electrum'
|
||||||
|
# p2wpkh-p2sh
|
||||||
|
sig1 = self.sign_message_with_wif_privkey("p2wpkh-p2sh:L1cgMEnShp73r9iCukoPE3MogLeueNYRD9JVsfT1zVHyPBR3KqBY", msg)
|
||||||
|
addr1 = "3DYoBqQ5N6dADzyQjy9FT1Ls4amiYVaqTG"
|
||||||
|
self.assertEqual(base64.b64encode(sig1), b'HyFaND+87TtVbRhkTfT3mPNBCQcJ32XXtNZGW8sFldJsNpOPCegEmdcCf5Thy18hdMH88GLxZLkOby/EwVUuSeA=')
|
||||||
|
self.assertTrue(ecc.verify_message_with_address(addr1, sig1, msg))
|
||||||
|
self.assertFalse(ecc.verify_message_with_address(addr1, sig1, b'heyheyhey'))
|
||||||
|
# p2wpkh
|
||||||
|
sig2 = self.sign_message_with_wif_privkey("p2wpkh:L1cgMEnShp73r9iCukoPE3MogLeueNYRD9JVsfT1zVHyPBR3KqBY", msg)
|
||||||
|
addr2 = "bc1qq2tmmcngng78nllq2pvrkchcdukemtj56uyue0"
|
||||||
|
self.assertEqual(base64.b64encode(sig2), b'HyFaND+87TtVbRhkTfT3mPNBCQcJ32XXtNZGW8sFldJsNpOPCegEmdcCf5Thy18hdMH88GLxZLkOby/EwVUuSeA=')
|
||||||
|
self.assertTrue(ecc.verify_message_with_address(addr2, sig2, msg))
|
||||||
|
self.assertFalse(ecc.verify_message_with_address(addr2, sig2, b'heyheyhey'))
|
||||||
|
|
||||||
@needs_test_with_all_aes_implementations
|
@needs_test_with_all_aes_implementations
|
||||||
def test_decrypt_message(self):
|
def test_decrypt_message(self):
|
||||||
key = WalletStorage.get_eckey_from_password('pw123')
|
key = WalletStorage.get_eckey_from_password('pw123')
|
||||||
|
|||||||
Reference in New Issue
Block a user