class Roma::Routing::MerkleTree

Attributes

dgst_bits[R]
div_bits[R]
tree[R]

Public Class Methods

new(dgst_bits,div_bits) click to toggle source
   # File lib/roma/routing/merkle_tree.rb
12 def initialize(dgst_bits,div_bits)
13   @tree = {}
14   @dgst_bits = dgst_bits
15   @div_bits = div_bits
16   create_tree_instance('0')
17 end

Public Instance Methods

get(id) click to toggle source
   # File lib/roma/routing/merkle_tree.rb
25 def get(id)
26   @tree[id]
27 end
set(vn,nodes) click to toggle source
   # File lib/roma/routing/merkle_tree.rb
19 def set(vn,nodes)
20   id = '0' + (vn >> (@dgst_bits-@div_bits)).to_s(2).rjust(@div_bits,'0')
21   @tree[id] = Digest::SHA1.hexdigest(nodes.to_s)
22   update(parent(id))
23 end
to_vn(id) click to toggle source
   # File lib/roma/routing/merkle_tree.rb
29 def to_vn(id)
30   id[1,id.length].to_i(2) << (@dgst_bits-@div_bits)
31 end

Private Instance Methods

create_tree_instance(id) click to toggle source
   # File lib/roma/routing/merkle_tree.rb
35 def create_tree_instance(id)
36   @tree[id] = 0
37   return if id.length > @div_bits
38   create_tree_instance("#{id}0")
39   create_tree_instance("#{id}1")
40 end
parent(id) click to toggle source
   # File lib/roma/routing/merkle_tree.rb
47 def parent(id)
48   id.chop
49 end
update(id) click to toggle source
   # File lib/roma/routing/merkle_tree.rb
42 def update(id)
43   @tree[id] = Digest::SHA1.hexdigest("#{@tree[id+'0']}:#{@tree[id+'1']}")
44   update(parent(id)) if id.length != 1
45 end