Skip to content

Commit 4a981c2

Browse files
committed
Use digest for normalized edges as well
Signed-off-by: Sascha Grunert <[email protected]>
1 parent 1f339cc commit 4a981c2

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

internal/promoter/image/sign.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,12 @@ func (di *DefaultPromoterImplementation) SignImages(
121121
// used at all and images would be signed with a wrong identity.
122122
di.signer = sign.New(signOpts)
123123

124-
// We only sign the first normalized image of each edge.
125-
sortedEdges := map[string][]reg.PromotionEdge{}
124+
// We only sign the first normalized image per digest of each edge.
125+
type key struct {
126+
identity string
127+
digest image.Digest
128+
}
129+
sortedEdges := map[key][]reg.PromotionEdge{}
126130
for edge := range edges {
127131
// Skip signing the signature, sbom and attestation layers
128132
if strings.HasSuffix(string(edge.DstImageTag.Tag), ".sig") ||
@@ -131,19 +135,19 @@ func (di *DefaultPromoterImplementation) SignImages(
131135
continue
132136
}
133137

134-
identity := targetIdentity(&edge)
135-
if _, ok := sortedEdges[identity]; !ok {
136-
sortedEdges[identity] = []reg.PromotionEdge{}
138+
k := key{identity: targetIdentity(&edge), digest: edge.Digest}
139+
if _, ok := sortedEdges[k]; !ok {
140+
sortedEdges[k] = []reg.PromotionEdge{}
137141
}
138-
sortedEdges[identity] = append(sortedEdges[identity], edge)
142+
sortedEdges[k] = append(sortedEdges[k], edge)
139143
}
140144

141145
t := throttler.New(opts.MaxSignatureOps, len(sortedEdges))
142146
// Sign the required edges
143147
for d := range sortedEdges {
144148
d := d
145-
go func(identity string) {
146-
t.Done(di.signAndReplicate(signOpts, identity, sortedEdges[identity]))
149+
go func(k key) {
150+
t.Done(di.signAndReplicate(signOpts, k.identity, sortedEdges[k]))
147151
}(d)
148152
if t.Throttle() > 0 {
149153
break

0 commit comments

Comments
 (0)