Files
x-realy/p256k/secp256k1_test.go
2025-05-30 17:57:39 +01:00

92 lines
2.0 KiB
Go

//go:build cgo
package p256k_test
import (
"bufio"
"bytes"
"testing"
"github.com/minio/sha256-simd"
"x.realy.lol/chk"
"x.realy.lol/ec/schnorr"
"x.realy.lol/event"
"x.realy.lol/event/examples"
"x.realy.lol/hex"
"x.realy.lol/p256k"
)
func TestVerify(t *testing.T) {
evs := make([]*event.E, 0, 10000)
scanner := bufio.NewScanner(bytes.NewBuffer(examples.Cache))
buf := make([]byte, 1_000_000)
scanner.Buffer(buf, len(buf))
var err error
for scanner.Scan() {
var valid bool
b := scanner.Bytes()
ev := event.New()
if err = ev.Unmarshal(b); chk.E(err) {
t.Errorf("failed to marshal\n%s", b)
} else {
if valid, err = ev.Verify(); chk.E(err) || !valid {
t.Errorf("btcec: invalid signature\n%s", b)
continue
}
}
id := ev.GetIdBytes()
if len(id) != sha256.Size {
t.Errorf("id should be 32 bytes, got %d", len(id))
continue
}
if err = p256k.VerifyFromBytes(id, ev.GetSigBytes(), ev.GetPubkeyBytes()); chk.E(err) {
t.Error(err)
continue
}
evs = append(evs, ev)
}
}
func TestSign(t *testing.T) {
evs := make([]*event.E, 0, 10000)
scanner := bufio.NewScanner(bytes.NewBuffer(examples.Cache))
buf := make([]byte, 1_000_000)
scanner.Buffer(buf, len(buf))
var err error
var sec1 *p256k.Sec
var pub1 *p256k.XPublicKey
var pb []byte
if _, pb, sec1, pub1, err = p256k.Generate(); chk.E(err) {
t.Fatal(err)
}
for scanner.Scan() {
b := scanner.Bytes()
ev := event.New()
if err = ev.Unmarshal(b); chk.E(err) {
t.Errorf("failed to marshal\n%s", b)
}
evs = append(evs, ev)
}
sig := make([]byte, schnorr.SignatureSize)
for _, ev := range evs {
ev.Pubkey = hex.Enc(pb)
var uid *p256k.Uchar
if uid, err = p256k.Msg(ev.GetIdBytes()); chk.E(err) {
t.Fatal(err)
}
if sig, err = p256k.Sign(uid, sec1.Sec()); chk.E(err) {
t.Fatal(err)
}
ev.Sig = hex.Enc(sig)
var usig *p256k.Uchar
if usig, err = p256k.Sig(sig); chk.E(err) {
t.Fatal(err)
}
if !p256k.Verify(uid, usig, pub1.Key) {
t.Errorf("invalid signature")
}
}
p256k.Zero(&sec1.Key)
}