Module: Bech32::Nostr::NIP19
- Defined in:
- lib/bech32/nostr/nip19.rb
Constant Summary collapse
- HRP_PUBKEY =
'npub'
- HRP_PRIVATE_KEY =
'nsec'
- HRP_NOTE_ID =
'note'
- HRP_PROFILE =
'nprofile'
- HRP_EVENT =
'nevent'
- HRP_RELAY =
'nrelay'
- HRP_EVENT_COORDINATE =
'naddr'
- BARE_PREFIXES =
[HRP_PUBKEY, HRP_PRIVATE_KEY, HRP_NOTE_ID]
- TLV_PREFIXES =
[HRP_PROFILE, HRP_EVENT, HRP_RELAY, HRP_EVENT_COORDINATE]
- ALL_PREFIXES =
BARE_PREFIXES + TLV_PREFIXES
Class Method Summary collapse
-
.decode(string) ⇒ BareEntity, TLVEntity
Decode nip19 string.
Class Method Details
.decode(string) ⇒ BareEntity, TLVEntity
Decode nip19 string.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/bech32/nostr/nip19.rb', line 25 def decode(string) hrp, data, spec = Bech32.decode(string, string.length) raise ArgumentError, 'Invalid nip19 string.' if hrp.nil? raise ArgumentError, 'Invalid bech32 spec.' unless spec == Bech32::Encoding::BECH32 entity = Bech32.convert_bits(data, 5, 8, false).pack('C*') raise ArgumentError, "Data whose HRP is #{hrp} must be 32 bytes." if BARE_PREFIXES.include?(hrp) && entity.bytesize != 32 if BARE_PREFIXES.include?(hrp) BareEntity.new(hrp, entity.unpack1('H*')) elsif TLV_PREFIXES.include?(hrp) TLVEntity.parse(hrp, entity) else raise ArgumentError, "HRP #{hrp} is unsupported." end end |