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])
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
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]))
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)
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)
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]))
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]))
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))
def _serialize_contender(block_contender: BlockContender) -> str: hex_str = block_contender.serialize().hex() return hex_str