bech32 1.2.1 → 1.3.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: 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