]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go,crypto: reject using Go+BoringCrypto and fips140 together
authorFilippo Valsorda <filippo@golang.org>
Tue, 17 Dec 2024 18:57:54 +0000 (19:57 +0100)
committerGopher Robot <gobot@golang.org>
Wed, 18 Dec 2024 16:49:21 +0000 (08:49 -0800)
The combination is untested and nonsensical. Both are solutions to the
same problem.

For #69536

Change-Id: I95cc3baaf03b64ce08096e304e311a29e9577385
Reviewed-on: https://go-review.googlesource.com/c/go/+/637177
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Russ Cox <rsc@golang.org>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
Reviewed-by: David Chase <drchase@google.com>
src/cmd/go/internal/fips140/fips140.go
src/cmd/go/testdata/script/env_changed.txt
src/cmd/go/testdata/script/fips.txt
src/cmd/go/testdata/script/fipssnap.txt
src/crypto/internal/boring/boring.go
src/crypto/internal/fips140test/check_test.go

index 7c04a94dd1fea3a95ff81d2e12695608e811ea69..1dad8e0bbf96e8e4e8625358f15bc255df00d986 100644 (file)
@@ -119,6 +119,10 @@ func Init() {
        if Snapshot() {
                fsys.Bind(Dir(), filepath.Join(cfg.GOROOT, "src/crypto/internal/fips140"))
        }
+
+       if cfg.Experiment.BoringCrypto && Enabled() {
+               base.Fatalf("go: cannot use GOFIPS140 with GOEXPERIMENT=boringcrypto")
+       }
 }
 
 var initDone bool
index f57f69bfd78ca050cfb8ba42c984fcd5b1b91b83..10db76540706158dc150a97c916c6d16b73c462a 100644 (file)
@@ -1,5 +1,8 @@
 # Test query for non-defaults in the env
 
+# Go+BoringCrypto conflicts with GOFIPS140.
+[GOEXPERIMENT:boringcrypto] skip
+
 env GOROOT=./a
 env GOTOOLCHAIN=local
 env GOSUMDB=nodefault
index fd791d39903e880c62157505ec0695e7995c1553..fe096ea0c3a2f09b288d6d031517c25fc040a01a 100644 (file)
@@ -1,3 +1,6 @@
+# Go+BoringCrypto conflicts with GOFIPS140.
+[GOEXPERIMENT:boringcrypto] skip
+
 # list with GOFIPS140=off
 env GOFIPS140=off
 go list -f '{{.DefaultGODEBUG}}'
index 17a9d647a1845bce717205d113c9f83bb14e9513..0bf46c56e292a42a6df7d077d0bf96e84105e381 100644 (file)
@@ -7,6 +7,9 @@ env alias=inprocess
 skip 'no snapshots yet'
 env GOFIPS140=$snap
 
+# Go+BoringCrypto conflicts with GOFIPS140.
+[GOEXPERIMENT:boringcrypto] skip
+
 # default GODEBUG includes fips140=on
 go list -f '{{.DefaultGODEBUG}}'
 stdout fips140=on
index 90cf1edb75bbad6d2800afb5fcc35b4008dfe899..6dfc6ed5f50207041c3f23eca19d3531cc4c518f 100644 (file)
@@ -16,6 +16,7 @@ import "C"
 import (
        "crypto/internal/boring/sig"
        _ "crypto/internal/boring/syso"
+       "crypto/internal/fips140"
        "internal/stringslite"
        "math/bits"
        "unsafe"
@@ -31,6 +32,12 @@ func init() {
        sig.BoringCrypto()
 }
 
+func init() {
+       if fips140.Enabled {
+               panic("boringcrypto: cannot use GODEBUG=fips140 with GOEXPERIMENT=boringcrypto")
+       }
+}
+
 // Unreachable marks code that should be unreachable
 // when BoringCrypto is in use. It panics.
 func Unreachable() {
index b156de2cbbab6c70bc0492ac16178edabd7a33c7..cf42dbfa7823f9cb6d9dda5183c3846bfda8e8bc 100644 (file)
@@ -5,6 +5,7 @@
 package fipstest
 
 import (
+       "crypto/internal/boring"
        . "crypto/internal/fips140/check"
        "crypto/internal/fips140/check/checktest"
        "fmt"
@@ -22,6 +23,10 @@ import (
 const enableFIPSTest = true
 
 func TestFIPSCheckVerify(t *testing.T) {
+       if boring.Enabled {
+               t.Skip("not testing fips140 with boringcrypto enabled")
+       }
+
        if Verified {
                t.Logf("verified")
                return