Yes, these questions are specific to the Microsoft fork of Go (and to 
varying degrees, could apply to other FIPS-focused forks of Go). To repeat 
from earlier, in case it helps anyone seeing this thread later:

> The GOEXPERIMENT=systemcrypto is a feature of the Microsoft fork of Go, 
not official Go. 
https://github.com/microsoft/go/blob/microsoft/main/eng/doc/fips/README.md is 
actually hosted in the microsoft/go repository, where that fork is 
maintained. I work on it, and I'm happy to help. (And, if you have any more 
questions related to this fork in the future, feel free to file a GitHub 
issue on microsoft/go directly.)

It looks like this has been opened in an issue now: microsoft/go#1267 
<https://github.com/microsoft/go/issues/1267>, and I'll reply there soon.
On Friday, July 5, 2024 at 8:11:39 PM UTC-7 Kurtis Rader wrote:

> GOFIPS doesn't appear anywhere in the official Google Go source, AFAICT. 
> And the document at 
> https://github.com/golang/go/blob/release-branch.go1.21/src/crypto/internal/boring/README.md
>  
> is reasonably clear that simply setting GOEXPERIMENT=boringcrypto is all 
> that is needed using the official Go implementation. I can't speak to the 
> Microsoft fork of Go. While asking here about the Microsoft fork is a 
> reasonable thing to do you may want to look for any discussion forums 
> dedicated to the Microsoft fork.
>
> On Fri, Jul 5, 2024 at 6:41 PM Damien A <linuxg...@gmail.com> wrote:
>
>> I am using the Microsoft version of Go lang as that is what my work 
>> instructed me to use.  My only task was to build Grafana using FIPS (or as 
>> close to it as i can get). As i mentioned in Microsoft Go 1.20.5 i was able 
>> to build using GOEXPERIMENT=opensslcrypto, and GOFIPS=1, but it appears now 
>> that with 1.21 Go that is no longer working using the same exact method. I 
>> have tried to use GOEXPERIMENT=systemcrypto, but it fails as well. 
>>
>> I guess the ultimate question I have is do i even need to set GOFIPS=1 
>> during compile to even make it FIPS compliant? it appears from Microsoft's 
>> FIPS page that it doesn't need to be set? 
>> https://github.com/microsoft/go/blob/microsoft/main/eng/doc/fips/README.md
>> So am I correct to think as long as I set GOEXPERIMENT=systemcrypto and 
>> compile that I am good on the build side of it? I also have applied a few 
>> changes that removes the not so good Ciphers from the SSL that was taken 
>> from the Fedora Project page.
>>
>> What's interesting is if i just try to run: /usr/local/go/bin/go version, 
>> that fails if i have GOFIPS=1, and GOEXPERIMENT=systemcrypto, so i can even 
>> just simply have it print the version number which is strange. So not sure 
>> if when i manually compiled the Microsoft Go if i broke something or not? I 
>> am really just trying to understand how critical is it to set GOFIPS=1 
>> during the build process? Is it a required option in order to build the go 
>> package?
>>
>> On Wednesday, July 3, 2024 at 6:45:37 PM UTC-7 dagood wrote:
>>
>>> Hi Devin,
>>>
>>> The FIPS functionality in Go (which, to be clear, is not supported for 
>>> use outside of Google) is documented here: 
>>> go/src/crypto/internal/boring/README.md 
>>> at release-branch.go1.21 · golang/go (github.com) 
>>> <https://github.com/golang/go/blob/release-branch.go1.21/src/crypto/internal/boring/README.md>,
>>>  
>>> and it's used by setting GOEXPERIMENT=boringcrypto.
>>>
>>> The GOEXPERIMENT=systemcrypto is a feature of the Microsoft fork of Go, 
>>> not official Go. 
>>> https://github.com/microsoft/go/blob/microsoft/main/eng/doc/fips/README.md 
>>> is 
>>> actually hosted in the microsoft/go repository, where that fork is 
>>> maintained. I work on it, and I'm happy to help. (And, if you have any more 
>>> questions related to this fork in the future, feel free to file a GitHub 
>>> issue on microsoft/go directly.)
>>>
>>> The issue doesn't seem related to Grafana, but rather because *wire *was 
>>> built with the Microsoft fork of Go but without specifying a backend, but 
>>> with GOFIPS=1. *wire* isn't able to be compatible with FIPS without a 
>>> backend, but it sees that FIPS is requested, so it fails safe. It isn't 
>>> clear what the caller's intent is and failing is an opportunity to catch a 
>>> mistake. You should either:
>>>
>>>    1. not set GOFIPS=1 until after calling *wire* (if at all!) or
>>>    2. build *wire* with GOEXPERIMENT=systemcrypto.
>>>
>>> I would default to (1). But if you are trying to make a FIPS compliant 
>>> package build process, (2) would be the step towards that.
>>>
>>> Whether or not you need GOFIPS=1 at all depends on the purpose of your 
>>> script/build process.
>>>
>>> > using GOFIPS=1 worked just fine on Go 1.20.5, however appears not to 
>>> be the case anymore.
>>>
>>> Yes, we only added this failsafe as of 1.21 of Microsoft Go. The first 
>>> bullet in the 1.21 changelog 
>>> <https://github.com/microsoft/go/blob/microsoft/main/eng/doc/fips/README.md#go-121-aug-2023>
>>>  has 
>>> some details.
>>>
>>
> -- 
> Kurtis Rader
> Caretaker of the exceptional canines Junior and Hank
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/a197f1a7-8aa8-449a-a427-e64c4caba4a2n%40googlegroups.com.

Reply via email to