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