Ejemplo n.º 1
0
    def test_xmss(self):
        HEIGHT = 6

        seed = pyqrllib.ucharVector(48, 0)
        xmss = pyqrllib.Xmss(seed=seed, height=HEIGHT)

        print("Seed", len(seed))
        print(pyqrllib.bin2hstr(seed, 48))

        print("PK  ", len(xmss.getPK()))
        print(pyqrllib.bin2hstr(xmss.getPK(), 48))

        print("SK  ", len(xmss.getSK()))
        print(pyqrllib.bin2hstr(xmss.getSK(), 48))

        self.assertIsNotNone(xmss)
        self.assertEqual(xmss.getHeight(), HEIGHT)

        message = pyqrllib.ucharVector([i for i in range(32)])
        print("Msg ", len(message))
        print(pyqrllib.bin2hstr(message, 48))

        # Sign message
        signature = bytearray(xmss.sign(message))

        print("Sig ", len(signature))
        print(pyqrllib.bin2hstr(signature, 128))

        print('----------------------------------------------------------------------')
        # Verify signature
        start = time()
        for i in range(1000):
            self.assertTrue(pyqrllib.Xmss.verify(message,
                                                 signature,
                                                 xmss.getPK()))
        end = time()
        print(end - start)

        # Touch the signature
        signature[100] += 1
        self.assertFalse(pyqrllib.Xmss.verify(message,
                                              signature,
                                              xmss.getPK()))
        signature[100] -= 1
        self.assertTrue(pyqrllib.Xmss.verify(message,
                                             signature,
                                             xmss.getPK()))

        # Touch the message
        message[2] += 1
        self.assertFalse(pyqrllib.Xmss.verify(message,
                                              signature,
                                              xmss.getPK()))
        message[2] -= 1
        self.assertTrue(pyqrllib.Xmss.verify(message,
                                             signature,
                                             xmss.getPK()))
Ejemplo n.º 2
0
    def test_pool(self):
        baseseed = pyqrllib.ucharVector(48, 0)
        pool = pyqrllib.XmssPool(baseseed, 6, 0, 3)
        self.assertFalse(pool.isAvailable())
        self.assertEqual(pool.getCurrentIndex(), 0)

        xmss = pool.getNextTree()
        self.assertEqual(
            "2dcc3803df4475334b29eaa2516d1a9b36bc19eed0542cfbb501bf8de95d939b"
            "25510d9876c7845b4694441bdc0e2be51f3d3f87f0c7775893845f25d49f9ef1",
            pyqrllib.bin2hstr(xmss.getPK()))

        xmss = pool.getNextTree()
        self.assertEqual(
            "be9caeafe11fa52edf722063c18616d6d0c6c30dba3e2c9369a6d9260f76818b"
            "c424a1b6db5f26ef01ffa4aac8a08440d6a569bc56180b06f51b6ff6e4cc1b2e",
            pyqrllib.bin2hstr(xmss.getPK()))

        xmss = pool.getNextTree()
        self.assertEqual(
            "5deb91b1d311ecc8c6954e22f3e140ff3e6c04e40cad50c940e60abba3cf766a"
            "5db9f39f58e532bea6765e4530cb581db1d6afbb7c05da3261ca4db21177afc5",
            pyqrllib.bin2hstr(xmss.getPK()))

        xmss = pool.getNextTree()
        self.assertEqual(
            "ea15c686e7b9691b8bac52ee4d0ed33bd75ec600f55b4476b857858460c2c983"
            "90712040a5e03bca7a46715a90270ac2f8db8694ffa943091edb9018fa1dda04",
            pyqrllib.bin2hstr(xmss.getPK()))
Ejemplo n.º 3
0
    def test_xmss_change_index(self):
        HEIGHT = 4
        seed = pyqrllib.ucharVector(48, 0)
        xmss = pyqrllib.XmssFast(seed, HEIGHT, pyqrllib.SHAKE_128)

        xmss.setIndex(0)
        self.assertEqual(0, xmss.getIndex())
Ejemplo n.º 4
0
    def test_xmss_change_index_high(self):
        HEIGHT = 4
        seed = pyqrllib.ucharVector(48, 0)
        xmss = pyqrllib.XmssFast(seed, HEIGHT, pyqrllib.SHAKE_128)

        with pytest.raises(ValueError):
            xmss.setIndex(16)
Ejemplo n.º 5
0
Archivo: eph.py Proyecto: surg0r/eph
 def verify(self, message, signature, PK):
     data_out = ucharVector(len(signature))
     self.d.sign_open(data_out, signature, PK)
     message_out = bytes(self.d.extract_message(data_out))
     signature_out = self.d.extract_signature(data_out)
     if message_out != message:
         return False
     if len(signature_out) != 2701:
         return False
     return True
Ejemplo n.º 6
0
    def test_xmss_creation_height4(self):
        HEIGHT = 4
        seed = pyqrllib.ucharVector(48, 0)
        xmss = pyqrllib.XmssBasic(seed, HEIGHT)

        expected_address = "01020095f03f084bcb29b96b0529c17ce92c54c1e8290193a93803812ead95e8e6902506b67897"
        expected_PK = "010200c25188b585f731c128e2b457069e" \
                      "afd1e3fa3961605af8c58a1aec4d82ac" \
                      "316d3191da3442686282b3d5160f25cf" \
                      "162a517fd2131f83fbf2698a58f9c46a" \
                      "fc5d"

        self.assertEqual(expected_PK, pyqrllib.bin2hstr(xmss.getPK()))
        self.assertEqual(expected_address, pyqrllib.bin2hstr(xmss.getAddress()))
        self.assertEqual(expected_address, pyqrllib.bin2hstr(pyqrllib.QRLHelper.getAddress(xmss.getPK())))

        descr = pyqrllib.QRLHelper.extractDescriptor(xmss.getPK())
        self.assertEqual(4, descr.getHeight())
        self.assertEqual(pyqrllib.SHAKE_128, descr.getHashFunction())
Ejemplo n.º 7
0
    def test_xmss_creation_height6(self):
        HEIGHT = 6
        seed = pyqrllib.ucharVector(48, 0)
        xmss = pyqrllib.XmssBasic(seed, HEIGHT)

        expected_address = "0103008b0e18dd0bac2c3fdc9a48e10fc466eef899ef074449d12ddf050317b2083527aee74bc3"

        expected_PK = "010300859060f15adc3825adeec85c7483" \
                      "d868e898bc5117d0cff04ab1343916d4" \
                      "07af3191da3442686282b3d5160f25cf" \
                      "162a517fd2131f83fbf2698a58f9c46a" \
                      "fc5d"

        self.assertEqual(expected_PK, pyqrllib.bin2hstr(xmss.getPK()))
        self.assertEqual(expected_address, pyqrllib.bin2hstr(xmss.getAddress()))
        self.assertEqual(expected_address, pyqrllib.bin2hstr(pyqrllib.QRLHelper.getAddress(xmss.getPK())))

        descr = pyqrllib.QRLHelper.extractDescriptor(xmss.getPK())
        self.assertEqual(6, descr.getHeight())
        self.assertEqual(pyqrllib.SHAKE_128, descr.getHashFunction())
Ejemplo n.º 8
0
    def test_dilithium_reference2(self):
        pk = bytes(hstr2bin(self.PK1_HSTR))
        sk = bytes(hstr2bin(self.SK1_HSTR))

        dilithium = Dilithium(pk, sk)

        self.assertEqual(1472, len(dilithium.getPK()))
        self.assertEqual(3504, len(dilithium.getSK()))

        message = bytes(b"This is a test")
        message_signed = dilithium.sign(message)
        data_out = ucharVector(len(message_signed))

        Dilithium.sign_open(data_out, message_signed, dilithium.getPK())

        message_out = Dilithium.extract_message(data_out)
        signature_out = Dilithium.extract_signature(data_out)

        self.assertEqual(2715, len(data_out))
        self.assertEqual(len(message_out), len(message_out))
        self.assertEqual(2701, len(signature_out))

        self.assertEqual(message, bytes(message_out))
        self.assertEqual(b"This is a test", bytes(message_out))
Ejemplo n.º 9
0
    def test_dilithium_reference(self):
        dilithium = Dilithium()

        self.assertEqual(1472, len(dilithium.getPK()))
        self.assertEqual(3504, len(dilithium.getSK()))

        message = bytes(b"This is a test")
        message_signed = dilithium.sign(message)
        data_out = ucharVector(len(message_signed))

        Dilithium.sign_open(data_out, message_signed, dilithium.getPK())

        message_out = Dilithium.extract_message(data_out)
        signature_out = Dilithium.extract_signature(data_out)

        self.assertEqual(2715, len(data_out))
        self.assertEqual(len(message_out), len(message_out))
        self.assertEqual(2701, len(signature_out))

        self.assertEqual(message, bytes(message_out))
        self.assertEqual(b"This is a test", bytes(message_out))

        print(bin2hstr(dilithium.getPK()))
        print(bin2hstr(dilithium.getSK()))
Ejemplo n.º 10
0
    def test_xmss_exception_verify(self):
        message = pyqrllib.ucharVector(48, 0)
        signature = pyqrllib.ucharVector(2287, 0)
        pk = pyqrllib.ucharVector(48, 0)

        self.assertFalse(pyqrllib.XmssFast.verify(message, signature, pk))
Ejemplo n.º 11
0
    def test_xmss_exception_constructor(self):
        HEIGHT = 7
        seed = pyqrllib.ucharVector(48, 0)

        with pytest.raises(ValueError):
            xmss = pyqrllib.XmssFast(seed, HEIGHT, pyqrllib.SHAKE_128)