def test_msg_signing(self): msg1 = b'Chancellor on brink of second bailout for banks' msg2 = b'Electrum' def sign_message_with_wif_privkey(wif_privkey, msg): key = PrivateKey.from_WIF(wif_privkey) return key.sign_message(msg) sig1 = sign_message_with_wif_privkey( 'L1TnU2zbNaAqMoVh65Cyvmcjzbrj41Gs9iTLcWbpJCMynXuap6UN', msg1) addr1 = '15hETetDmcXm1mM4sEf7U2KXC9hDHFMSzz' sig2 = sign_message_with_wif_privkey( '5Hxn5C4SQuiV6e62A1MtZmbSeQyrLFhu5uYks62pU5VBUygK2KD', msg2) addr2 = '1GPHVTY8UD9my6jyP4tb2TYJwUbDetyNC6' sig1_b64 = base64.b64encode(sig1) sig2_b64 = base64.b64encode(sig2) self.assertEqual(sig1_b64, b'H/9jMOnj4MFbH3d7t4yCQ9i7DgZU/VZ278w3+ySv2F4yIsdqjsc5ng3kmN8OZAThgyfCZOQxZCWza9V5XzlVY0Y=') self.assertEqual(sig2_b64, b'G84dmJ8TKIDKMT9qBRhpX2sNmR0y5t+POcYnFFJCs66lJmAs3T8A6Sbpx7KA6yTQ9djQMabwQXRrDomOkIKGn18=') self.assertTrue(PublicKey.verify_message_and_address(sig1, msg1, addr1)) self.assertTrue(PublicKey.verify_message_and_address(sig2, msg2, addr2)) self.assertFalse(PublicKey.verify_message_and_address(b'wrong', msg1, addr1)) self.assertFalse(PublicKey.verify_message_and_address(sig2, msg1, addr1))
def get_identified_release_signers(entry): signature_addresses = [ ("rt121212121", "1Bu6ABvLAXn1ARFo1gjq6sogpajGbp6iK6"), ("kyuupichan", "1BH8E3TkuJMCcH5WGD11kVweKZuhh6vb7V"), ] release_version = entry['version'] release_date = entry['date'] release_signatures = entry.get('signatures', []) message = release_version + release_date signed_names = set() for signature in release_signatures: for signer_name, signer_address in signature_addresses: if signer_name not in signed_names: # They are mainnet addresses if PublicKey.verify_message_and_address(signature, message, signer_address): signed_names.add(signer_name) break return signed_names
def verifymessage(self, address, signature, message): """Verify a signature.""" return PublicKey.verify_message_and_address(signature, message, address)