Skip to content

Commit 0b8064e

Browse files
authored
Merge pull request #1133 from sameerforge/topic/sameerkh/fips140-md5-without-enforcement
Allow non-approved MD5 use under GODEBUG=fips140=only
2 parents d6706e1 + 465c6cc commit 0b8064e

32 files changed

Lines changed: 1136 additions & 108 deletions

File tree

.github/workflows/golangci-lint.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ jobs:
1616
with:
1717
fetch-depth: '0'
1818
- name: Set up Go
19-
uses: actions/setup-go@v5
19+
uses: actions/setup-go@v6
2020
with:
2121
go-version-file: go.mod
2222
- name: golangci-lint
23-
uses: golangci/golangci-lint-action@v7
23+
uses: golangci/golangci-lint-action@v9
2424
with:
25-
version: v2.4
25+
version: v2.12.2
2626
args: -v

go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
module carvel.dev/kapp
22

3-
go 1.25.10
3+
go 1.26.5
44

55
require (
66
carvel.dev/kapp-controller v0.59.8
7-
carvel.dev/ytt v0.54.0
7+
carvel.dev/ytt v0.55.2
88
github.com/cppforlife/cobrautil v0.0.0-20221130162803-acdfead391ef
99
github.com/cppforlife/color v1.9.1-0.20200716202919-6706ac40b835
1010
github.com/cppforlife/go-cli-ui v0.0.0-20220520125801-e45d9169a663
1111
github.com/cppforlife/go-patch v0.0.0-20240118020416-2147782e467b
1212
github.com/google/go-cmp v0.7.0
13-
github.com/hashicorp/go-version v1.6.0
13+
github.com/hashicorp/go-version v1.7.0
1414
github.com/k14s/difflib v0.0.0-20240118055029-596a7a5585c3
1515
github.com/mitchellh/go-wordwrap v1.0.1
1616
github.com/openshift/crd-schema-checker v0.0.0-20240404194209-35a9033b1d11
17-
github.com/spf13/cobra v1.9.1
18-
github.com/spf13/pflag v1.0.6
17+
github.com/spf13/cobra v1.10.2
18+
github.com/spf13/pflag v1.0.10
1919
github.com/stretchr/testify v1.11.1
2020
golang.org/x/net v0.47.0
2121
gopkg.in/yaml.v2 v2.4.0

go.sum

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ carvel.dev/kapp-controller v0.59.8 h1:Uib5kAIUB7V1Q0ydNf8SzscIIjrn8a0pbXp/StljDt
22
carvel.dev/kapp-controller v0.59.8/go.mod h1:+UtZDKStv8Z7rKuTmE8rgVwGHN3Rg1wRG0i5DFxmbE4=
33
carvel.dev/vendir v0.45.3 h1:crIwlGpsdvABTiUM71IbAaanavyET7+FhnI8hrd3x3U=
44
carvel.dev/vendir v0.45.3/go.mod h1:ulOigkUjXfCYidNbHqNAtEf0MFnuwG4jhoEqG2giOnU=
5-
carvel.dev/ytt v0.54.0 h1:adVCwHnAL9cLMYdJZnJG/ax1W1mTYYSmAwIF57NBsfk=
6-
carvel.dev/ytt v0.54.0/go.mod h1:KB0zsBE4RnIbJfY0aScl2X22lbL61iO6Er6aOhX1M04=
7-
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
8-
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
5+
carvel.dev/ytt v0.55.2 h1:stQ3bevnqf8o8dVWpgT+lmTCoe9DNHz3LV/Jmskk7T0=
6+
carvel.dev/ytt v0.55.2/go.mod h1:C7g1xDPF0SwLTFZisaHFJYbYfKHi+AU7JFTBX9mLSbM=
7+
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
8+
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
99
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
1010
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
1111
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
@@ -74,8 +74,8 @@ github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgY
7474
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
7575
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
7676
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
77-
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
78-
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
77+
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
78+
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
7979
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
8080
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
8181
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
@@ -150,10 +150,11 @@ github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR
150150
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
151151
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
152152
github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
153-
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
154-
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
155-
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
156-
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
153+
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
154+
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
155+
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
156+
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
157+
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
157158
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
158159
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
159160
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=

pkg/kapp/diff/ops_diff.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package diff
55

66
import (
7+
"crypto/fips140"
78
"crypto/md5"
89
"fmt"
910

@@ -15,8 +16,16 @@ type OpsDiff patch.Ops
1516

1617
func (l OpsDiff) HasChanges() bool { return len(l) > 0 }
1718

19+
// MinimalMD5 is a non-security convenience hash used to key/dedup diffs; it
20+
// is not used for authentication or integrity verification.
21+
// WithoutEnforcement lets it run under GODEBUG=fips140=only, which otherwise
22+
// panics on any non-approved primitive regardless of how it's used.
1823
func (l OpsDiff) MinimalMD5() string {
19-
return fmt.Sprintf("%x", md5.Sum([]byte(l.MinimalString())))
24+
var sum [md5.Size]byte
25+
fips140.WithoutEnforcement(func() {
26+
sum = md5.Sum([]byte(l.MinimalString()))
27+
})
28+
return fmt.Sprintf("%x", sum)
2029
}
2130

2231
func (l OpsDiff) FullString() string { return "" }

pkg/kapp/diff/text_diff.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package diff
55

66
import (
7+
"crypto/fips140"
78
"crypto/md5"
89
"fmt"
910
"strings"
@@ -34,8 +35,16 @@ func (l TextDiff) HasChanges() bool {
3435
return false
3536
}
3637

38+
// MinimalMD5 is a non-security convenience hash used to key/dedup diffs; it
39+
// is not used for authentication or integrity verification.
40+
// WithoutEnforcement lets it run under GODEBUG=fips140=only, which otherwise
41+
// panics on any non-approved primitive regardless of how it's used.
3742
func (l TextDiff) MinimalMD5() string {
38-
return fmt.Sprintf("%x", md5.Sum([]byte(l.MinimalString())))
43+
var sum [md5.Size]byte
44+
fips140.WithoutEnforcement(func() {
45+
sum = md5.Sum([]byte(l.MinimalString()))
46+
})
47+
return fmt.Sprintf("%x", sum)
3948
}
4049

4150
func (l TextDiff) MinimalString() string { return l.String(false) }

pkg/kapp/resources/association_label.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package resources
55

66
import (
7+
"crypto/fips140"
78
"crypto/md5"
89
"fmt"
910

@@ -25,7 +26,17 @@ func NewAssociationLabel(resource Resource) AssociationLabel {
2526

2627
func (a AssociationLabel) v1Value() string {
2728
// max 63 char for label values
28-
key := fmt.Sprintf("%x", md5.Sum([]byte(NewUniqueResourceKey(a.resource).String())))
29+
//
30+
// MD5 here is a non-security convenience hash used to keep the label
31+
// value short and stable; it is not used for authentication or
32+
// integrity verification. WithoutEnforcement lets this run under
33+
// GODEBUG=fips140=only, which otherwise panics on any non-approved
34+
// primitive regardless of how it's used.
35+
var sum [md5.Size]byte
36+
fips140.WithoutEnforcement(func() {
37+
sum = md5.Sum([]byte(NewUniqueResourceKey(a.resource).String()))
38+
})
39+
key := fmt.Sprintf("%x", sum)
2940
return kappAssociationLabelV1 + "." + key
3041
}
3142

vendor/carvel.dev/ytt/pkg/yamlmeta/internal/yaml.v2/emitterc.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,16 +127,22 @@ func yamlEmitterEmit(emitter *yamlEmitterT, event *yamlEventT) bool {
127127
yamlEventDelete(event)
128128
emitter.eventsHead++
129129
}
130+
131+
// if eventsHead is caught up, then reset events back to empty to reduce allocations
132+
if emitter.eventsHead > 0 && emitter.eventsHead == len(emitter.events) {
133+
emitter.events = emitter.events[:0]
134+
emitter.eventsHead = 0
135+
}
136+
130137
return true
131138
}
132139

133140
// Check if we need to accumulate more events before emitting.
134141
//
135142
// We accumulate extra
136-
// - 1 event for DOCUMENT-START
137-
// - 2 events for SEQUENCE-START
138-
// - 3 events for MAPPING-START
139-
//
143+
// - 1 event for DOCUMENT-START
144+
// - 2 events for SEQUENCE-START
145+
// - 3 events for MAPPING-START
140146
func yamlEmitterNeedMoreEvents(emitter *yamlEmitterT) bool {
141147
if emitter.eventsHead == len(emitter.events) {
142148
return true

vendor/carvel.dev/ytt/pkg/yttlibrary/md5.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package yttlibrary
55

66
import (
7+
"crypto/fips140"
78
"crypto/md5"
89
"fmt"
910

@@ -35,5 +36,16 @@ func (b md5Module) Sum(thread *starlark.Thread, f *starlark.Builtin, args starla
3536
return starlark.None, err
3637
}
3738

38-
return starlark.String(fmt.Sprintf("%x", md5.Sum([]byte(val)))), nil
39+
// MD5 is not a FIPS 140-3 approved algorithm. This function is a general
40+
// value-hashing convenience (e.g. for cache keys or dedup), not used for
41+
// authentication or integrity verification, so it is safe to compute
42+
// even under strict FIPS 140-3-only enforcement (GODEBUG=fips140=only).
43+
// Without this, building with the native Go FIPS 140-3 module and
44+
// running with fips140=only would panic on any call to md5.sum().
45+
var sum [md5.Size]byte
46+
fips140.WithoutEnforcement(func() {
47+
sum = md5.Sum([]byte(val))
48+
})
49+
50+
return starlark.String(fmt.Sprintf("%x", sum)), nil
3951
}

vendor/github.com/hashicorp/go-version/CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/hashicorp/go-version/LICENSE

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)