package ed25519
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/tendermint/tendermint/crypto"
|
|
"github.com/tendermint/tendermint/crypto/internal/benchmarking"
|
|
)
|
|
|
|
func BenchmarkKeyGeneration(b *testing.B) {
|
|
benchmarkKeygenWrapper := func(reader io.Reader) crypto.PrivKey {
|
|
return genPrivKey(reader)
|
|
}
|
|
benchmarking.BenchmarkKeyGeneration(b, benchmarkKeygenWrapper)
|
|
}
|
|
|
|
func BenchmarkSigning(b *testing.B) {
|
|
priv := GenPrivKey()
|
|
benchmarking.BenchmarkSigning(b, priv)
|
|
}
|
|
|
|
func BenchmarkVerification(b *testing.B) {
|
|
priv := GenPrivKey()
|
|
benchmarking.BenchmarkVerification(b, priv)
|
|
}
|
|
|
|
func BenchmarkVerifyBatch(b *testing.B) {
|
|
for _, sigsCount := range []int{1, 8, 64, 1024} {
|
|
sigsCount := sigsCount
|
|
b.Run(fmt.Sprintf("sig-count-%d", sigsCount), func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
v := NewBatchVerifier()
|
|
for i := 0; i < sigsCount; i++ {
|
|
priv := GenPrivKey()
|
|
pub := priv.PubKey()
|
|
msg := []byte("BatchVerifyTest")
|
|
sig, _ := priv.Sign(msg)
|
|
err := v.Add(pub, msg, sig)
|
|
require.NoError(b, err)
|
|
}
|
|
// NOTE: dividing by n so that metrics are per-signature
|
|
for i := 0; i < b.N/sigsCount; i++ {
|
|
if !v.Verify() {
|
|
b.Fatal("signature set failed batch verification")
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|