summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorJakob Unterwurzacher2021-09-08 19:48:13 +0200
committerJakob Unterwurzacher2021-09-08 19:48:13 +0200
commit1a5866729387c09eca1cdc9737d1b02c74c25901 (patch)
treef4f3e067a23fad3f34f9b555ec8b27799bc7412c /internal
parent85c2beccaf674c69b3e30b0d646f5c11d91ecb9b (diff)
stupidgcm: add PreferOpenSSL{AES256GCM,Xchacha20poly1305}
Add PreferOpenSSLXchacha20poly1305, rename PreferOpenSSL -> PreferOpenSSLAES256GCM.
Diffstat (limited to 'internal')
-rw-r--r--internal/speed/speed.go4
-rw-r--r--internal/stupidgcm/prefer.go20
2 files changed, 20 insertions, 4 deletions
diff --git a/internal/speed/speed.go b/internal/speed/speed.go
index 2f818d0..d5aa696 100644
--- a/internal/speed/speed.go
+++ b/internal/speed/speed.go
@@ -32,8 +32,8 @@ func Run() {
f func(*testing.B)
preferred bool
}{
- {name: cryptocore.BackendOpenSSL.Name, f: bStupidGCM, preferred: stupidgcm.PreferOpenSSL()},
- {name: cryptocore.BackendGoGCM.Name, f: bGoGCM, preferred: !stupidgcm.PreferOpenSSL()},
+ {name: cryptocore.BackendOpenSSL.Name, f: bStupidGCM, preferred: stupidgcm.PreferOpenSSLAES256GCM()},
+ {name: cryptocore.BackendGoGCM.Name, f: bGoGCM, preferred: !stupidgcm.PreferOpenSSLAES256GCM()},
{name: cryptocore.BackendAESSIV.Name, f: bAESSIV, preferred: false},
{name: cryptocore.BackendXChaCha20Poly1305.Name, f: bXchacha20poly1305, preferred: false},
{name: cryptocore.BackendXChaCha20Poly1305OpenSSL.Name, f: bStupidXchacha, preferred: false},
diff --git a/internal/stupidgcm/prefer.go b/internal/stupidgcm/prefer.go
index bacd56a..ffbaf58 100644
--- a/internal/stupidgcm/prefer.go
+++ b/internal/stupidgcm/prefer.go
@@ -6,7 +6,8 @@ import (
"golang.org/x/sys/cpu"
)
-// PreferOpenSSL tells us if OpenSSL is faster than Go GCM on this machine.
+// PreferOpenSSLAES256GCM tells us if OpenSSL AES-256-GCM is faster than Go stdlib
+// on this machine.
//
// Go GCM is only faster if the CPU either:
//
@@ -16,7 +17,7 @@ import (
//
// See https://github.com/rfjakob/gocryptfs/wiki/CPU-Benchmarks
// for benchmarks.
-func PreferOpenSSL() bool {
+func PreferOpenSSLAES256GCM() bool {
if BuiltWithoutOpenssl {
return false
}
@@ -33,3 +34,18 @@ func PreferOpenSSL() bool {
// OpenSSL is probably faster
return true
}
+
+// PreferOpenSSLXchacha20poly1305 returns true if OpenSSL Xchacha20poly1305 is
+// faster than Go stdlib on this machine.
+func PreferOpenSSLXchacha20poly1305() bool {
+ if BuiltWithoutOpenssl {
+ return false
+ }
+ // Go x/crypto has optimized assembly for amd64:
+ // https://github.com/golang/crypto/blob/master/chacha20poly1305/chacha20poly1305_amd64.s
+ if runtime.GOARCH == "amd64" {
+ return false
+ }
+ // On arm64 and arm, OpenSSL is faster. Probably everwhere else too.
+ return true
+}