You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
buildx/vendor/github.com/moby/buildkit/solver/result/attestation.go

80 lines
1.5 KiB
Go

package result
import (
pb "github.com/moby/buildkit/frontend/gateway/pb"
digest "github.com/opencontainers/go-digest"
)
const (
AttestationReasonKey = "reason"
AttestationSBOMCore = "sbom-core"
AttestationInlineOnlyKey = "inline-only"
)
const (
AttestationReasonSBOM = "sbom"
AttestationReasonProvenance = "provenance"
)
type Attestation[T any] struct {
Kind pb.AttestationKind
Metadata map[string][]byte
Ref T
Path string
ContentFunc func() ([]byte, error)
InToto InTotoAttestation
}
type InTotoAttestation struct {
PredicateType string
Subjects []InTotoSubject
}
type InTotoSubject struct {
Kind pb.InTotoSubjectKind
Name string
Digest []digest.Digest
}
func ToDigestMap(ds ...digest.Digest) map[string]string {
m := map[string]string{}
for _, d := range ds {
m[d.Algorithm().String()] = d.Encoded()
}
return m
}
func FromDigestMap(m map[string]string) []digest.Digest {
var ds []digest.Digest
for k, v := range m {
ds = append(ds, digest.NewDigestFromEncoded(digest.Algorithm(k), v))
}
return ds
}
func ConvertAttestation[U comparable, V comparable](a *Attestation[U], fn func(U) (V, error)) (*Attestation[V], error) {
var zero U
var ref V
if a.Ref != zero {
var err error
ref, err = fn(a.Ref)
if err != nil {
return nil, err
}
}
return &Attestation[V]{
Kind: a.Kind,
Metadata: a.Metadata,
Ref: ref,
Path: a.Path,
ContentFunc: a.ContentFunc,
InToto: a.InToto,
}, nil
}