// Copyright 2025 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package fips140 import ( "internal/godebug" _ "unsafe" // for linkname ) // WithoutEnforcement disables strict FIPS 140-3 enforcement while executing f. // Calling WithoutEnforcement without strict enforcement enabled // (GODEBUG=fips140=only is not set or already inside of a call to // WithoutEnforcement) is a no-op. // // WithoutEnforcement is inherited by any goroutines spawned while executing f. // // As this disables enforcement, it should be applied carefully to tightly // scoped functions. func WithoutEnforcement(f func()) { if !Enabled() || !Enforced() { f() return } setBypass() defer unsetBypass() f() } var enabled = godebug.New("fips140").Value() == "only" // Enforced indicates if strict FIPS 140-3 enforcement is enabled. Strict // enforcement is enabled when a program is run with GODEBUG=fips140=only and // enforcement has not been disabled by a call to [WithoutEnforcement]. func Enforced() bool { return enabled && !isBypassed() } //go:linkname setBypass func setBypass() //go:linkname isBypassed func isBypassed() bool //go:linkname unsetBypass func unsetBypass()