From 49b597f07c07bde6a2feb1f32f02fcaf34daf365 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Wed, 11 May 2016 23:36:57 +0200 Subject: prefer_openssl: autodetect whether to use OpenSSL or Go GCM Go GCM is faster than OpenSSL if the CPU has AES instructions and you are running Go 1.6+. The "-openssl" option now defaults to "auto". "gocryptfs -debug -version" displays the result of the autodetection. See https://github.com/rfjakob/gocryptfs/issues/23 for details and benchmarks. --- internal/prefer_openssl/prefer.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 internal/prefer_openssl/prefer.go (limited to 'internal/prefer_openssl/prefer.go') 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 +} -- cgit v1.2.3