nacl/secretbox: add benchmarks
Initial results on an Ivy Bridge system for reference:
BenchmarkSeal8Bytes-8 5000000 310 ns/op 25.77 MB/s
BenchmarkSeal100Bytes-8 3000000 599 ns/op 166.76 MB/s
BenchmarkSeal1K-8 1000000 1825 ns/op 561.06 MB/s
BenchmarkSeal8K-8 100000 10997 ns/op 744.88 MB/s
BenchmarkOpen8Bytes-8 5000000 327 ns/op 24.39 MB/s
BenchmarkOpen100Bytes-8 2000000 630 ns/op 158.49 MB/s
BenchmarkOpen1K-8 1000000 1752 ns/op 584.21 MB/s
BenchmarkOpen8K-8 200000 10420 ns/op 786.12 MB/s
Fixes golang/go#20563
Change-Id: Iaacd9715840c1f5c7ee2459759e79c98a4b6f62a
Reviewed-on: https://go-review.googlesource.com/46039
Reviewed-by: Adam Langley <agl@golang.org>
Run-TryBot: Adam Langley <agl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/nacl/secretbox/secretbox_test.go b/nacl/secretbox/secretbox_test.go
index 664dc15..3c70b0f 100644
--- a/nacl/secretbox/secretbox_test.go
+++ b/nacl/secretbox/secretbox_test.go
@@ -89,3 +89,66 @@
t.Fatalf("Seal didn't correctly append with sufficient capacity.")
}
}
+
+func benchmarkSealSize(b *testing.B, size int) {
+ message := make([]byte, size)
+ out := make([]byte, size+Overhead)
+ var nonce [24]byte
+ var key [32]byte
+
+ b.SetBytes(int64(size))
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ out = Seal(out[:0], message, &nonce, &key)
+ }
+}
+
+func BenchmarkSeal8Bytes(b *testing.B) {
+ benchmarkSealSize(b, 8)
+}
+
+func BenchmarkSeal100Bytes(b *testing.B) {
+ benchmarkSealSize(b, 100)
+}
+
+func BenchmarkSeal1K(b *testing.B) {
+ benchmarkSealSize(b, 1024)
+}
+
+func BenchmarkSeal8K(b *testing.B) {
+ benchmarkSealSize(b, 8192)
+}
+
+func benchmarkOpenSize(b *testing.B, size int) {
+ msg := make([]byte, size)
+ result := make([]byte, size)
+ var nonce [24]byte
+ var key [32]byte
+ box := Seal(nil, msg, &nonce, &key)
+
+ b.SetBytes(int64(size))
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ if _, ok := Open(result[:0], box, &nonce, &key); !ok {
+ panic("Open failed")
+ }
+ }
+}
+
+func BenchmarkOpen8Bytes(b *testing.B) {
+ benchmarkOpenSize(b, 8)
+}
+
+func BenchmarkOpen100Bytes(b *testing.B) {
+ benchmarkOpenSize(b, 100)
+}
+
+func BenchmarkOpen1K(b *testing.B) {
+ benchmarkOpenSize(b, 1024)
+}
+
+func BenchmarkOpen8K(b *testing.B) {
+ benchmarkOpenSize(b, 8192)
+}