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>
This commit is contained in:
Jeff Hodges
2017-06-18 20:15:51 +00:00
committed by Brad Fitzpatrick
parent 850760c427
commit 93b5df3bf3
+63
View File
@@ -89,3 +89,66 @@ func TestAppend(t *testing.T) {
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)
}