From 3d3a0fa5205a3670fd32750dbce7a1f9623eda51 Mon Sep 17 00:00:00 2001 From: mleku Date: Sun, 7 Sep 2025 21:59:50 +0100 Subject: [PATCH] Refactor `Signer` to use `secp256k1` directly and enhance ACL reconfiguration for admin-triggered events --- app/handle-event.go | 16 +++++++++++++--- pkg/crypto/p256k/btcec/btcec.go | 12 ++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/handle-event.go b/app/handle-event.go index 3a69ebf..9204b0c 100644 --- a/app/handle-event.go +++ b/app/handle-event.go @@ -122,9 +122,19 @@ func (l *Listener) HandleEvent(msg []byte) (err error) { if _, _, err = l.SaveEvent(l.Ctx, env.E); chk.E(err) { return } - // if a follow list was saved, reconfigure ACLs now that it is persisted - if env.E.Kind == kind.FollowList.K { - if err = acl.Registry.Configure(); chk.E(err) { + var isNewFromAdmin bool + for _, admin := range l.Admins { + if utils.FastEqual(admin, env.E.Pubkey) { + isNewFromAdmin = true + break + } + } + if isNewFromAdmin { + // if a follow list was saved, reconfigure ACLs now that it is persisted + if env.E.Kind == kind.FollowList.K || + env.E.Kind == kind.RelayListMetadata.K { + if err = acl.Registry.Configure(); chk.E(err) { + } } } l.publishers.Deliver(env.E) diff --git a/pkg/crypto/p256k/btcec/btcec.go b/pkg/crypto/p256k/btcec/btcec.go index 1920ff8..4a7cbc4 100644 --- a/pkg/crypto/p256k/btcec/btcec.go +++ b/pkg/crypto/p256k/btcec/btcec.go @@ -15,7 +15,7 @@ import ( type Signer struct { SecretKey *secp256k1.SecretKey PublicKey *secp256k1.PublicKey - BTCECSec *ec.SecretKey + BTCECSec *secp256k1.SecretKey pkb, skb []byte } @@ -23,11 +23,11 @@ var _ signer.I = &Signer{} // Generate creates a new Signer. func (s *Signer) Generate() (err error) { - if s.SecretKey, err = ec.NewSecretKey(); chk.E(err) { + if s.SecretKey, err = secp256k1.GenerateSecretKey(); chk.E(err) { return } s.skb = s.SecretKey.Serialize() - s.BTCECSec, _ = ec.PrivKeyFromBytes(s.skb) + s.BTCECSec = secp256k1.PrivKeyFromBytes(s.skb) s.PublicKey = s.SecretKey.PubKey() s.pkb = schnorr.SerializePubKey(s.PublicKey) return @@ -43,7 +43,7 @@ func (s *Signer) InitSec(sec []byte) (err error) { s.SecretKey = secp256k1.SecKeyFromBytes(sec) s.PublicKey = s.SecretKey.PubKey() s.pkb = schnorr.SerializePubKey(s.PublicKey) - s.BTCECSec, _ = ec.PrivKeyFromBytes(s.skb) + s.BTCECSec = secp256k1.PrivKeyFromBytes(s.skb) return } @@ -142,7 +142,7 @@ func (s *Signer) ECDH(pubkeyBytes []byte) (secret []byte, err error) { ); chk.E(err) { return } - secret = ec.GenerateSharedSecret(s.BTCECSec, pub) + secret = secp256k1.GenerateSharedSecret(s.BTCECSec, pub) return } @@ -154,7 +154,7 @@ type Keygen struct { // Generate a new key pair. If the result is suitable, the embedded Signer can have its contents // extracted. func (k *Keygen) Generate() (pubBytes []byte, err error) { - if k.Signer.SecretKey, err = ec.NewSecretKey(); chk.E(err) { + if k.Signer.SecretKey, err = secp256k1.GenerateSecretKey(); chk.E(err) { return } k.Signer.PublicKey = k.SecretKey.PubKey()