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))) +}