MCPcopy Create free account
hub / github.com/docker/cli / matchReleasedSignatures

Function matchReleasedSignatures

cmd/docker-trust/trust/common.go:143–171  ·  view source on GitHub ↗

aggregate all signers for a "released" hash+tagname pair. To be "released," the tag must have been signed into the "targets" or "targets/releases" role. Output is sorted by tag name

(allTargets []client.TargetSignedStruct)

Source from the content-addressed store, hash-verified

141// aggregate all signers for a "released" hash+tagname pair. To be "released," the tag must have been
142// signed into the "targets" or "targets/releases" role. Output is sorted by tag name
143func matchReleasedSignatures(allTargets []client.TargetSignedStruct) []trustTagRow {
144 signatureRows := []trustTagRow{}
145 // do a first pass to get filter on tags signed into "targets" or "targets/releases"
146 releasedTargetRows := map[trustTagKey][]string{}
147 for _, tgt := range allTargets {
148 if isReleasedTarget(tgt.Role.Name) {
149 releasedKey := trustTagKey{tgt.Target.Name, hex.EncodeToString(tgt.Target.Hashes[notary.SHA256])}
150 releasedTargetRows[releasedKey] = []string{}
151 }
152 }
153
154 // now fill out all signers on released keys
155 for _, tgt := range allTargets {
156 targetKey := trustTagKey{tgt.Target.Name, hex.EncodeToString(tgt.Target.Hashes[notary.SHA256])}
157 // only considered released targets
158 if _, ok := releasedTargetRows[targetKey]; ok && !isReleasedTarget(tgt.Role.Name) {
159 releasedTargetRows[targetKey] = append(releasedTargetRows[targetKey], notaryRoleToSigner(tgt.Role.Name))
160 }
161 }
162
163 // compile the final output as a sorted slice
164 for targetKey, signers := range releasedTargetRows {
165 signatureRows = append(signatureRows, trustTagRow{targetKey, signers})
166 }
167 sort.Slice(signatureRows, func(i, j int) bool {
168 return sortorder.NaturalLess(signatureRows[i].SignedTag, signatureRows[j].SignedTag)
169 })
170 return signatureRows
171}
172
173// authResolver returns an auth resolver function from a [config.Provider].
174func authResolver(dockerCLI config.Provider) func(ctx context.Context, index *registrytypes.IndexInfo) registrytypes.AuthConfig {

Calls 2

isReleasedTargetFunction · 0.85
notaryRoleToSignerFunction · 0.85

Used in the wild real call sites across dependent graphs

searching dependent graphs…