summaryrefslogtreecommitdiff
path: root/internal/prefer_openssl/prefer.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/prefer_openssl/prefer.go')
-rw-r--r--internal/prefer_openssl/prefer.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/internal/prefer_openssl/prefer.go b/internal/prefer_openssl/prefer.go
new file mode 100644
index 0000000..16788e0
--- /dev/null
+++ b/internal/prefer_openssl/prefer.go
@@ -0,0 +1,29 @@
+package prefer_openssl
+
+import (
+ "fmt"
+ "io/ioutil"
+ "regexp"
+)
+
+// filePreferOpenSSL tells us if OpenSSL is faster than Go GCM on this machine.
+// Go GCM is fastern when the CPU has AES instructions and Go is v1.6 or higher.
+//
+// See https://github.com/rfjakob/gocryptfs/issues/23#issuecomment-218286502
+// for benchmarks.
+//
+// filePreferOpenSSL takes an explicit filename so it can be tested with saved
+// cpuinfo files instead of /proc/cpuinfo.
+func filePreferOpenSSL(file string) bool {
+ ci, err := ioutil.ReadFile(file)
+ if err != nil {
+ fmt.Println(err)
+ return true
+ }
+ haveAes, err := regexp.Match(`(?m)^flags.*\baes\b`, ci)
+ if err != nil {
+ fmt.Println(err)
+ return true
+ }
+ return !haveAes
+}