Refactor signer implementation to use p8k package
Some checks failed
Go / build (push) Has been cancelled
Go / release (push) Has been cancelled

- Replaced all instances of p256k1signer with the new p8k.Signer across various modules, including event creation, policy handling, and database interactions.
- Updated related test cases and benchmarks to ensure compatibility with the new signer interface.
- Bumped version to v0.25.0 to reflect these significant changes and improvements in cryptographic operations.
This commit is contained in:
2025-11-04 20:05:19 +00:00
parent effb3fafc1
commit e0a95ca1cd
70 changed files with 8667 additions and 124 deletions

View File

@@ -5,12 +5,12 @@ import (
"lol.mleku.dev/chk"
"lol.mleku.dev/log"
p256k1signer "p256k1.mleku.dev/signer"
"next.orly.dev/pkg/interfaces/signer/p8k"
)
func TestCreateUnsigned(t *testing.T) {
var err error
signer := p256k1signer.NewP256K1Signer()
signer := p8k.MustNew()
if err = signer.Generate(); chk.E(err) {
t.Fatal(err)
}

View File

@@ -7,14 +7,14 @@ import (
"lol.mleku.dev/chk"
"next.orly.dev/pkg/crypto/ec/secp256k1"
p256k1signer "p256k1.mleku.dev/signer"
"next.orly.dev/pkg/encoders/bech32encoding"
"next.orly.dev/pkg/interfaces/signer/p8k"
"next.orly.dev/pkg/protocol/directory"
)
// Helper to create a test keypair using p256k1signer.P256K1Signer
func createTestKeypair(t *testing.T) (*p256k1signer.P256K1Signer, []byte) {
signer := p256k1signer.NewP256K1Signer()
// Helper to create a test keypair using p8k.Signer
func createTestKeypair(t *testing.T) (*p8k.Signer, []byte) {
signer := p8k.MustNew()
if err := signer.Generate(); chk.E(err) {
t.Fatalf("failed to generate keypair: %v", err)
}

View File

@@ -12,6 +12,7 @@ import (
"lol.mleku.dev/errorf"
"next.orly.dev/pkg/crypto/ec/schnorr"
"next.orly.dev/pkg/crypto/ec/secp256k1"
"next.orly.dev/pkg/interfaces/signer/p8k"
"next.orly.dev/pkg/encoders/bech32encoding"
"next.orly.dev/pkg/encoders/event"
)
@@ -30,10 +31,21 @@ func NewIdentityTagBuilder(identityPrivkey []byte) (builder *IdentityTagBuilder,
return nil, errorf.E("identity private key must be 32 bytes")
}
// Derive public key from secret key
identitySecKey := secp256k1.SecKeyFromBytes(identityPrivkey)
identityPubkey := identitySecKey.PubKey()
identityPubkeyBytes := schnorr.SerializePubKey(identityPubkey)
// Derive public key from secret key using p8k signer
var signer *p8k.Signer
if signer, err = p8k.New(); chk.E(err) {
return nil, errorf.E("failed to create signer: %w", err)
}
if err = signer.InitSec(identityPrivkey); chk.E(err) {
return nil, errorf.E("failed to initialize signer: %w", err)
}
identityPubkeyBytes := signer.Pub()
// Parse public key for npub encoding
var identityPubkey *secp256k1.PublicKey
if identityPubkey, err = schnorr.ParsePubKey(identityPubkeyBytes); chk.E(err) {
return nil, errorf.E("failed to parse public key: %w", err)
}
// Encode as npub
var npubIdentity []byte
@@ -65,14 +77,19 @@ func (builder *IdentityTagBuilder) CreateIdentityTag(delegatePubkey []byte) (ide
identityPubkeyHex := hex.EncodeToString(builder.identityPubkey)
message := nonceHex + delegatePubkeyHex + identityPubkeyHex
// Hash and sign
// Hash and sign using p8k signer
hash := sha256.Sum256([]byte(message))
identitySecKey := secp256k1.SecKeyFromBytes(builder.identityPrivkey)
var sig *schnorr.Signature
if sig, err = schnorr.Sign(identitySecKey, hash[:]); chk.E(err) {
var signer *p8k.Signer
if signer, err = p8k.New(); chk.E(err) {
return nil, errorf.E("failed to create signer: %w", err)
}
if err = signer.InitSec(builder.identityPrivkey); chk.E(err) {
return nil, errorf.E("failed to initialize signer: %w", err)
}
var signature []byte
if signature, err = signer.Sign(hash[:]); chk.E(err) {
return nil, errorf.E("failed to sign identity tag: %w", err)
}
signature := sig.Serialize()
identityTag = &IdentityTag{
NPubIdentity: builder.npubIdentity,

View File

@@ -6,10 +6,10 @@ import (
"time"
"next.orly.dev/pkg/crypto/encryption"
p256k1signer "p256k1.mleku.dev/signer"
"next.orly.dev/pkg/encoders/event"
"next.orly.dev/pkg/encoders/hex"
"next.orly.dev/pkg/encoders/tag"
"next.orly.dev/pkg/interfaces/signer/p8k"
"next.orly.dev/pkg/protocol/nwc"
"next.orly.dev/pkg/utils"
)
@@ -101,7 +101,7 @@ func TestNWCEventCreation(t *testing.T) {
t.Fatal(err)
}
clientKey := p256k1signer.NewP256K1Signer()
clientKey := p8k.MustNew()
if err := clientKey.InitSec(secretBytes); err != nil {
t.Fatal(err)
}

View File

@@ -10,7 +10,7 @@ import (
"lol.mleku.dev/chk"
"next.orly.dev/pkg/crypto/encryption"
p256k1signer "p256k1.mleku.dev/signer"
"next.orly.dev/pkg/interfaces/signer/p8k"
"next.orly.dev/pkg/encoders/event"
"next.orly.dev/pkg/encoders/filter"
"next.orly.dev/pkg/encoders/hex"
@@ -40,7 +40,10 @@ func NewMockWalletService(
relay string, initialBalance int64,
) (service *MockWalletService, err error) {
// Generate wallet keypair
walletKey := p256k1signer.NewP256K1Signer()
var walletKey *p8k.Signer
if walletKey, err = p8k.New(); chk.E(err) {
return
}
if err = walletKey.Generate(); chk.E(err) {
return
}

View File

@@ -6,7 +6,7 @@ import (
"lol.mleku.dev/chk"
"next.orly.dev/pkg/crypto/encryption"
p256k1signer "p256k1.mleku.dev/signer"
"next.orly.dev/pkg/interfaces/signer/p8k"
"next.orly.dev/pkg/encoders/hex"
"next.orly.dev/pkg/interfaces/signer"
)
@@ -67,7 +67,10 @@ func ParseConnectionURI(nwcUri string) (parts *ConnectionParams, err error) {
err = errors.New("invalid secret")
return
}
clientKey := p256k1signer.NewP256K1Signer()
var clientKey *p8k.Signer
if clientKey, err = p8k.New(); chk.E(err) {
return
}
if err = clientKey.InitSec(secretBytes); chk.E(err) {
return
}

View File

@@ -16,12 +16,12 @@ import (
"github.com/stretchr/testify/require"
"golang.org/x/net/websocket"
"lol.mleku.dev/chk"
p256k1signer "p256k1.mleku.dev/signer"
"next.orly.dev/pkg/encoders/event"
"next.orly.dev/pkg/encoders/filter"
"next.orly.dev/pkg/encoders/hex"
"next.orly.dev/pkg/encoders/kind"
"next.orly.dev/pkg/encoders/tag"
"next.orly.dev/pkg/interfaces/signer/p8k"
"next.orly.dev/pkg/utils"
"next.orly.dev/pkg/utils/normalize"
)
@@ -36,7 +36,7 @@ func TestPublish(t *testing.T) {
Tags: tag.NewS(tag.NewFromAny("foo", "bar")),
Pubkey: pub,
}
sign := p256k1signer.NewP256K1Signer()
sign := p8k.MustNew()
var err error
if err = sign.InitSec(priv); chk.E(err) {
}
@@ -208,7 +208,7 @@ var anyOriginHandshake = func(conf *websocket.Config, r *http.Request) error {
func makeKeyPair(t *testing.T) (sec, pub []byte) {
t.Helper()
sign := p256k1signer.NewP256K1Signer()
sign := p8k.MustNew()
var err error
if err = sign.Generate(); chk.E(err) {
return