Esempio n. 1
0
    def test_deserialize_valid_object(self):
        """
        Tests that the same object is recovered when serialized and deserialized
        """
        msg = b'payload'
        nodes = ['A' * 64, 'B' * 64, 'C' * 64, 'D' * 64]

        sig1, sk1, vk1 = self._create_merkle_sig(msg)
        sig2, sk2, vk2 = self._create_merkle_sig(msg)
        sig3, sk3, vk3 = self._create_merkle_sig(msg)
        sig4, sk4, vk4 = self._create_merkle_sig(msg)

        signatures = [sig1, sig2, sig3, sig4]

        bc = BlockContender.create(signatures, nodes)

        bc_ser = bc.serialize()

        clone = BlockContender.from_bytes(bc_ser)

        for i in range(len(signatures)):
            self.assertEqual(bc.signatures[i], clone.signatures[i])

        for i in range(len(nodes)):
            self.assertEqual(bc.merkle_leaves[i], clone.merkle_leaves[i])
Esempio n. 2
0
    def test_create_bc_normal_fields(self):
        msg = b'payload'
        nodes = ['A' * 64, 'B' * 64, 'C' * 64, 'D' * 64]

        sig1, sk1, vk1 = self._create_merkle_sig(msg)
        sig2, sk2, vk2 = self._create_merkle_sig(msg)
        sig3, sk3, vk3 = self._create_merkle_sig(msg)
        sig4, sk4, vk4 = self._create_merkle_sig(msg)

        signatures = [sig1, sig2, sig3, sig4]

        BlockContender.create(signatures, nodes)  # should not throw an error
Esempio n. 3
0
    def test_bc_creation_from_bytes(self):
        msg = b'DEADBEEF'
        nodes = ['A' * 64, 'B' * 64]

        sig1, sk1, vk1 = self._create_merkle_sig(msg)
        sig2, sk2, vk2 = self._create_merkle_sig(msg)
        signatures = [sig1, sig2]

        bc = BlockContender.create(signatures, nodes)

        clone = BlockContender.from_bytes(bc.serialize())

        # assert bc.signatures = signature over all signatures
        for i in range(len(signatures)):
            self.assertTrue(clone.signatures[i] == (signatures[i]))

        for i in range(len(nodes)):
            self.assertTrue(clone.merkle_leaves[i] == (nodes[i]))
Esempio n. 4
0
    def test_eq(self):
        nodes = [secrets.token_bytes(8) for _ in range(4)]
        tree = MerkleTree.from_raw_transactions(nodes)

        msg = tree.root

        sig1, sk1, vk1 = self._create_merkle_sig(msg)
        sig2, sk2, vk2 = self._create_merkle_sig(msg)
        sig3, sk3, vk3 = self._create_merkle_sig(msg)
        sig4, sk4, vk4 = self._create_merkle_sig(msg)

        signatures = [sig1, sig2, sig3, sig4]

        bc1 = BlockContender.create(signatures,
                                    merkle_leaves=tree.leaves_as_hex)
        bc2 = BlockContender.create(signatures,
                                    merkle_leaves=tree.leaves_as_hex)

        self.assertEquals(bc1, bc2)
Esempio n. 5
0
    def test_validate_signatures(self):
        nodes = [secrets.token_bytes(8) for _ in range(4)]
        tree = MerkleTree.from_raw_transactions(nodes)

        msg = tree.root

        sig1, sk1, vk1 = self._create_merkle_sig(msg)
        sig2, sk2, vk2 = self._create_merkle_sig(msg)
        sig3, sk3, vk3 = self._create_merkle_sig(msg)
        sig4, sk4, vk4 = self._create_merkle_sig(msg)

        signatures = [sig1, sig2, sig3, sig4]

        bc = BlockContender.create(signatures,
                                   merkle_leaves=tree.leaves_as_hex)
        is_valid = bc.validate_signatures()

        self.assertTrue(is_valid)
Esempio n. 6
0
    def test_bc_creation(self):
        """
        Tests that a created BlockContender has the expected properties
        """
        msg = b'DEADBEEF'
        nodes = ['A' * 64, 'B' * 64]

        sig1, sk1, vk1 = self._create_merkle_sig(msg)
        sig2, sk2, vk2 = self._create_merkle_sig(msg)
        signatures = [sig1, sig2]

        bc = BlockContender.create(signatures, nodes)

        # assert bc.signatures = signature over all signatures
        for i in range(len(signatures)):
            self.assertTrue(bc.signatures[i] == (signatures[i]))

        for i in range(len(nodes)):
            self.assertTrue(bc.merkle_leaves[i] == (nodes[i]))
Esempio n. 7
0
    def test_bc_creation(self):
        """
        Tests that a created BlockContender has the expected properties
        """
        msg = b'DEADBEEF'
        nodes = [1, 2]

        sig1, sk1, vk1 = self._create_merkle_sig(msg)
        sig2, sk2, vk2 = self._create_merkle_sig(msg)
        signatures = [sig1, sig2]

        bc = BlockContender.create(signatures, nodes)

        # assert bc.signatures = signature over all signatures
        for i in range(len(signatures)):
            self.assertTrue(bc.signatures[i].__eq__(
                signatures[i]))  # __eq__ way to test signatures are equal

        for i in range(len(nodes)):
            self.assertTrue(bc.nodes[i].__eq__(nodes[i]))
Esempio n. 8
0
def _deserialize_contender(block_contender: str) -> BlockContender:
    # Genesis Block Contender is None/Empty and thus should not be deserialized
    if block_contender == GENESIS_BLOCK_CONTENDER:
        return block_contender
    return BlockContender.from_bytes(bytes.fromhex(block_contender))
Esempio n. 9
0
def _serialize_contender(block_contender: BlockContender) -> str:
    hex_str = block_contender.serialize().hex()
    return hex_str