stupidgcm: add PreferOpenSSL{AES256GCM,Xchacha20poly1305}

Add PreferOpenSSLXchacha20poly1305,
rename PreferOpenSSL -> PreferOpenSSLAES256GCM.
This commit is contained in:
Jakob Unterwurzacher 2021-09-08 19:48:13 +02:00
parent 85c2beccaf
commit 1a58667293
4 changed files with 22 additions and 6 deletions

View File

@ -253,7 +253,7 @@ func parseCliOpts(osArgs []string) (args argContainer) {
} }
// "-openssl" needs some post-processing // "-openssl" needs some post-processing
if opensslAuto == "auto" { if opensslAuto == "auto" {
args.openssl = stupidgcm.PreferOpenSSL() args.openssl = stupidgcm.PreferOpenSSLAES256GCM()
} else { } else {
args.openssl, err = strconv.ParseBool(opensslAuto) args.openssl, err = strconv.ParseBool(opensslAuto)
if err != nil { if err != nil {

View File

@ -119,7 +119,7 @@ func TestParseCliOpts(t *testing.T) {
longnames: true, longnames: true,
raw64: true, raw64: true,
hkdf: true, hkdf: true,
openssl: stupidgcm.PreferOpenSSL(), // depends on CPU and build flags openssl: stupidgcm.PreferOpenSSLAES256GCM(), // depends on CPU and build flags
scryptn: 16, scryptn: 16,
} }

View File

@ -32,8 +32,8 @@ func Run() {
f func(*testing.B) f func(*testing.B)
preferred bool preferred bool
}{ }{
{name: cryptocore.BackendOpenSSL.Name, f: bStupidGCM, preferred: stupidgcm.PreferOpenSSL()}, {name: cryptocore.BackendOpenSSL.Name, f: bStupidGCM, preferred: stupidgcm.PreferOpenSSLAES256GCM()},
{name: cryptocore.BackendGoGCM.Name, f: bGoGCM, preferred: !stupidgcm.PreferOpenSSL()}, {name: cryptocore.BackendGoGCM.Name, f: bGoGCM, preferred: !stupidgcm.PreferOpenSSLAES256GCM()},
{name: cryptocore.BackendAESSIV.Name, f: bAESSIV, preferred: false}, {name: cryptocore.BackendAESSIV.Name, f: bAESSIV, preferred: false},
{name: cryptocore.BackendXChaCha20Poly1305.Name, f: bXchacha20poly1305, preferred: false}, {name: cryptocore.BackendXChaCha20Poly1305.Name, f: bXchacha20poly1305, preferred: false},
{name: cryptocore.BackendXChaCha20Poly1305OpenSSL.Name, f: bStupidXchacha, preferred: false}, {name: cryptocore.BackendXChaCha20Poly1305OpenSSL.Name, f: bStupidXchacha, preferred: false},

View File

@ -6,7 +6,8 @@ import (
"golang.org/x/sys/cpu" "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: // Go GCM is only faster if the CPU either:
// //
@ -16,7 +17,7 @@ import (
// //
// See https://github.com/rfjakob/gocryptfs/wiki/CPU-Benchmarks // See https://github.com/rfjakob/gocryptfs/wiki/CPU-Benchmarks
// for benchmarks. // for benchmarks.
func PreferOpenSSL() bool { func PreferOpenSSLAES256GCM() bool {
if BuiltWithoutOpenssl { if BuiltWithoutOpenssl {
return false return false
} }
@ -33,3 +34,18 @@ func PreferOpenSSL() bool {
// OpenSSL is probably faster // OpenSSL is probably faster
return true 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
}