kzg 0.1.0 → 0.2.0

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: 4ef0ee512428138b4158c95a1ff67254af2926668a45e812df640725108a2d9b
4
- data.tar.gz: e1673fafdefa436f0c10aa7639ba68431831777718a38ecd5374101847a41fea
3
+ metadata.gz: 9efdb85768b3e83e464c61846a3cf712b8df989f20114875cb39a08558882736
4
+ data.tar.gz: 39b4c2c8c6a7b77d9fba96e4e8ef297e249da0640b3eba81f18b1093dbc59011
5
5
  SHA512:
6
- metadata.gz: 7a78076f208b2397f6c2dddd271dbe3ed47ba0ae1794b06451647639b70989f10bc5f52d6cd3ef80fe9fd1fe49535bfa3fb4b168402c4a2c87be9ade0cebfb6b
7
- data.tar.gz: dc12b60adf07dd975c05cf44c0b3c01002714d7d11e9f2cee340b1b89097b253386ae9109f4859d1eba28e267928f90f7afe9ea17449ccf8cfa25da293d4b281
6
+ metadata.gz: 88f4f0e4cdd1fa1d954bc32d9546e3cf642f66200649629f3f1dc516970eed44467b6e7a753fafa1951180bcee9f9a6d4b4ce5d17d3427cb2ca0bd1873d39a6d
7
+ data.tar.gz: 35cb803d35ec7ad8e728228779b2e69654bbebfeadc2e744a7a75889d174dd9d3d608c79712e230ddd432e416bf3051e7d16ad579c5d2c50fb1b23437f2c90c4
data/kzg.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  # Uncomment to register a new dependency of your gem
31
31
  # spec.add_dependency "example-gem", "~> 1.0"
32
- spec.add_dependency 'bls12-381', '>= 0.2.1'
32
+ spec.add_dependency 'bls12-381', '>= 0.2.2'
33
33
 
34
34
  # For more information and examples about making a new gem, checkout our
35
35
  # guide at: https://bundler.io/guides/creating_gem.html
@@ -26,7 +26,8 @@ module KZG
26
26
  coeffs
27
27
  .map
28
28
  .with_index do |c, i|
29
- setting.g1_points[i] * (c.is_a?(BLS::Fr) ? c : BLS::Fr.new(c))
29
+ c = c.is_a?(BLS::Fr) ? c : BLS::Fr.new(c)
30
+ c.value.zero? ? BLS::PointG1::ZERO : setting.g1_points[i] * c
30
31
  end
31
32
  .inject(&:+)
32
33
  Commitment.new(setting, KZG::Polynomial.new(coeffs), value)
@@ -37,24 +37,26 @@ module KZG
37
37
  Polynomial.new(coeffs)
38
38
  end
39
39
 
40
- # Evaluates a polynomial expression with the specified value +x+.
41
- # @param [Integer|BLS::Fr] x
42
- # @return [BLS::Fr]
40
+ # Evaluate polynomial for given +x+ using Horner's method.
41
+ # @param [Integer | BLS::Fr] x
42
+ # @return [BLS::Fr] Evaluated value.
43
43
  def eval_at(x)
44
- power = x.is_a?(BLS::Fr) ? x : BLS::Fr.new(x)
45
- sum = coeffs.first
46
- coeffs[1..].each do |c|
47
- sum += c * power
48
- power *= power
44
+ x = x.is_a?(BLS::Fr) ? x : BLS::Fr.new(x)
45
+ return BLS::Fr::ZERO if coeffs.empty?
46
+ return coeffs.first if x.value.zero?
47
+ last = coeffs[coeffs.length - 1]
48
+ (coeffs.length - 2).step(0, -1) do |i|
49
+ tmp = last * x
50
+ last = tmp + coeffs[i]
49
51
  end
50
- sum
52
+ last
51
53
  end
52
54
 
53
55
  # Long polynomial division for two polynomials in coefficient form
54
56
  # @param [Array(BLS::Fr)] divisor Array of divisor.
55
57
  # @return [Array(BLS::Fr)]
56
58
  def poly_long_div(divisor)
57
- a = coeffs
59
+ a = coeffs.dup
58
60
  a_pos = a.length - 1
59
61
  b_pos = divisor.length - 1
60
62
  diff = a_pos - b_pos
data/lib/kzg/setting.rb CHANGED
@@ -34,8 +34,8 @@ module KZG
34
34
  def valid_proof?(commit_point, proof, x, y)
35
35
  x = x.is_a?(BLS::Fr) ? x : BLS::Fr.new(x)
36
36
  y = y.is_a?(BLS::Fr) ? y : BLS::Fr.new(y)
37
- xg2 = BLS::PointG2::BASE * x
38
- yg = BLS::PointG1::BASE * y
37
+ xg2 = x.value.zero? ? BLS::PointG2::ZERO : BLS::PointG2::BASE * x
38
+ yg = y.value.zero? ? BLS::PointG1::ZERO : BLS::PointG1::BASE * y
39
39
 
40
40
  # e([commitment - y]^(-1), [1]) * e([proof], [s - x]) = 1
41
41
  lhs =
data/lib/kzg/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KZG
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kzg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - azuchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-25 00:00:00.000000000 Z
11
+ date: 2023-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bls12-381
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.1
19
+ version: 0.2.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.1
26
+ version: 0.2.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement