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") } } }) } }