From 93b5df3bf36996258d005da151953da2030e346b Mon Sep 17 00:00:00 2001 From: Jeff Hodges Date: Sat, 3 Jun 2017 03:40:02 -0700 Subject: [PATCH] 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 Run-TryBot: Adam Langley TryBot-Result: Gobot Gobot --- nacl/secretbox/secretbox_test.go | 63 ++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) 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 @@ 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) +}