bech32 1.2.1 → 1.3.0

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: 7b6e0eb4edcadc4cbeeb612e0d085bb3caed330ed1c312c1d8465baec26a4923
4
- data.tar.gz: ea2abc8eae17e2b503e091c71402a6f9dbd3f2be7ecd416eed3dcc08be3fccb6
3
+ metadata.gz: b9dfad105c52c27a05e99b0576a46de13aac736914b8172b59766e393531857e
4
+ data.tar.gz: bdadf23d8b3ea58fbbc6c303ca657e6d151d4096cbb6dfc260d105c2d5b5869e
5
5
  SHA512:
6
- metadata.gz: 39d972ba715a32e90cda977d9a6c9a53f5648e760c0afcaf9edd83e1a94ce882a09d0d38d2781a691def7d8595d270d1293f96ae63df22dd981dc23ddaaf6e40
7
- data.tar.gz: a463c2478f923f6b8b27123e5e1af24e0f6ebee5c0593fa02243311b1ca364db7d82ceea1375d9f5078e14cc3adf3bfa6eced482ea86045fa5ec1fc726fcbe47
6
+ metadata.gz: 17c8acca310a4ebc24ba5e4b4f58132d79262ca73d6ebbe6b50952b2f0703c70b915b28500d866af86d3b9f715afdc614ddc2af9feb07d6de5fb16fff68dc16e
7
+ data.tar.gz: ae1ad3dd861bed9849878241ae9edac81d26980a4cf8a6e911ecb36b7bdc547756404347232aff5608d4b9f24d2b0f6ecfc0e6476c6f37855bfbc2ff0410a8e9
@@ -18,7 +18,7 @@ module Bech32
18
18
  # Returns segwit script pubkey which generated from witness version and witness program.
19
19
  def to_script_pubkey
20
20
  v = ver == 0 ? ver : ver + 0x50
21
- ([v, prog.length].pack("CC") + prog.map{|p|[p].pack("C")}.join).unpack('H*').first
21
+ ([v, prog.length] + prog).pack('C*').unpack("H*").first
22
22
  end
23
23
 
24
24
  # parse script pubkey into witness version and witness program
@@ -31,7 +31,7 @@ module Bech32
31
31
  # Returns segwit address string which generated from hrp, witness version and witness program.
32
32
  def addr
33
33
  spec = (ver == 0 ? Bech32::Encoding::BECH32 : Bech32::Encoding::BECH32M)
34
- Bech32.encode(hrp, [ver] + convert_bits(prog, 8, 5), spec)
34
+ Bech32.encode(hrp, [ver] + Bech32.convert_bits(prog, 8, 5), spec)
35
35
  end
36
36
 
37
37
  private
@@ -41,34 +41,11 @@ module Bech32
41
41
  raise 'Invalid address.' if hrp.nil? || data[0].nil? || ![HRP_MAINNET, HRP_TESTNET, HRP_REGTEST].include?(hrp)
42
42
  @ver = data[0]
43
43
  raise 'Invalid witness version' if @ver > 16
44
- @prog = convert_bits(data[1..-1], 5, 8, false)
44
+ @prog = Bech32.convert_bits(data[1..-1], 5, 8, false)
45
45
  raise 'Invalid witness program' if @prog.nil? || @prog.length < 2 || @prog.length > 40
46
46
  raise 'Invalid witness program with version 0' if @ver == 0 && (@prog.length != 20 && @prog.length != 32)
47
47
  raise 'Witness version and encoding spec do not match' if (@ver == 0 && spec != Bech32::Encoding::BECH32) || (@ver != 0 && spec != Bech32::Encoding::BECH32M)
48
48
  end
49
49
 
50
- def convert_bits(data, from, to, padding=true)
51
- acc = 0
52
- bits = 0
53
- ret = []
54
- maxv = (1 << to) - 1
55
- max_acc = (1 << (from + to - 1)) - 1
56
- data.each do |v|
57
- return nil if v < 0 || (v >> from) != 0
58
- acc = ((acc << from) | v) & max_acc
59
- bits += from
60
- while bits >= to
61
- bits -= to
62
- ret << ((acc >> bits) & maxv)
63
- end
64
- end
65
- if padding
66
- ret << ((acc << (to - bits)) & maxv) unless bits == 0
67
- elsif bits >= from || ((acc << (to - bits)) & maxv) != 0
68
- return nil
69
- end
70
- ret
71
- end
72
-
73
50
  end
74
51
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bech32
4
- VERSION = '1.2.1'
4
+ VERSION = '1.3.0'
5
5
  end
data/lib/bech32.rb CHANGED
@@ -86,6 +86,35 @@ module Bech32
86
86
  hrp.each_char.map{|c|c.ord >> 5} + [0] + hrp.each_char.map{|c|c.ord & 31}
87
87
  end
88
88
 
89
+ # Convert a +data+ where each byte is encoding +from+ bits to a byte slice where each byte is encoding +to+ bits.
90
+ # @param [Array] data
91
+ # @param [Integer] from
92
+ # @param [Integer] to
93
+ # @param [Boolean] padding
94
+ # @return [Array]
95
+ def convert_bits(data, from, to, padding=true)
96
+ acc = 0
97
+ bits = 0
98
+ ret = []
99
+ maxv = (1 << to) - 1
100
+ max_acc = (1 << (from + to - 1)) - 1
101
+ data.each do |v|
102
+ return nil if v < 0 || (v >> from) != 0
103
+ acc = ((acc << from) | v) & max_acc
104
+ bits += from
105
+ while bits >= to
106
+ bits -= to
107
+ ret << ((acc >> bits) & maxv)
108
+ end
109
+ end
110
+ if padding
111
+ ret << ((acc << (to - bits)) & maxv) unless bits == 0
112
+ elsif bits >= from || ((acc << (to - bits)) & maxv) != 0
113
+ return nil
114
+ end
115
+ ret
116
+ end
117
+
89
118
  # Compute Bech32 checksum
90
119
  def polymod(values)
91
120
  generator = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bech32
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shigeyuki Azuchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-02 00:00:00.000000000 Z
11
+ date: 2022-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor