Пример #1
0
    def test_seed(self):
        # use 32-byte secret
        self.assertRaises(TypeError, Private, secret=123)
        self.assertRaises(TypeError, Private, secret=b"too short")
        secret1 = b"abcdefghijklmnopqrstuvwxyz123456"
        assert len(secret1) == 32
        priv1 = Private(secret=secret1)
        priv1a = Private(secret=secret1)
        priv1b = Private(priv1.serialize())
        self.assertEqual(priv1.serialize(), priv1a.serialize())
        self.assertEqual(priv1.serialize(), priv1b.serialize())
        e = b"6062636465666768696a6b6c6d6e6f707172737475767778797a313233343576"
        self.assertEqual(hexlify(priv1.serialize()), e)

        # the private key is a clamped form of the secret, so they won't
        # quite be the same
        p = Private(secret=b"\x00" * 32)
        self.assertEqual(hexlify(p.serialize()), b"00" * 31 + b"40")
        p = Private(secret=b"\xff" * 32)
        self.assertEqual(hexlify(p.serialize()), b"f8" + b"ff" * 30 + b"7f")

        # use arbitrary-length seed
        self.assertRaises(TypeError, Private, seed=123)
        priv1 = Private(seed=b"abc")
        priv1a = Private(seed=b"abc")
        priv1b = Private(priv1.serialize())
        self.assertEqual(priv1.serialize(), priv1a.serialize())
        self.assertEqual(priv1.serialize(), priv1b.serialize())
        self.assertRaises(AssertionError, Private, seed=b"abc", secret=b"no")

        priv1 = Private(seed=b"abc")
        priv1a = Private(priv1.serialize())
        self.assertEqual(priv1.serialize(), priv1a.serialize())
        self.assertRaises(AssertionError, Private, seed=b"abc", secret=b"no")

        # use built-in os.urandom
        priv2 = Private()
        priv2a = Private(priv2.private)
        self.assertEqual(priv2.serialize(), priv2a.serialize())

        # attempt to use both secret= and seed=, not allowed
        self.assertRaises(AssertionError, Private, seed=b"abc", secret=b"no")
    def test_seed(self):
        # use 32-byte secret
        self.assertRaises(TypeError, Private, secret=123)
        self.assertRaises(TypeError, Private, secret=b"too short")
        secret1 = b"abcdefghijklmnopqrstuvwxyz123456"
        assert len(secret1) == 32
        priv1 = Private(secret=secret1)
        priv1a = Private(secret=secret1)
        priv1b = Private(priv1.serialize())
        self.assertEqual(priv1.serialize(), priv1a.serialize())
        self.assertEqual(priv1.serialize(), priv1b.serialize())
        e = b"6062636465666768696a6b6c6d6e6f707172737475767778797a313233343576"
        self.assertEqual(hexlify(priv1.serialize()), e)

        # the private key is a clamped form of the secret, so they won't
        # quite be the same
        p = Private(secret=b"\x00"*32)
        self.assertEqual(hexlify(p.serialize()), b"00"*31+b"40")
        p = Private(secret=b"\xff"*32)
        self.assertEqual(hexlify(p.serialize()), b"f8"+b"ff"*30+b"7f")

        # use arbitrary-length seed
        self.assertRaises(TypeError, Private, seed=123)
        priv1 = Private(seed=b"abc")
        priv1a = Private(seed=b"abc")
        priv1b = Private(priv1.serialize())
        self.assertEqual(priv1.serialize(), priv1a.serialize())
        self.assertEqual(priv1.serialize(), priv1b.serialize())
        self.assertRaises(AssertionError, Private, seed=b"abc", secret=b"no")

        priv1 = Private(seed=b"abc")
        priv1a = Private(priv1.serialize())
        self.assertEqual(priv1.serialize(), priv1a.serialize())
        self.assertRaises(AssertionError, Private, seed=b"abc", secret=b"no")

        # use built-in os.urandom
        priv2 = Private()
        priv2a = Private(priv2.private)
        self.assertEqual(priv2.serialize(), priv2a.serialize())

        # attempt to use both secret= and seed=, not allowed
        self.assertRaises(AssertionError, Private, seed=b"abc", secret=b"no")