def test_prefix(self): sk1, vk1 = ed25519.create_keypair() PREFIX = "private0-" p = sk1.to_bytes(PREFIX) # that gives us a binary string with a prefix self.failUnless(p.startswith(PREFIX), repr(p)) sk2 = ed25519.SigningKey(p, prefix=PREFIX) self.failUnlessEqual(sk1, sk2) self.failUnlessEqual(repr(sk1.to_bytes()), repr(sk2.to_bytes())) self.failUnlessRaises(ed25519.BadPrefixError, ed25519.SigningKey, p, prefix="WRONG-") # SigningKey.to_seed() can do a prefix too p = sk1.to_seed(PREFIX) self.failUnless(p.startswith(PREFIX), repr(p)) sk3 = ed25519.SigningKey(p, prefix=PREFIX) self.failUnlessEqual(sk1, sk3) self.failUnlessEqual(repr(sk1.to_bytes()), repr(sk3.to_bytes())) self.failUnlessRaises(ed25519.BadPrefixError, ed25519.SigningKey, p, prefix="WRONG-") # verifying keys can do this too PREFIX = "public0-" p = vk1.to_bytes(PREFIX) self.failUnless(p.startswith(PREFIX), repr(p)) vk2 = ed25519.VerifyingKey(p, prefix=PREFIX) self.failUnlessEqual(vk1, vk2) self.failUnlessEqual(repr(vk1.to_bytes()), repr(vk2.to_bytes())) self.failUnlessRaises(ed25519.BadPrefixError, ed25519.VerifyingKey, p, prefix="WRONG-") # and signatures PREFIX = "sig0-" p = sk1.sign("msg", PREFIX) self.failUnless(p.startswith(PREFIX), repr(p)) vk1.verify(p, "msg", PREFIX) self.failUnlessRaises(ed25519.BadPrefixError, vk1.verify, p, "msg", prefix="WRONG-")
def test_keypair(self): sk, vk = ed25519.create_keypair() self.failUnless(isinstance(sk, ed25519.SigningKey), sk) self.failUnless(isinstance(vk, ed25519.VerifyingKey), vk) sk2, vk2 = ed25519.create_keypair() self.failIfEqual(hexlify(sk.to_bytes()), hexlify(sk2.to_bytes())) # you can control the entropy source def not_so_random(length): return "4" * length sk1, vk1 = ed25519.create_keypair(entropy=not_so_random) self.failUnlessEqual(sk1.to_ascii(encoding="base64"), "NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ") self.failUnlessEqual(vk1.to_ascii(encoding="base64"), "6yzxO/euOl9hQWih+wknLTl3HsS4UjcngV5GbK+O4WM") sk2, vk2 = ed25519.create_keypair(entropy=not_so_random) self.failUnlessEqual(sk1.to_ascii(encoding="base64"), sk2.to_ascii(encoding="base64")) self.failUnlessEqual(vk1.to_ascii(encoding="base64"), vk2.to_ascii(encoding="base64"))