mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 08:27:04 +00:00
A Nostr pubkey is x-only, exactly 32 bytes, but NPub.parse/NProfile.parse never checked the length — they hex-encoded whatever bytes the bech32/TLV carried. A malformed npub/nprofile that some clients encode with the full 33-byte COMPRESSED secp256k1 key (0x02/0x03 prefix) therefore round-tripped its 66-char hex straight into a `p`/`q` tag via the quote/mention path, and a strict relay (relay29 / pyramid.fiatjaf.com) rejected the whole group message: blocked: schema validation failed: tag[..]: invalid pubkey value '02977dcf…c3402' ... pubkey should be 64-char hex We never generate compressed keys ourselves (Nip01Crypto.pubKeyCreate strips the prefix byte); this is purely inbound malformed input. Enforce the 32-byte length at the decode boundary so the bad entity never becomes a mention/quote tag. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B5MLY4hq5LXJ2D5WeLRyXj