You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
3.8 KiB
161 lines
3.8 KiB
//go:build cgo |
|
|
|
package p256k_test |
|
|
|
import ( |
|
"testing" |
|
"time" |
|
|
|
"crypto.orly/p256k" |
|
"interfaces.orly/signer" |
|
"lol.mleku.dev/chk" |
|
"lol.mleku.dev/log" |
|
"utils.orly" |
|
) |
|
|
|
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), |
|
) |
|
}
|
|
|