diff --git a/p2p/crypto/bench_test.go b/p2p/crypto/bench_test.go new file mode 100644 index 00000000000..7a3818a7c95 --- /dev/null +++ b/p2p/crypto/bench_test.go @@ -0,0 +1,54 @@ +package crypto + +import "testing" + +func BenchmarkSign1B(b *testing.B) { RunBenchmarkSign(b, 1) } +func BenchmarkSign10B(b *testing.B) { RunBenchmarkSign(b, 10) } +func BenchmarkSign100B(b *testing.B) { RunBenchmarkSign(b, 100) } +func BenchmarkSign1000B(b *testing.B) { RunBenchmarkSign(b, 1000) } +func BenchmarkSign10000B(b *testing.B) { RunBenchmarkSign(b, 10000) } +func BenchmarkSign100000B(b *testing.B) { RunBenchmarkSign(b, 100000) } + +func BenchmarkVerify1B(b *testing.B) { RunBenchmarkVerify(b, 1) } +func BenchmarkVerify10B(b *testing.B) { RunBenchmarkVerify(b, 10) } +func BenchmarkVerify100B(b *testing.B) { RunBenchmarkVerify(b, 100) } +func BenchmarkVerify1000B(b *testing.B) { RunBenchmarkVerify(b, 1000) } +func BenchmarkVerify10000B(b *testing.B) { RunBenchmarkVerify(b, 10000) } +func BenchmarkVerify100000B(b *testing.B) { RunBenchmarkVerify(b, 100000) } + +func RunBenchmarkSign(b *testing.B, numBytes int) { + secret, _, err := GenerateKeyPair(RSA, 1024) + if err != nil { + b.Fatal(err) + } + someData := make([]byte, numBytes) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := secret.Sign(someData) + if err != nil { + b.Fatal(err) + } + } +} + +func RunBenchmarkVerify(b *testing.B, numBytes int) { + secret, public, err := GenerateKeyPair(RSA, 1024) + if err != nil { + b.Fatal(err) + } + someData := make([]byte, numBytes) + signature, err := secret.Sign(someData) + if err != nil { + b.Fatal(err) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + valid, err := public.Verify(someData, signature) + if err != nil { + b.Fatal(err) + } + if !valid { + b.Fatal("signature should be valid") + } + } +}