bech32 1.4.0 → 1.4.1

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: 1e52ce0d1cc8ab59a97a220fc50e134c3c70fcc5beebd83b86631f4a3c6fc39d
4
- data.tar.gz: cbf75c9c25a349c048ee2ad3503d3db8f6631babccdbfb8a7608dd7de9a60ce0
3
+ metadata.gz: c5c153cf694b5bcfc8e09c9aff4439771137dbb558ef082e05f6330763c3eda4
4
+ data.tar.gz: a7397025e69d847ab649a9f276bf0582d11c1f70ab447b60fd1073fdec6c8c63
5
5
  SHA512:
6
- metadata.gz: 399a572833d9f651037a7e49c17917bf1e82521fac556c8cc47e14422ef96b200797124e95d51ac2ac760947fdf6b10c39485cbd1228529b72ad3b46e063f5f0
7
- data.tar.gz: 6cd811fad6a9a6da5853230ff4501be650afc3a1efeb8208b098774f9bd83676e79ad7be433911774f3005b61054f43671623176bfec1a37835d5f24557e1755
6
+ metadata.gz: 9619a2d66ee0f18b6ef974365cba1a2475506a25a369ff6a426b034ed1eae01b1a6566c572481019ec84e2fcf34f0dae143a8d6a8edbb9d27e0bf343f1d4180f
7
+ data.tar.gz: 22550c98747a96c87eb9007ad8e6f99730f7e205574afddd97b296c5338dfc91bd50618ab012853bde479ceea86bc93ff8bfb056555401d2bf5a7de86d433373
data/README.md CHANGED
@@ -153,9 +153,31 @@ The `decode` command takes bech32/bech32m string as arguments and outputs `HRP`,
153
153
 
154
154
  $ bech32 decode genesis1qyfe883hey6jrgj2xvk5g3dfmfqfzm7a4wez4pd2krf7ltsxffd6u6nrvjvv0uzda6whtuhzscj72zuj6udkmknakfn0anc07gaya2303dnngu3sxqctqvg5v7nw0fvkwqce7auqkxv3sj5j7e8d6vu4zy5qlssvffxqccxqcfgwc98zenr3qrzk5msfgkvjnj0ejpl8zunedeqhvajry08ueg99ynwgd2sdntrq22gensffcj03r3yjv4cv4j20ee8vujxve3fssj2demyvknzwe3glqt6t954vknpdvurthpc9fpex7t97nvqryeqpjrpscap6q0zvfpgv3nxzpy6wmx24k9xcu35vuatm5zvn7t084ec7tlw2gh0av9xwumwkv02hats66l5hkwd55rwkm2q8fsd4zvqwpvqqqqtdc6rp
155
155
  HRP: genesis
156
- DATA: 000409190707111719041a120308120a060c161408110d091b090009021b1e1d150e190215010d0a1603091e1f0b100609090d1a1c1a13030c120c0c0f1c020d1d1a0e170b1c17021018121e0a021c121a1c0d161b16131d1609130f1d13180f1e081d041d0a110f110d1313081c11100600180b000c08140c1e130e0f090c160e0018191e1d1c0016060c11101214121e19070d1a0c1c15020414001f10100c09090600181806001809080e180507021913031100030216141b100908160c1213120f1912011f07021c13190d1900170c1d1203040f071c1908050504130e080d0a100d130b03000a0a08191310090918120f11031104120c15180c15120a0f1919070c1c12060c1911091010120a0d191b040c1613020e1911081f000b1a0b0514150c1613010d0c1c030b17011805090119061e0b051e130c00030419000112030110181d011a000f020c0901080c1113060201041a0e1b060a15160506181c11140c1c1d0b1b14020c131e0b0f071519181e0b1f0e0a08170f1d0c05060e1c1b0e160c0f0a171d0b101a1a1f1417160e0d1414030e161b0a000709100d15020c000e010c00000000
156
+ DATA: [0, 4, 9, 25, 7, 7, 17, 23, 25, 4, 26, 18, 3, 8, 18, 10, 6, 12, 22, 20, 8, 17, 13, 9, 27, 9, 0, 9, 2, 27, 30, 29, 21, 14, 25, 2, 21, 1, 13, 10, 22, 3, 9, 30, 31, 11, 16, 6, 9, 9, 13, 26, 28, 26, 19, 3, 12, 18, 12, 12, 15, 28, 2, 13, 29, 26, 14, 23, 11, 28, 23, 2, 16, 24, 18, 30, 10, 2, 28, 18, 26, 28, 13, 22, 27, 22, 19, 29, 22, 9, 19, 15, 29, 19, 24, 15, 30, 8, 29, 4, 29, 10, 17, 15, 17, 13, 19, 19, 8, 28, 17, 16, 6, 0, 24, 11, 0, 12, 8, 20, 12, 30, 19, 14, 15, 9, 12, 22, 14, 0, 24, 25, 30, 29, 28, 0, 22, 6, 12, 17, 16, 18, 20, 18, 30, 25, 7, 13, 26, 12, 28, 21, 2, 4, 20, 0, 31, 16, 16, 12, 9, 9, 6, 0, 24, 24, 6, 0, 24, 9, 8, 14, 24, 5, 7, 2, 25, 19, 3, 17, 0, 3, 2, 22, 20, 27, 16, 9, 8, 22, 12, 18, 19, 18, 15, 25, 18, 1, 31, 7, 2, 28, 19, 25, 13, 25, 0, 23, 12, 29, 18, 3, 4, 15, 7, 28, 25, 8, 5, 5, 4, 19, 14, 8, 13, 10, 16, 13, 19, 11, 3, 0, 10, 10, 8, 25, 19, 16, 9, 9, 24, 18, 15, 17, 3, 17, 4, 18, 12, 21, 24, 12, 21, 18, 10, 15, 25, 25, 7, 12, 28, 18, 6, 12, 25, 17, 9, 16, 16, 18, 10, 13, 25, 27, 4, 12, 22, 19, 2, 14, 25, 17, 8, 31, 0, 11, 26, 11, 5, 20, 21, 12, 22, 19, 1, 13, 12, 28, 3, 11, 23, 1, 24, 5, 9, 1, 25, 6, 30, 11, 5, 30, 19, 12, 0, 3, 4, 25, 0, 1, 18, 3, 1, 16, 24, 29, 1, 26, 0, 15, 2, 12, 9, 1, 8, 12, 17, 19, 6, 2, 1, 4, 26, 14, 27, 6, 10, 21, 22, 5, 6, 24, 28, 17, 20, 12, 28, 29, 11, 27, 20, 2, 12, 19, 30, 11, 15, 7, 21, 25, 24, 30, 11, 31, 14, 10, 8, 23, 15, 29, 12, 5, 6, 14, 28, 27, 14, 22, 12, 15, 10, 23, 29, 11, 16, 26, 26, 31, 20, 23, 22, 14, 13, 20, 20, 3, 14, 22, 27, 10, 0, 7, 9, 16, 13, 21, 2, 12, 0, 14, 1, 12, 0, 0, 0, 0]
157
157
  TYPE: bech32
158
158
 
159
+ Note: `DATA` is not bit-converted.
160
+
161
+ If bech32 string has segwit hrp, it will also output witness version and witness program:
162
+
163
+ $ bech32 decode bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kt5nd6y
164
+ HRP: bc
165
+ DATA: [1, 14, 20, 15, 7, 13, 26, 0, 25, 18, 6, 11, 13, 8, 21, 4, 20, 3, 17, 2, 29, 3, 12, 29, 3, 4, 15, 24, 20, 6, 14, 30, 22, 14, 20, 15, 7, 13, 26, 0, 25, 18, 6, 11, 13, 8, 21, 4, 20, 3, 17, 2, 29, 3, 12, 29, 3, 4, 15, 24, 20, 6, 14, 30, 22]
166
+ TYPE: bech32m
167
+ WITNESS VERSION: 1
168
+ WITNESS PROGRAM: 751e76e8199196d454941c45d1b3a323f1433bd6751e76e8199196d454941c45d1b3a323f1433bd6
169
+
170
+ If bech32 string has NIP-19 hrp, it will also output NIP-19 entry:
171
+
172
+ $ bech32 decode nprofile1qqsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8gpp4mhxue69uhhytnc9e3k7mgpz4mhxue69uhkg6nzv9ejuumpv34kytnrdaksjlyr9p
173
+ HRP: nprofile
174
+ DATA: [0, 0, 16, 3, 23, 28, 6, 6, 7, 31, 5, 25, 6, 17, 17, 20, 0, 30, 23, 25, 15, 9, 15, 5, 29, 25, 18, 15, 21, 2, 1, 29, 2, 1, 31, 15, 19, 25, 10, 24, 8, 28, 22, 4, 29, 14, 13, 10, 21, 27, 29, 4, 11, 7, 8, 1, 1, 21, 27, 23, 6, 28, 25, 26, 5, 28, 23, 23, 4, 11, 19, 24, 5, 25, 17, 22, 30, 27, 8, 1, 2, 21, 27, 23, 6, 28, 25, 26, 5, 28, 23, 22, 8, 26, 19, 2, 12, 5, 25, 18, 28, 28, 27, 1, 12, 17, 21, 22, 4, 11, 19, 3, 13, 29, 22, 16]
175
+ TYPE: bech32
176
+ NIP19 Entities:
177
+ special: 3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d
178
+ relay: wss://r.x.com
179
+ relay: wss://djbas.sadkb.com
180
+
159
181
  ## License
160
182
 
161
183
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/exe/bech32 CHANGED
@@ -18,13 +18,32 @@ class CLI < Thor
18
18
 
19
19
  desc 'decode "bech32string"', 'Decoding bech32/bech32m string.'
20
20
  def decode(bech32_str)
21
- bech32 = Bech32.decode(bech32_str, bech32_str.length)
22
- if bech32
21
+ hrp, data, spec = Bech32.decode(bech32_str, bech32_str.length)
22
+ if hrp
23
23
  puts <<~EOS
24
- HRP: #{bech32[0]}
25
- DATA: #{bech32[1].pack('C*').unpack1('H*')}
26
- TYPE: #{bech32[2] == Bech32::Encoding::BECH32 ? 'bech32' : 'bech32m'}
24
+ HRP: #{hrp}
25
+ DATA: #{data}
26
+ TYPE: #{spec == Bech32::Encoding::BECH32 ? 'bech32' : 'bech32m'}
27
27
  EOS
28
+ if [Bech32::SegwitAddr::HRP_MAINNET, Bech32::SegwitAddr::HRP_TESTNET, Bech32::SegwitAddr::HRP_REGTEST].include?(hrp)
29
+ addr = Bech32::SegwitAddr.new(bech32_str)
30
+ puts <<~EOS
31
+ WITNESS VERSION: #{addr.ver}
32
+ WITNESS PROGRAM: #{addr.prog.pack('C*').unpack1('H*')}
33
+ EOS
34
+ elsif Bech32::Nostr::NIP19::ALL_PREFIXES.include?(hrp)
35
+ entity = Bech32::Nostr::NIP19.decode(bech32_str)
36
+ if entity.is_a?(Bech32::Nostr::BareEntity)
37
+ puts <<~EOS
38
+ NIP19 Entity: #{entity.data}
39
+ EOS
40
+ else
41
+ puts 'NIP19 Entities:'
42
+ entity.entries.each do |entry|
43
+ puts " #{entry.to_s}"
44
+ end
45
+ end
46
+ end
28
47
  else
29
48
  puts 'Can not decode.'
30
49
  end
@@ -47,6 +47,22 @@ module Bech32
47
47
  [type, len].pack('CC') + data
48
48
  end
49
49
 
50
+ def to_s
51
+ type_label = case type
52
+ when TLVEntity::TYPE_SPECIAL
53
+ 'special'
54
+ when TLVEntity::TYPE_RELAY
55
+ 'relay'
56
+ when TLVEntity::TYPE_AUTHOR
57
+ 'author'
58
+ when TLVEntity::TYPE_KIND
59
+ 'kind'
60
+ else
61
+ 'unknown'
62
+ end
63
+ "#{type_label}: #{value}"
64
+ end
65
+
50
66
  private
51
67
 
52
68
  # Check whether +str+ is hex string or not.
@@ -91,7 +107,7 @@ module Bech32
91
107
  # @param [String] data Entity data(binary format).
92
108
  # @return [TLVEntity]
93
109
  def self.parse(hrp, data)
94
- buf = StringIO.new(data)
110
+ buf = ::StringIO.new(data)
95
111
  entries = []
96
112
  until buf.eof?
97
113
  type, len = buf.read(2).unpack('CC')
@@ -1,3 +1,5 @@
1
+ require "stringio"
2
+
1
3
  module Bech32
2
4
  module Nostr
3
5
  module NIP19
@@ -18,7 +20,8 @@ module Bech32
18
20
 
19
21
  # Decode nip19 string.
20
22
  # @param [String] string Bech32 string.
21
- # @return [BareEntity | TLVEntity]
23
+ # @return [BareEntity]
24
+ # @return [TLVEntity]
22
25
  def decode(string)
23
26
  hrp, data, spec = Bech32.decode(string, string.length)
24
27
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bech32
4
- VERSION = '1.4.0'
4
+ VERSION = '1.4.1'
5
5
  end
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.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shigeyuki Azuchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-26 00:00:00.000000000 Z
11
+ date: 2023-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor