def test_shared_secret(self): p = PrivateKey(bytes(range(32))) p2 = PrivateKey(bytes(range(1, 33))) msg = b'BitcoinSV' P = p.shared_secret(p2.public_key, msg) assert P.to_hex() == '034339a901d8526c4d733c8ea7c861f1a6324f37f6b86f838725820e0c5fc19570' assert P == p.shared_secret(p2.public_key, msg, sha256) assert P == p.shared_secret(p2.public_key, sha256(msg), hasher=None)
def test_verify_recoverable_signature(self): priv = PrivateKey.from_random() message = b'BitcoinSV' sig = priv.sign_recoverable(message) P = priv.public_key assert P.verify_recoverable_signature(sig, message) assert P.verify_recoverable_signature(sig, message, sha256) assert P.verify_recoverable_signature(sig, sha256(message), None) assert not P.verify_recoverable_signature(sig, message[:-1])
def test_sign_recoverable(self): p = PrivateKey(bytes(range(32))) msg = b'BitcoinSV' result = p.sign_recoverable(msg) assert result.hex() == ( '914038d25ac6d195fa8e9b25c6c22a1cb711fde4a11fe305175b52fc77a12040' '2575b92f63cc6b08893cbd6791d41259129c7d9d5162258c19836976871f63bd01' ) assert p.sign_recoverable(msg, hasher=sha256) == result assert p.sign_recoverable(sha256(msg), hasher=None) == result
def test_str(self): p = PrivateKey.from_random() assert str(p) == sha256(p.to_bytes()).hex()
def bad_hasher(data): return sha256(data)[:31]
def test_from_minikey(self, minikey): p = PrivateKey.from_minikey(minikey) assert p._secret == sha256(minikey.encode()) assert p.network() is Bitcoin assert not p.is_compressed()