diff options
author | Jakob Unterwurzacher | 2021-09-03 18:30:42 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2021-09-07 18:14:05 +0200 |
commit | 3e27acb989614f82a25d50ab19a0a4419f19aa27 (patch) | |
tree | c22162c11e2583467d16626c3fc58102660d2469 | |
parent | 5046962634d83a01341585f9f96090add2396e82 (diff) |
speed: add decryption benchmarks
gocryptfs/internal/speed$ go test -bench .
goos: linux
goarch: amd64
pkg: github.com/rfjakob/gocryptfs/v2/internal/speed
cpu: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
BenchmarkStupidGCM-4 263742 4523 ns/op 905.61 MB/s
BenchmarkStupidGCMDecrypt-4 204858 5779 ns/op 708.76 MB/s
BenchmarkGoGCM-4 291259 4095 ns/op 1000.25 MB/s
BenchmarkGoGCMDecrypt-4 293886 4061 ns/op 1008.53 MB/s
BenchmarkAESSIV-4 46537 25538 ns/op 160.39 MB/s
BenchmarkAESSIVDecrypt-4 46770 25627 ns/op 159.83 MB/s
BenchmarkXchacha-4 243619 4893 ns/op 837.03 MB/s
BenchmarkXchachaDecrypt-4 248857 4793 ns/op 854.51 MB/s
BenchmarkStupidXchacha-4 213717 5558 ns/op 736.99 MB/s
BenchmarkStupidXchachaDecrypt-4 176635 6782 ns/op 603.96 MB/s
PASS
ok github.com/rfjakob/gocryptfs/v2/internal/speed 12.871s
-rw-r--r-- | internal/speed/speed.go | 19 | ||||
-rw-r--r-- | internal/speed/speed_test.go | 47 |
2 files changed, 62 insertions, 4 deletions
diff --git a/internal/speed/speed.go b/internal/speed/speed.go index 37b9daf..a696703 100644 --- a/internal/speed/speed.go +++ b/internal/speed/speed.go @@ -92,6 +92,25 @@ func bEncrypt(b *testing.B, c cipher.AEAD) { } +func bDecrypt(b *testing.B, c cipher.AEAD) { + authData := randBytes(adLen) + iv := randBytes(c.NonceSize()) + plain := randBytes(blockSize) + ciphertext := c.Seal(iv, iv, plain, authData) + + b.SetBytes(int64(len(plain))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + // Reset plain buffer + plain = plain[:0] + // Decrypt + _, err := c.Open(plain, iv, ciphertext[c.NonceSize():], authData) + if err != nil { + b.Fatal(err) + } + } +} + // bStupidGCM benchmarks stupidgcm's openssl GCM func bStupidGCM(b *testing.B) { if stupidgcm.BuiltWithoutOpenssl { diff --git a/internal/speed/speed_test.go b/internal/speed/speed_test.go index a6f3f30..4d09148 100644 --- a/internal/speed/speed_test.go +++ b/internal/speed/speed_test.go @@ -1,5 +1,16 @@ package speed +import ( + "crypto/aes" + "crypto/cipher" + "testing" + + "golang.org/x/crypto/chacha20poly1305" + + "github.com/rfjakob/gocryptfs/v2/internal/siv_aead" + "github.com/rfjakob/gocryptfs/v2/internal/stupidgcm" +) + /* Make the "-speed" benchmarks also accessible to the standard test system. Example run: @@ -12,26 +23,54 @@ PASS ok github.com/rfjakob/gocryptfs/v2/internal/speed 6.022s */ -import ( - "testing" -) - func BenchmarkStupidGCM(b *testing.B) { bStupidGCM(b) } +func BenchmarkStupidGCMDecrypt(b *testing.B) { + if stupidgcm.BuiltWithoutOpenssl { + b.Skip("openssl has been disabled at compile-time") + } + bDecrypt(b, stupidgcm.New(randBytes(32), false)) +} + func BenchmarkGoGCM(b *testing.B) { bGoGCM(b) } +func BenchmarkGoGCMDecrypt(b *testing.B) { + gAES, err := aes.NewCipher(randBytes(32)) + if err != nil { + b.Fatal(err) + } + gGCM, err := cipher.NewGCMWithNonceSize(gAES, 16) + if err != nil { + b.Fatal(err) + } + bDecrypt(b, gGCM) +} + func BenchmarkAESSIV(b *testing.B) { bAESSIV(b) } +func BenchmarkAESSIVDecrypt(b *testing.B) { + bEncrypt(b, siv_aead.New(randBytes(64))) +} + func BenchmarkXchacha(b *testing.B) { bXchacha20poly1305(b) } +func BenchmarkXchachaDecrypt(b *testing.B) { + c, _ := chacha20poly1305.NewX(randBytes(32)) + bDecrypt(b, c) +} + func BenchmarkStupidXchacha(b *testing.B) { bStupidXchacha(b) } + +func BenchmarkStupidXchachaDecrypt(b *testing.B) { + bDecrypt(b, stupidgcm.NewXchacha20poly1305(randBytes(32))) +} |