mssmt 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e99668bb044c1670cee5d94e301f8113321c04ce9ac06b697fcfa8eabf1668f9
4
- data.tar.gz: 7928cf9abd46c85c505dc770c2cbcce33e82ce98c2f7f772872792366bcd6eaa
3
+ metadata.gz: 4a2e3088bd53bf09f21064c1ba8f394810e199dfddf72b01fd9d3982271a48d2
4
+ data.tar.gz: 7b4b46b927e1bd6d6a08137955ac2a64e82f4d0cfa86332653c2564e80873ac4
5
5
  SHA512:
6
- metadata.gz: 1b0b1648a73caed3a29c764c688b8077dea1beaa65da3772429470fc1ca1eab352b11128538e0e3b4daa2e8c578452360a562a08bd69bebe3bebadd228070f74
7
- data.tar.gz: 653ad3b9270105b25a9dfea42414918cc0640cdc9359a7c9c01c712ee503f6689d81ee74796510099c3827fae53209fd2a7325392a36541f64b39447482d6e30
6
+ metadata.gz: e975adad70a54abe302e29070be56eca24ed2388ce2d31a92579d39b76fd94a75a9d33a81d34e84cab4175670c04c28c5cf9d2b6a33d80ce897c8bcfc9c69538
7
+ data.tar.gz: 0b2065278888d093490d2293f871871ded6c9e11592a6aaed71afce1451fe5d766eb6573139e4cf2aec930f00d9944b01e6c3ed2ace3924a22aa8581ebeed404
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-3.1.2
1
+ ruby-3.3.1
data/Gemfile CHANGED
@@ -9,7 +9,7 @@ gem 'rake', '~> 13.0'
9
9
 
10
10
  gem 'rspec', '~> 3.0'
11
11
 
12
- gem 'prettier'
12
+ gem 'prettier', '4.0.3'
13
13
 
14
14
  gem 'rubocop-rake'
15
15
  gem 'rubocop-rspec'
@@ -5,6 +5,10 @@ module MSSMT
5
5
  class BranchNode
6
6
  attr_reader :left, :right, :node_hash, :sum
7
7
 
8
+ # Constructor
9
+ # @param [MSSMT::LeafNode|MSSMT::BranchNode] left
10
+ # @param [MSSMT::LeafNode|MSSMT::BranchNode] right
11
+ # @raise [MSSMT::OverflowError]
8
12
  def initialize(left, right)
9
13
  if !left.is_a?(BranchNode) && !left.is_a?(LeafNode)
10
14
  raise ArgumentError, "left must be a branch or leaf node"
@@ -16,8 +20,10 @@ module MSSMT
16
20
  @left = left
17
21
  @right = right
18
22
  @sum = left.sum + right.sum
19
- warn("sum:#{@sum} cause overflow.") if @sum > 0xffffffffffffffff # TODO
20
- @sum = (@sum & 0xffffffffffffffff)
23
+ if @sum > Tree::MAX_SUM_VALUE
24
+ raise OverflowError, "sum: #{sum} is overflow"
25
+ end
26
+
21
27
  @node_hash =
22
28
  Digest::SHA256.digest(
23
29
  "#{left.node_hash}#{right.node_hash}#{[@sum].pack("Q>")}"
@@ -30,5 +36,9 @@ module MSSMT
30
36
  return false unless [BranchNode, ComputedNode].include?(other.class)
31
37
  node_hash == other.node_hash && sum == other.sum
32
38
  end
39
+
40
+ def inspect
41
+ "left: #{left.node_hash.unpack1("H*")}, right: #{right.node_hash.unpack1("H*")}, sum: #{sum}"
42
+ end
33
43
  end
34
44
  end
@@ -6,11 +6,14 @@ module MSSMT
6
6
  attr_reader :node_hash, :sum
7
7
 
8
8
  # Constructor
9
- # @param [String] node_hash node hash with binary fomat.
9
+ # @param [String] node_hash node hash with binary format.
10
10
  # @param [Integer] sum
11
+ # @raise [MSSMT::OverflowError]
11
12
  def initialize(node_hash, sum)
12
13
  @node_hash = node_hash
13
- warn("sum: #{sum} cause overflow.") if sum > 0xffffffffffffffff # TODO
14
+ if sum > Tree::MAX_SUM_VALUE
15
+ raise OverflowError, "sum: #{sum} is overflow"
16
+ end
14
17
  @sum = sum
15
18
  end
16
19
 
@@ -8,10 +8,13 @@ module MSSMT
8
8
  # Constructor
9
9
  # @param [String] value node value with binary format.
10
10
  # @param [Integer] sum integer value associated with the value
11
+ # @raise [MSSMT::OverflowError]
11
12
  def initialize(value, sum)
12
13
  @value = value
13
- warn("sum: #{sum} cause overflow.") if sum > 0xffffffffffffffff # TODO
14
- @sum = sum & 0xffffffffffffffff
14
+ if sum > Tree::MAX_SUM_VALUE
15
+ raise OverflowError, "sum: #{sum} is overflow"
16
+ end
17
+ @sum = sum
15
18
  end
16
19
 
17
20
  # Generate empty leaf node.
data/lib/mssmt/tree.rb CHANGED
@@ -9,6 +9,8 @@ module MSSMT
9
9
  MAX_LEVEL = HASH_SIZE * 8
10
10
  # Index of the last bit for MS-SMT keys
11
11
  LAST_BIT_INDEX = MAX_LEVEL - 1
12
+ # Maximum sum value
13
+ MAX_SUM_VALUE = 0xffffffffffffffff
12
14
 
13
15
  attr_reader :store
14
16
 
data/lib/mssmt/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MSSMT
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.1"
5
5
  end
data/lib/mssmt.rb CHANGED
@@ -8,6 +8,10 @@ module MSSMT
8
8
  class Error < StandardError
9
9
  end
10
10
 
11
+ # Error when sum overflows
12
+ class OverflowError < Error
13
+ end
14
+
11
15
  autoload :Store, "mssmt/store"
12
16
  autoload :LeafNode, "mssmt/leaf_node"
13
17
  autoload :BranchNode, "mssmt/branch_node"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mssmt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - azuchi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-29 00:00:00.000000000 Z
11
+ date: 2024-10-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby implementation of Merkle Sum Sparse Merkle Tree
14
14
  email:
@@ -48,7 +48,7 @@ metadata:
48
48
  homepage_uri: https://github.com/azuchi/mssmtrb
49
49
  source_code_uri: https://github.com/azuchi/mssmtrb
50
50
  changelog_uri: https://github.com/azuchi/mssmtrb
51
- post_install_message:
51
+ post_install_message:
52
52
  rdoc_options: []
53
53
  require_paths:
54
54
  - lib
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
64
  version: '0'
65
65
  requirements: []
66
66
  rubygems_version: 3.3.23
67
- signing_key:
67
+ signing_key:
68
68
  specification_version: 4
69
69
  summary: Ruby implementation of Merkle Sum Sparse Merkle Tree
70
70
  test_files: []