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 +4 -4
- data/lib/bech32/segwit_addr.rb +3 -26
- data/lib/bech32/version.rb +1 -1
- data/lib/bech32.rb +29 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9dfad105c52c27a05e99b0576a46de13aac736914b8172b59766e393531857e
|
4
|
+
data.tar.gz: bdadf23d8b3ea58fbbc6c303ca657e6d151d4096cbb6dfc260d105c2d5b5869e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17c8acca310a4ebc24ba5e4b4f58132d79262ca73d6ebbe6b50952b2f0703c70b915b28500d866af86d3b9f715afdc614ddc2af9feb07d6de5fb16fff68dc16e
|
7
|
+
data.tar.gz: ae1ad3dd861bed9849878241ae9edac81d26980a4cf8a6e911ecb36b7bdc547756404347232aff5608d4b9f24d2b0f6ecfc0e6476c6f37855bfbc2ff0410a8e9
|
data/lib/bech32/segwit_addr.rb
CHANGED
@@ -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]
|
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
|
data/lib/bech32/version.rb
CHANGED
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.
|
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:
|
11
|
+
date: 2022-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|