Replaced legacy `*.orly` module imports with `next.orly.dev/pkg` paths across the codebase for consistency. Removed legacy `go.mod` files from sub-packages, consolidating dependency management. Added Dockerfiles and configurations for benchmarking environments.
162 lines
3.8 KiB
Go
162 lines
3.8 KiB
Go
//go:build cgo
|
|
|
|
package p256k_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"lol.mleku.dev/chk"
|
|
"lol.mleku.dev/log"
|
|
"next.orly.dev/pkg/crypto/p256k"
|
|
"next.orly.dev/pkg/interfaces/signer"
|
|
"next.orly.dev/pkg/utils"
|
|
)
|
|
|
|
func TestSigner_Generate(t *testing.T) {
|
|
for _ = range 10000 {
|
|
var err error
|
|
sign := &p256k.Signer{}
|
|
var skb []byte
|
|
if err = sign.Generate(); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
skb = sign.Sec()
|
|
if err = sign.InitSec(skb); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
// func TestSignerVerify(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
|
|
// signer := &p256k.Signer{}
|
|
// for scanner.Scan() {
|
|
// var valid bool
|
|
// b := scanner.Bytes()
|
|
// bc := make([]byte, 0, len(b))
|
|
// bc = append(bc, b...)
|
|
// 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.T(err) || !valid {
|
|
// t.Errorf("invalid signature\n%s", bc)
|
|
// continue
|
|
// }
|
|
// }
|
|
// id := ev.GetIDBytes()
|
|
// if len(id) != sha256.Size {
|
|
// t.Errorf("id should be 32 bytes, got %d", len(id))
|
|
// continue
|
|
// }
|
|
// if err = signer.InitPub(ev.Pubkey); chk.T(err) {
|
|
// t.Errorf("failed to init pub key: %s\n%0x", err, ev.Pubkey)
|
|
// continue
|
|
// }
|
|
// if valid, err = signer.Verify(id, ev.Sig); chk.E(err) {
|
|
// t.Errorf("failed to verify: %s\n%0x", err, ev.ID)
|
|
// continue
|
|
// }
|
|
// if !valid {
|
|
// t.Errorf(
|
|
// "invalid signature for\npub %0x\neid %0x\nsig %0x\n%s",
|
|
// ev.Pubkey, id, ev.Sig, bc,
|
|
// )
|
|
// continue
|
|
// }
|
|
// // fmt.Printf("%s\n", bc)
|
|
// // evs = append(evs, ev)
|
|
// }
|
|
// }
|
|
|
|
// func TestSignerSign(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
|
|
// signer := &p256k.Signer{}
|
|
// var skb, pkb []byte
|
|
// if skb, pkb, _, _, err = p256k.Generate(); chk.E(err) {
|
|
// t.Fatal(err)
|
|
// }
|
|
// log.I.S(skb, pkb)
|
|
// if err = signer.InitSec(skb); chk.E(err) {
|
|
// t.Fatal(err)
|
|
// }
|
|
// verifier := &p256k.Signer{}
|
|
// if err = verifier.InitPub(pkb); 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)
|
|
// }
|
|
// var valid bool
|
|
// sig := make([]byte, schnorr.SignatureSize)
|
|
// for _, ev := range evs {
|
|
// ev.Pubkey = pkb
|
|
// id := ev.GetIDBytes()
|
|
// if sig, err = signer.Sign(id); chk.E(err) {
|
|
// t.Errorf("failed to sign: %s\n%0x", err, id)
|
|
// }
|
|
// if valid, err = verifier.Verify(id, sig); chk.E(err) {
|
|
// t.Errorf("failed to verify: %s\n%0x", err, id)
|
|
// }
|
|
// if !valid {
|
|
// t.Errorf("invalid signature")
|
|
// }
|
|
// }
|
|
// signer.Zero()
|
|
// }
|
|
|
|
func TestECDH(t *testing.T) {
|
|
n := time.Now()
|
|
var err error
|
|
var s1, s2 signer.I
|
|
var counter int
|
|
const total = 100
|
|
for _ = range total {
|
|
s1, s2 = &p256k.Signer{}, &p256k.Signer{}
|
|
if err = s1.Generate(); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
for _ = range total {
|
|
if err = s2.Generate(); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
var secret1, secret2 []byte
|
|
if secret1, err = s1.ECDH(s2.Pub()); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
if secret2, err = s2.ECDH(s1.Pub()); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
if !utils.FastEqual(secret1, secret2) {
|
|
counter++
|
|
t.Errorf(
|
|
"ECDH generation failed to work in both directions, %x %x",
|
|
secret1,
|
|
secret2,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
a := time.Now()
|
|
duration := a.Sub(n)
|
|
log.I.Ln(
|
|
"errors", counter, "total", total*total, "time", duration, "time/op",
|
|
duration/total/total, "ops/sec",
|
|
float64(time.Second)/float64(duration/total/total),
|
|
)
|
|
}
|