bip-schnorr 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46a74af7fff8c807780488e505f4065e7ec3f7ad63a8e5b9ca52f4304f19c9b8
4
- data.tar.gz: f68b54e7158a474a821bac1d62ea1f9cfade33fc81f58a65bc4f5a885f674a61
3
+ metadata.gz: a8680b3084a188b36328a6614f92235ae532fd0126c7e447ac49095a9e8b8a84
4
+ data.tar.gz: d71f6677bed86a690f70069de25b356cdef1e1f7fa36c58e6e19fdaa284d7197
5
5
  SHA512:
6
- metadata.gz: f0a90d133c6afb2015c19e5c93c054bfc744d8fc4d6f9a768fa6c087e37545bb4248e09bd8785ba24915169ca27afadcd0134ce49d59d3c1fda668efd20c89e3
7
- data.tar.gz: 0c22a9a02be20cb9386bab115770e95db0ab9513f2c3bf168439ee22f864a5e50610ed4d8a02f289a7cdec0bde63c9cff01e7f9b713b6f4c796aab750f8b1566
6
+ metadata.gz: facac2fcd1579f7e3bacdbc1d6616311ee731d1c9971d68eacec956eb9683b9e6f89a470a8c0652160da7d91e09085bdf97ec14783356461e7c363a04be0d538
7
+ data.tar.gz: 788aa518466375b03e0ce63df8dd293c59ff82464a0ed2b6b2e46037a29cb0cbed6393b91af04494248e0436ac16422e25c487e32d46c7876977d1dc71cc4e21
@@ -4,7 +4,6 @@ require_relative 'schnorr/ec_point_ext'
4
4
  require_relative 'schnorr/signature'
5
5
 
6
6
  module Schnorr
7
-
8
7
  module_function
9
8
 
10
9
  GROUP = ECDSA::Group::Secp256k1
@@ -17,14 +16,15 @@ module Schnorr
17
16
  # @return (Schnorr::Signature)
18
17
  def sign(message, private_key, aux_rand = SecureRandom.bytes(32))
19
18
  raise 'The message must be a 32-byte array.' unless message.bytesize == 32
20
- d0 = private_key.unpack('H*').first.to_i(16)
19
+
20
+ d0 = private_key.unpack1('H*').to_i(16)
21
21
  raise 'private_key must be an integer in the range 1..n-1.' unless 0 < d0 && d0 <= (GROUP.order - 1)
22
22
  raise 'aux_rand must be 32 bytes.' unless aux_rand.bytesize == 32
23
23
 
24
24
  p = GROUP.new_point(d0)
25
25
  d = p.has_even_y? ? d0 : GROUP.order - d0
26
26
 
27
- t = d ^ tagged_hash('BIP0340/aux', aux_rand).unpack('H*').first.to_i(16)
27
+ t = d ^ tagged_hash('BIP0340/aux', aux_rand).unpack1('H*').to_i(16)
28
28
  t = ECDSA::Format::IntegerOctetString.encode(t, GROUP.byte_length)
29
29
 
30
30
  k0 = ECDSA::Format::IntegerOctetString.decode(tagged_hash('BIP0340/nonce', t + p.encode(true) + message)) % GROUP.order
@@ -36,6 +36,7 @@ module Schnorr
36
36
 
37
37
  sig = Schnorr::Signature.new(r.x, (k + e * d) % GROUP.order)
38
38
  raise 'The created signature does not pass verification.' unless valid_sig?(message, p.encode(true), sig.encode)
39
+
39
40
  sig
40
41
  end
41
42
 
@@ -98,7 +99,6 @@ module Schnorr
98
99
  end
99
100
 
100
101
  class ::Integer
101
-
102
102
  def to_hex
103
103
  hex = to_s(16)
104
104
  hex.rjust((hex.length / 2.0).ceil * 2, '0')
@@ -111,7 +111,8 @@ module Schnorr
111
111
 
112
112
  # alternative implementation of Integer#pow for ruby 2.4 and earlier.
113
113
  def mod_pow(x, y)
114
- return self ** x unless y
114
+ return self**x unless y
115
+
115
116
  b = self
116
117
  result = 1
117
118
  while x > 0
@@ -121,7 +122,5 @@ module Schnorr
121
122
  end
122
123
  result
123
124
  end
124
-
125
125
  end
126
-
127
126
  end
@@ -29,19 +29,22 @@ module ECDSA
29
29
 
30
30
  raise DecodeError, 'Point octet string is empty.' if string.empty?
31
31
 
32
- case string[0].ord
33
- when 0
34
- check_length string, 1
35
- return group.infinity
36
- when 2
37
- decode_compressed string, group, 0
38
- when 3
39
- decode_compressed string, group, 1
40
- when 4
41
- decode_uncompressed string, group
32
+ if string.bytesize == 32
33
+ decode_from_x(string, group)
42
34
  else
43
- return decode_from_x(string, group) if string.bytesize == 32
44
- raise DecodeError, 'Unrecognized start byte for point octet string: 0x%x' % string[0].ord
35
+ case string[0].ord
36
+ when 0
37
+ check_length string, 1
38
+ return group.infinity
39
+ when 2
40
+ decode_compressed string, group, 0
41
+ when 3
42
+ decode_compressed string, group, 1
43
+ when 4
44
+ decode_uncompressed string, group
45
+ else
46
+ raise DecodeError, 'Unrecognized start byte for point octet string: 0x%x' % string[0].ord
47
+ end
45
48
  end
46
49
  end
47
50
 
@@ -22,8 +22,8 @@ module Schnorr
22
22
  # @return (Signature) signature instance.
23
23
  def self.decode(string)
24
24
  raise InvalidSignatureError, 'Invalid schnorr signature length.' unless string.bytesize == 64
25
- r = string[0...32].unpack('H*').first.to_i(16)
26
- s = string[32..-1].unpack('H*').first.to_i(16)
25
+ r = string[0...32].unpack1('H*').to_i(16)
26
+ s = string[32..-1].unpack1('H*').to_i(16)
27
27
  new(r, s)
28
28
  end
29
29
 
@@ -1,3 +1,3 @@
1
1
  module Schnorr
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bip-schnorr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - azuchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-28 00:00:00.000000000 Z
11
+ date: 2020-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ecdsa
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  requirements: []
112
- rubygems_version: 3.1.2
112
+ rubygems_version: 3.0.8
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: The ruby implementation of bip-schnorr.