Skip to content

Commit b8d4663

Browse files
committed
go: use runtime FIPS instead of compile-time boringcrypto
- Removes AWS-LC syso file integration from Go toolchains - Updates gofips wrapper to use standard go (no GOEXPERIMENT) - Removes Go binary checks from check-fips macro (Rust only now) - Simplifies musl Go tree creation (no syso file shuffling) FIPS compliance is now controlled at runtime via GODEBUG=fips140=only environment variable rather than compile-time GOEXPERIMENT=boringcrypto. Signed-off-by: Jingwei Wang <jweiw@amazon.com>
1 parent 1a788d2 commit b8d4663

File tree

2 files changed

+5
-82
lines changed

2 files changed

+5
-82
lines changed

Dockerfile

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -641,21 +641,7 @@ RUN ./build-aws-lc.sh --arch="${ARCH}" --target="${TARGET}" --go-dir="${HOME}/sd
641641

642642
FROM sdk-go-1.25-prep AS sdk-go-1.25
643643

644-
COPY --from=sdk-go-1.25-aws-lc-gnu-x86_64 \
645-
/home/builder/aws-lc/build/goboringcrypto_linux_amd64.syso \
646-
/home/builder/sdk-go/src/crypto/internal/boring/syso/goboringcrypto_linux_amd64.syso
647-
648-
COPY --from=sdk-go-1.25-aws-lc-gnu-aarch64 \
649-
/home/builder/aws-lc/build/goboringcrypto_linux_arm64.syso \
650-
/home/builder/sdk-go/src/crypto/internal/boring/syso/goboringcrypto_linux_arm64.syso
651-
652-
COPY --from=sdk-go-1.25-aws-lc-musl-x86_64 \
653-
/home/builder/aws-lc/build/goboringcrypto_linux_amd64.syso \
654-
/home/builder/sdk-go/src/crypto/internal/boring/syso/goboringcrypto_linux_musl_amd64.syso
655-
656-
COPY --from=sdk-go-1.25-aws-lc-musl-aarch64 \
657-
/home/builder/aws-lc/build/goboringcrypto_linux_arm64.syso \
658-
/home/builder/sdk-go/src/crypto/internal/boring/syso/goboringcrypto_linux_musl_arm64.syso
644+
# FIPS/boringcrypto disabled - skipping aws-lc syso files
659645

660646
COPY ./helpers/go/build-go.sh ./
661647

@@ -666,21 +652,7 @@ RUN ./build-go.sh --go-version=${GO125VER}
666652

667653
FROM sdk-go-1.24-prep AS sdk-go-1.24
668654

669-
COPY --from=sdk-go-1.24-aws-lc-gnu-x86_64 \
670-
/home/builder/aws-lc/build/goboringcrypto_linux_amd64.syso \
671-
/home/builder/sdk-go/src/crypto/internal/boring/syso/goboringcrypto_linux_amd64.syso
672-
673-
COPY --from=sdk-go-1.24-aws-lc-gnu-aarch64 \
674-
/home/builder/aws-lc/build/goboringcrypto_linux_arm64.syso \
675-
/home/builder/sdk-go/src/crypto/internal/boring/syso/goboringcrypto_linux_arm64.syso
676-
677-
COPY --from=sdk-go-1.24-aws-lc-musl-x86_64 \
678-
/home/builder/aws-lc/build/goboringcrypto_linux_amd64.syso \
679-
/home/builder/sdk-go/src/crypto/internal/boring/syso/goboringcrypto_linux_musl_amd64.syso
680-
681-
COPY --from=sdk-go-1.24-aws-lc-musl-aarch64 \
682-
/home/builder/aws-lc/build/goboringcrypto_linux_arm64.syso \
683-
/home/builder/sdk-go/src/crypto/internal/boring/syso/goboringcrypto_linux_musl_arm64.syso
655+
# FIPS/boringcrypto disabled - skipping aws-lc syso files
684656

685657
COPY ./helpers/go/build-go.sh ./
686658

@@ -1174,16 +1146,12 @@ COPY --chown=0:0 --from=sdk-go-1.24 \
11741146
/home/builder/sdk-go/licenses/ \
11751147
/usr/share/licenses/go-1.24/
11761148

1177-
# Create Go trees for the different glibc and musl builds of the AWS-LC syso.
1149+
# Create Go trees for musl builds (no boringcrypto syso files).
11781150
# Sync timestamps to avoid rebuilds of the Go standard library.
11791151
RUN \
11801152
for v in 1.24 1.25 ; do \
11811153
find /usr/libexec/go-${v} -type f -exec touch -r /usr/libexec/go-${v}/bin/go {} \+ && \
1182-
rsync -aq --link-dest=/usr/libexec/go-${v}/ /usr/libexec/go-${v}{,-musl}/ && \
1183-
rm /usr/libexec/go-${v}/src/crypto/internal/boring/syso/goboringcrypto_linux_musl_{arm,amd}64.syso && \
1184-
rm /usr/libexec/go-${v}-musl/src/crypto/internal/boring/syso/goboringcrypto_linux_{arm,amd}64.syso && \
1185-
mv /usr/libexec/go-${v}-musl/src/crypto/internal/boring/syso/goboringcrypto_linux_{musl_,}amd64.syso && \
1186-
mv /usr/libexec/go-${v}-musl/src/crypto/internal/boring/syso/goboringcrypto_linux_{musl_,}arm64.syso ; \
1154+
rsync -aq --link-dest=/usr/libexec/go-${v}/ /usr/libexec/go-${v}{,-musl}/ ; \
11871155
done
11881156

11891157
# "sdk-rust-tools" has our attribution generation and license scan tools.

macros/check-fips

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -25,49 +25,6 @@ if [ ! -d "${BUILDROOT_BINDIR}" ] && [ ! -d "${BUILDROOT_LIBEXECDIR}" ] ; then
2525
exit 0
2626
fi
2727

28-
is_go_bin() {
29-
local bin
30-
bin="${1:?}"
31-
go version "${bin}" 2>&1 | grep -Fqw -v 'not a Go executable'
32-
}
33-
34-
uses_go_crypto_tls() {
35-
local bin output
36-
bin="${1:?}"
37-
output="$("${STRINGS}" "${bin}")"
38-
grep -Fqw -m1 'crypto/tls' <<<"${output}"
39-
}
40-
41-
uses_go_boring_crypto() {
42-
local bin output
43-
bin="${1:?}"
44-
output="$("${STRINGS}" "${bin}")"
45-
grep -Fq -m1 'goboringcrypto' <<<"${output}"
46-
}
47-
48-
check_go_bin() {
49-
local b f
50-
b="${1:?}"
51-
f="${2:?}"
52-
if uses_go_crypto_tls "${b}" ; then
53-
if [ -s "${f}" ] ; then
54-
echo "${b} uses Go crypto/tls and FIPS build found in ${f}"
55-
(( found+=1 ))
56-
if uses_go_boring_crypto "${b}" ; then
57-
echo "${b} is built with FIPS crypto rather than standard crypto" >&2
58-
(( miscompiled+=1 ))
59-
fi
60-
if ! uses_go_boring_crypto "${f}"; then
61-
echo "${f} is built with standard crypto rather than FIPS crypto" >&2
62-
(( miscompiled+=1 ))
63-
fi
64-
else
65-
echo "${b} uses Go crypto/tls but no FIPS build found in ${f}" >&2
66-
(( not_found+=1 ))
67-
fi
68-
fi
69-
}
70-
7128
is_rust_bin() {
7229
local bin output
7330
bin="${1:?}"
@@ -131,9 +88,7 @@ miscompiled=0
13188
for b in $(find "${BUILDROOT_BINDIR}" "${BUILDROOT_LIBEXECDIR}" -type f -executable) ; do
13289
f="${b/${BUILDROOT_BINDIR}/${BUILDROOT_FIPS_BINDIR}}"
13390
f="${f/${BUILDROOT_LIBEXECDIR}/${BUILDROOT_FIPS_LIBEXECDIR}}"
134-
if is_go_bin "${b}"; then
135-
check_go_bin "${b}" "${f}"
136-
elif is_rust_bin "${b}"; then
91+
if is_rust_bin "${b}"; then
13792
check_rust_bin "${b}" "${f}"
13893
fi
13994
done

0 commit comments

Comments
 (0)