示例#1
0
def pebble_sinks_level(r):
    print ("***************")
    print ("Running pebble_sinks_level("+str(r)+"), starting at "+str(datetime.datetime.now())+".")

    p = pebble.PebbleGraph(r, debug=True)
    pebbling_algos.level_pebble(p, 0)
    print ("The max amount of pebbles used was: " + str(p.max_pebbles) + ".")

    print ("pebble_sinks_level("+str(r)+") completed at "+str(datetime.datetime.now())+".")
    print ("***************")
    p.close_files()
示例#2
0
def merkle_test(r):
    print "***************"
    print "Running merkle_test("+str(r)+"), starting at "+str(datetime.datetime.now())+"."

    p = pebble.PebbleGraph(r, debug=True)
    pebbling_algos.trivial_pebble(p, p.size()-1)
    print "Building Merkle tree..."
    mt = trees.MerkleNode(p.list_values())
    print "Merkle tree setup complete.  Root: "+mt.root()

    print "merkle_test("+str(r)+") completed at "+str(datetime.datetime.now())+"."
    print "***************"
    p.close_files()
示例#3
0
    def __init__(self, r, debug=False):
        self.debug = debug
        if self.debug:
            print "P: Starting up."
        self.r = r
        self.p = pebble.PebbleGraph(r)
        pebbling_algos.trivial_pebble(self.p, self.p.size() - 1)

        # code to build MT
        #self.mt = trees.MerkleNode(self.p.list_values())
        self.mt = shelve.open(filename)
        self.mt["leaf_values"] = self.p.list_values()
        self.mt["leaf_keys"] = trees.MT([0, self.p.size()], self.mt, "")

        if self.debug:
            print "P: Good to go, __init__ completed."
示例#4
0
def pebble_sinks_dfp(r):
    print("***************")
    print("Running pebble_sinks_dfp("+str(r)+"), starting at "+str(datetime.datetime.now())+".")

    p = pebble.PebbleGraph(r, debug=True)
    for i in range(p.size()-2**r, p.size()): # just the sinks
        print("Pebbling vertex "+str(i))
        pebbling_algos.depth_first_pebble(p, i)
        if(p.is_pebbled(i)):
            print("Vertex "+str(i)+" successfully pebbled, using "+str(p.max_pebbles)+" pebble(s) in total.")
        else:
            print "Vertex " + str(i) + " was not successfully pebbled."
        p.reset()

    print("pebble_sinks_dfp("+str(r)+") completed at "+str(datetime.datetime.now())+".")
    print("***************")
    p.close_files()
示例#5
0
def pebble_all_trivial(r):
    print("***************")
    print("Running pebble_all_trivial("+str(r)+").")

    p = pebble.PebbleGraph(r, debug=True)
    for i in range(p.size()):
        print("Pebbling vertex "+str(i))
        pebbling_algos.trivial_pebble(p, i)
        if(p.is_pebbled(i)):
            print("Vertex "+str(i)+" successfully pebbled, using "+str(p.max_pebbles)+" pebble(s) in total.")
        else:
            print "Vertex " + str(i) + " was not successfully pebbled."
        p.reset()

    print("pebble_all_trivial("+str(r)+") completed at "+str(datetime.datetime.now())+".")
    print("***************")
    p.close_files()
示例#6
0
def pebble_graph_trivial(r,
                         print_much=True,
                         pre_gen_graph=False,
                         debug_flag=False):
    if (print_much):
        print "***************"
        print "Running pebble_graph_trivial(" + str(
            r) + ", pre_gen_graph=" + str(
                pre_gen_graph) + "), starting at " + str(
                    datetime.datetime.now()) + "."
    start_generate = time.time()
    p = pebble.PebbleGraph(r,
                           pre_generated_graph=pre_gen_graph,
                           debug=debug_flag)
    end_generate = time.time()
    start_pebble = time.time()
    pebbling_algos.trivial_pebble(p, p.size - 1)
    if p.is_pebbled(p.size - 1) and print_much:
        print "The final vertex in PTC(" + str(
            r) + ") was successfully pebbled."
    if not p.is_pebbled(p.size - 1):
        print "ERROR: The final vertex in PTC(" + str(
            r) + ") was not successfully pebbled."
    if (print_much):
        print "Vertices in graph: " + str(p.size)
        print "Seconds elapsed to generate graph: " + str(end_generate -
                                                          start_generate)
        print "Vertices generated per second: " + str(
            p.size / (end_generate - start_generate))
    print "Seconds elapsed to pebble Butterfly PTC " + str(
        r) + " graph: " + str(time.time() - start_pebble)
    if (print_much):
        print "Vertices pebbled per second: " + str(
            p.size / (time.time() - start_pebble))
        print "Total seconds elapsed: " + str(time.time() - start_generate)
        print "Vertices generated and pebbled per second: " + str(
            p.size / (time.time() - start_generate))
        print "pebble_graph_trivial(" + str(r) + ", pre_gen_graph=" + str(
            pre_gen_graph) + ") completed at " + str(
                datetime.datetime.now()) + "."
        print "***************"
    p.close_files()
示例#7
0
def pebble_graph_trivial(r):
    print "***************"
    print "Running pebble_graph_trivial(" + str(r) + "), starting at " + str(datetime.datetime.now()) + "."
    start_generate = time.time()
    p = pebble.PebbleGraph(r)           # debug is automatically set to false
    end_generate = time.time()
    start_pebble = time.time()
    pebbling_algos.trivial_pebble(p, p.size() - 1)
    if p.is_pebbled(p.size() - 1):
        print "The final vertex in PTC(" + str(r) + ") was successfully pebbled."
    else:
        print "ERROR: The final vertex in PTC(" + str(r) + ") was not successfully pebbled."
    print "Vertices in graph: " + str(p.size())
    print "Seconds elapsed to generate graph: " + str(end_generate - start_generate)
    print "Vertices generated per second: " + str(p.size() / (end_generate - start_generate))
    print "Seconds elapsed to pebble graph: " + str(time.time() - start_pebble)
    print "Vertices pebbled per second: " + str(p.size() / (time.time() - start_pebble))
    print "Total seconds elapsed: " + str(time.time() - start_generate)
    print "Vertices generated and pebbled per second: " + str(p.size() / (time.time() - start_generate))
    print "pebble_graph_trivial(" + str(r) + ") completed at " + str(datetime.datetime.now()) + "."
    print "***************"
    p.close_files()
    def __init__(self, r, pre_gen_graph=False, debug=False):
        self.debug = debug
        if self.debug:
            print "P: Starting up."
        self.r = r
        self.p = pebble.PebbleGraph(r, pre_generated_graph=pre_gen_graph)
        self.ptc_size = self.p.size
        pebbling_algos.trivial_pebble(self.p, self.ptc_size - 1)

        self.merkle_tree_rows = 1
        while (2**(self.merkle_tree_rows - 1) < self.ptc_size):
            self.merkle_tree_rows += 1
        self.merkle_tree_size = 2**(
            self.merkle_tree_rows
        ) - 2  # This is actually one less than the size. It actually stands for the number of the last node numbered 0 - n.

        # Finishes filling bottom row of merkle tree.
        self.p.pebble_value.seek(self.ptc_size * self.p.hash_length)
        for i in range(2**(self.merkle_tree_rows - 1) - self.ptc_size):
            self.p.pebble_value.write("\00" * self.p.hash_length)
        self.merkle_root = ""

        if self.debug:
            print "P: Good to go, __init__ completed."
import pebble
import utils

P = pebble.PebbleGraph(3)  # change 3 to whatever r is supposed to be


# Depth-first pebble method as described in page 10 of the PTC paper.
# B: parent adjacency matrix; v: vertex to be pebbled.
# I'm not 100% sure what S is but it seems to be a set of all the vertices that call on v to be pebbled
def depth_first_pebble(P, v, S):
    if (P.is_source(v)):
        P.pebble(v)
    for u in P.get_parents(v):
        if (not pebbled(u)):
            depth_first_pebble(P, u, utils.union(S, P.get_parents(v)))
    P.pebble(v)
    P.remove_pebbles(utils.complement1(P.size(), S))