mirror of
https://github.com/nostr-protocol/nips.git
synced 2024-11-09 22:09:06 -05:00
Initial proposal
This commit is contained in:
parent
92d5837b0c
commit
0f9374e267
51
XX.md
Normal file
51
XX.md
Normal file
|
@ -0,0 +1,51 @@
|
|||
NIP-XX
|
||||
======
|
||||
|
||||
Improved event signing scheme
|
||||
----------------------------------------------------
|
||||
|
||||
`draft` `optional`
|
||||
|
||||
This NIP describes a new event signature scheme that provides greater flexibility
|
||||
than the existing scheme by allowing signing JSONs with arbitrary properties while
|
||||
providing backwards compatibility. It is based on [Perkeep's JSON signing](https://perkeep.org/doc/json-signing/).
|
||||
The signature scheme remains the same as the one described in NIP-01.
|
||||
|
||||
## Signing
|
||||
|
||||
This NIP adds a new signature property to the event object: `sig_v2`.
|
||||
This signature is produced as follows:
|
||||
|
||||
1. Sign and serialize an event as described in NIP-01.
|
||||
2. Remove any trailing whitespace from the serialized string such that the last element is the character `}`.
|
||||
3. Remove the aforementioned `}` character.
|
||||
4. Let `h` be the hex-encoded sha256 hash of what remains of the serialized event after steps 1 to 3.
|
||||
5. Let `s` be the hex-encoded signature of `h`.
|
||||
6. Append `,"sig_v2":"<s>"}`, where `<s>` is replaced with `s`.
|
||||
|
||||
## Verifying
|
||||
|
||||
1. Start with a serialized signed event as described above.
|
||||
2. Find the last occurrence of the substring `,"sig_v2":"<s>"}` in the serialized event.
|
||||
3. Let `h` be the hex-encoded sha256 hash of the string starting from the beginning of the serialized event upto
|
||||
the match location (ending at the character before `,`).
|
||||
5. Take the string from the beggining of the serialized event upto the match location, append a single `}` character and
|
||||
parse it into a JSON object.
|
||||
6. Let `p` be the hex-encoded pubkey provided by the JSON field `pubkey` of the aforementioned object.
|
||||
7. Take the string starting from the match in step 3 until the end of the serialized event, replace the `,` character
|
||||
with `{` and parse it into a JSON object.
|
||||
8. Let `s` be the hex-encoded signature provided by the JSON field `sig_v2` of the aforementioned object.
|
||||
9. Verify that `s` is a valid signature of `h` with public key `p`.
|
||||
|
||||
## Backwards compatibility
|
||||
|
||||
### Relays
|
||||
|
||||
Relays that don't support this NIP can either ignore or remove the unknown fields. In case they are ignored, the relay will not be able to verify
|
||||
that their contents have not been modified. This is not a big concern, since clients that support this NIP will be able to perform
|
||||
the appropriate verification on their end.
|
||||
|
||||
## Clients
|
||||
|
||||
Clients that do not support this NIP can safely ignore the unknown fields. Since there are no NIPs that make use of custom fields at the time
|
||||
of writing, this can only impact future additions to the protocol.
|
Loading…
Reference in New Issue
Block a user