Allow the verification of signatures and events

Added the methods:
- Event#verify_signature
- Crypto#check_sig!
- Crypto#valid_sig?
- Crypto#sign_message

Fixed a primitive obsession by introducing a Signature class to ensure that signatures are valid Nostr signatures.
This commit is contained in:
Wilson Silva
2024-03-14 22:03:26 +00:00
parent f8893f9b0e
commit 01010c763f
25 changed files with 637 additions and 47 deletions

View File

@@ -7,6 +7,9 @@ module Nostr
def encrypt_text: (PrivateKey, PublicKey, String) -> String
def decrypt_text: (PrivateKey, PublicKey, String) -> String
def sign_event: (Event, PrivateKey) -> Event
def sign_message: (String, PrivateKey) -> Signature
def valid_sig?: (String, PublicKey, Signature) -> bool
def check_sig!: (String, PublicKey, Signature) -> bool
private

View File

@@ -0,0 +1,5 @@
module Nostr
class InvalidSignatureFormatError < SignatureValidationError
def initialize: -> void
end
end

View File

@@ -0,0 +1,5 @@
module Nostr
class InvalidSignatureLengthError < SignatureValidationError
def initialize: -> void
end
end

View File

@@ -0,0 +1,5 @@
module Nostr
class InvalidSignatureTypeError < SignatureValidationError
def initialize: -> void
end
end

View File

@@ -0,0 +1,4 @@
module Nostr
class SignatureValidationError < Error
end
end

View File

@@ -6,7 +6,7 @@ module Nostr
attr_reader tags: Array[Array[String]]
attr_reader content: String
attr_accessor id: String?|nil
attr_accessor sig: String?|nil
attr_accessor sig: Signature?
def initialize: (
pubkey: PublicKey,
@@ -15,7 +15,7 @@ module Nostr
?created_at: Integer,
?tags: Array[Array[String]],
?id: String|nil,
?sig: String|nil
?sig: Signature?
) -> void
def serialize: -> [Integer, String, Integer, Integer, Array[Array[String]], String]
@@ -32,6 +32,7 @@ module Nostr
def ==: (Event other) -> bool
def sign:(PrivateKey) -> Event
def verify_signature: -> bool
def add_event_reference: (String) -> Array[Array[String]]
def add_pubkey_reference: (PublicKey) -> Array[Array[String]]

14
sig/nostr/signature.rbs Normal file
View File

@@ -0,0 +1,14 @@
module Nostr
class Signature < String
FORMAT: Regexp
LENGTH: int
def initialize: (String) -> void
private
attr_reader hex_value: String
def validate: (String) -> nil
end
end