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