MCPcopy Create free account
hub / github.com/docker/buildx / dockerMaterialSource

Function dockerMaterialSource

policy/materials.go:57–88  ·  view source on GitHub ↗
(uri string, dgst map[string]string)

Source from the content-addressed store, hash-verified

55}
56
57func dockerMaterialSource(uri string, dgst map[string]string) (*pb.SourceOp, *ocispecs.Platform, error) {
58 refStr, platform, err := purl.PURLToRef(uri)
59 if err != nil {
60 return nil, nil, err
61 }
62
63 named, err := reference.ParseNormalizedNamed(refStr)
64 if err != nil {
65 return nil, nil, errors.Wrapf(err, "invalid docker reference %q from %q", refStr, uri)
66 }
67 if checksum := strings.TrimSpace(dgst["sha256"]); checksum != "" {
68 dgstRef, err := digest.Parse(checksum)
69 if err != nil {
70 dgstRef, err = digest.Parse("sha256:" + checksum)
71 }
72 if err != nil {
73 return nil, nil, errors.Wrapf(err, "invalid material digest %q for %q", checksum, uri)
74 }
75 if canonical, ok := named.(reference.Canonical); ok {
76 if canonical.Digest() != dgstRef {
77 return nil, nil, errors.Errorf("material digest mismatch for %q: ref has %s but provenance has %s", uri, canonical.Digest(), dgstRef)
78 }
79 } else {
80 named, err = reference.WithDigest(named, dgstRef)
81 if err != nil {
82 return nil, nil, errors.Wrapf(err, "failed to add digest %q to %q", dgstRef, refStr)
83 }
84 }
85 }
86
87 return &pb.SourceOp{Identifier: "docker-image://" + named.String()}, platform, nil
88}
89
90func gitMaterialSource(uri string) (*pb.SourceOp, *ocispecs.Platform, error) {
91 gu, err := gitutil.ParseURL(uri)

Callers 1

parseSLSAMaterialFunction · 0.85

Calls 3

DigestMethod · 0.80
WithDigestMethod · 0.80
StringMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…