示例#1
0
 def test_grind(self):
     pk = PrivateKey(b"1" * 32)
     msgs = [bytes([i] * 32) for i in range(255)]
     for msg in msgs:
         sig = pk.sign(msg)
         der = sig.serialize()
         # low R is grinded
         self.assertTrue(len(der) <= 70)
示例#2
0
 def test_pubkeys(self):
     valid_keys = [
         (
             b"1" * 32,
             True,
             "036930f46dd0b16d866d59d1054aa63298b357499cd1862ef16f3f55f1cafceb82",
         ),
         (
             b"\x00" * 31 + b"\x01",
             False,
             "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
         ),
     ]
     pub2 = PublicKey.from_string(
         "026930f46dd0b16d866d59d1054aa63298b357499cd1862ef16f3f55f1cafceb82"
     )
     for secret, compressed, sec in valid_keys:
         priv = PrivateKey(secret, compressed=compressed)
         pub = priv.get_public_key()
         # check str works
         str(priv)
         str(pub)
         self.assertEqual(str(pub), sec)
         self.assertEqual(pub, PublicKey.from_string(sec))
         pub.compressed = not pub.compressed
         # compressed and uncompressed are considered different now
         self.assertFalse(pub == PublicKey.from_string(sec))
         s = BytesIO()
         self.assertEqual(pub.write_to(s),
                          33 + 32 * int(not pub.compressed))
         self.assertEqual(priv.write_to(s), 32)
         # round trip
         self.assertEqual(PrivateKey.parse(priv.serialize()), priv)
         self.assertEqual(PublicKey.parse(pub.serialize()), pub)
         # sign random message
         msg = b"5" * 32
         sig = priv.sign(msg)
         self.assertTrue(pub.verify(sig, msg))
         # round trip
         self.assertEqual(Signature.parse(sig.serialize()), sig)
         # checks of the operators
         self.assertEqual(priv < pub, priv.sec() < pub.sec())
         self.assertEqual(priv > pub, priv.sec() > pub.sec())
         self.assertEqual(pub2 < pub, pub2 < priv)
         self.assertEqual(pub2 > pub, pub2 > priv)
         priv == priv
         pub == pub
         self.assertEqual(str(priv), priv.wif())
         self.assertEqual(str(priv), priv.to_base58())
         hash(priv)
         hash(pub)