Ejemplo n.º 1
0
 def test_root_3(self):
     merkle_tree = MerkleTree()
     merkle_tree.add(elements[0])
     merkle_tree.add(elements[1])
     merkle_tree.add(elements[2])
     H01 = H(elements[0] + elements[1])
     self.assertEqual(merkle_tree.root, H(H01 + elements[2]))
Ejemplo n.º 2
0
    def test_proof(self):
        merkle_tree = MerkleTree()
        for el in elements:
            merkle_tree.add(el)

        H01 = H(elements[0] + elements[1])
        H45 = H(elements[4] + elements[5])

        p = merkle_tree.prove_leaf(3)  # H('of')
        self.assertEqual(p[0], elements[2])  # sibling of leaf 3
        self.assertEqual(p[1], H01)
        self.assertEqual(p[2], H45)
Ejemplo n.º 3
0
    def test_set(self):
        new_el = H("something new")
        for i in range(len(elements)):
            # check if the Merkle trees obtained by adding the first i elements, and then setting the i
            # or constructing directing with the first i elements, are identical.
            mt1 = MerkleTree(elements)
            mt1.set(i, new_el)

            elements_modified = elements[:i] + [new_el] + elements[i + 1:]
            mt2 = MerkleTree(elements_modified)

            self.assertMerkleTreesEqual(mt1, mt2)
import unittest
from accumulator.common import H
from accumulator.smart_accumulator import SmartAccumulatorFactory, SmartProver

from .base import BaseAccumulatorTestSuite

plain_elements = ["some", "small", "list", "of", "distinct", "elements"]
elements = [H(el) for el in plain_elements]


class SmartAccumulatorTestSuite(BaseAccumulatorTestSuite, unittest.TestCase):
    """Smart accumulator test cases."""
    def get_instances(self):
        factory = SmartAccumulatorFactory()
        return factory.create_accumulator()

    def test_prover_store_roots(self):
        # Test that SmartProver actually stores the accumulators for all the added elements
        acc, prover, _ = self.get_instances()
        roots = dict()
        for i in range(len(elements)):
            acc.add(elements[i])
            roots[i + 1] = acc.get_root()  # comparing the roots is enough

        for i in range(1, len(elements) + 1):
            self.assertEqual(prover.R[i], roots[i])

    def test_prover_make_tree_indexes(self):
        self.assertListEqual(SmartProver.make_tree_indexes(4), [3, 2, 4])
        self.assertListEqual(SmartProver.make_tree_indexes(5), [5, 2, 4])
        self.assertListEqual(SmartProver.make_tree_indexes(7), [7, 6, 4])