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

@@ -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,