From 033e1f16a208e860d46cf745ffd931b94d405fa1 Mon Sep 17 00:00:00 2001 From: jeffthibault Date: Tue, 1 Nov 2022 18:37:51 -0400 Subject: [PATCH] add compute_id method to event class --- nostr/event.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/nostr/event.py b/nostr/event.py index 2f9d1f8..f4c435e 100644 --- a/nostr/event.py +++ b/nostr/event.py @@ -25,7 +25,7 @@ class Event(): if not isinstance(content, str): raise TypeError("Argument 'content' must be of type str") - self.id = id if id != None else sha256(Event.serialize(public_key, created_at, kind, tags, content)).hexdigest() + self.id = id if not id is None else Event.compute_id(public_key, created_at, kind, tags, content) self.public_key = public_key self.content = content self.created_at = created_at @@ -39,14 +39,19 @@ class Event(): data_str = json.dumps(data, separators=(',', ':')) return data_str.encode() - def sign(self, sk: str) -> None: - private_key = PrivateKey(bytes.fromhex(sk)) - sig = private_key.schnorr_sign(bytes.fromhex(self.id), None, raw=True) + @staticmethod + def compute_id(public_key: str, created_at: int, kind: int, tags: "list[list[str]]", content: str) -> str: + return sha256(Event.serialize(public_key, created_at, kind, tags, content)).hexdigest() + + def sign(self, private_key_hex: str) -> None: + sk = PrivateKey(bytes.fromhex(private_key_hex)) + sig = sk.schnorr_sign(bytes.fromhex(self.id), None, raw=True) self.signature = sig.hex() def verify(self) -> bool: pub_key = PublicKey(bytes.fromhex("02" + self.public_key), True) # add 02 for schnorr (bip340) - return pub_key.schnorr_verify(bytes.fromhex(self.id), bytes.fromhex(self.signature), None, raw=True) + event_id = Event.compute_id(self.public_key, self.created_at, self.kind, self.tags, self.content) + return pub_key.schnorr_verify(event_id, bytes.fromhex(self.signature), None, raw=True) def to_json_object(self) -> dict: return {