Skip to content

Commit 875cbc7

Browse files
committed
Calculate subjects per formatter
1 parent dc4e8ac commit 875cbc7

File tree

7 files changed

+61
-3
lines changed

7 files changed

+61
-3
lines changed

pkg/chains/formats/format.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ type Payloader interface {
2525
CreatePayload(ctx context.Context, obj interface{}) (interface{}, error)
2626
Type() config.PayloadType
2727
Wrap() bool
28+
RetrieveAllArtifactURIs(ctx context.Context, obj interface{}) ([]string, error)
2829
}
2930

3031
const (

pkg/chains/formats/simple/simple.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,7 @@ func (i SimpleContainerImage) ImageName() string {
6969
func (i *SimpleSigning) Type() config.PayloadType {
7070
return formats.PayloadTypeSimpleSigning
7171
}
72+
73+
func (i *SimpleSigning) RetrieveAllArtifactURIs(ctx context.Context, obj interface{}) ([]string, error) {
74+
return nil, fmt.Errorf("RetrieveAllArtifactURIs not supported for simeplesining formatter")
75+
}

pkg/chains/formats/slsa/v1/intotoite6.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"fmt"
2222

2323
"github.com/tektoncd/chains/pkg/chains/formats"
24+
"github.com/tektoncd/chains/pkg/chains/formats/slsa/extract"
2425
"github.com/tektoncd/chains/pkg/chains/formats/slsa/internal/slsaconfig"
2526
"github.com/tektoncd/chains/pkg/chains/formats/slsa/v1/pipelinerun"
2627
"github.com/tektoncd/chains/pkg/chains/formats/slsa/v1/taskrun"
@@ -94,3 +95,11 @@ func (i *InTotoIte6) CreatePayload(ctx context.Context, obj interface{}) (interf
9495
func (i *InTotoIte6) Type() config.PayloadType {
9596
return formats.PayloadTypeSlsav1
9697
}
98+
99+
func (i *InTotoIte6) RetrieveAllArtifactURIs(ctx context.Context, obj interface{}) ([]string, error) {
100+
tkObj, ok := obj.(objects.TektonObject)
101+
if !ok {
102+
return nil, fmt.Errorf("intoto does not support type")
103+
}
104+
return extract.RetrieveAllArtifactURIs(ctx, tkObj, i.slsaConfig.DeepInspectionEnabled), nil
105+
}

pkg/chains/formats/slsa/v2alpha3/slsav2.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"fmt"
2222

2323
"github.com/tektoncd/chains/pkg/chains/formats"
24+
"github.com/tektoncd/chains/pkg/chains/formats/slsa/extract"
2425
"github.com/tektoncd/chains/pkg/chains/formats/slsa/internal/slsaconfig"
2526
"github.com/tektoncd/chains/pkg/chains/formats/slsa/v2alpha3/internal/pipelinerun"
2627
"github.com/tektoncd/chains/pkg/chains/formats/slsa/v2alpha3/internal/taskrun"
@@ -68,3 +69,11 @@ func (s *Slsa) CreatePayload(ctx context.Context, obj interface{}) (interface{},
6869
func (s *Slsa) Type() config.PayloadType {
6970
return formats.PayloadTypeSlsav2alpha3
7071
}
72+
73+
func (s *Slsa) RetrieveAllArtifactURIs(ctx context.Context, obj interface{}) ([]string, error) {
74+
tkObj, ok := obj.(objects.TektonObject)
75+
if !ok {
76+
return nil, fmt.Errorf("intoto does not support type")
77+
}
78+
return extract.RetrieveAllArtifactURIs(ctx, tkObj, s.slsaConfig.DeepInspectionEnabled), nil
79+
}

pkg/chains/formats/slsa/v2alpha4/internal/pipelinerun/pipelinerun.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func GenerateAttestation(ctx context.Context, pro *objects.PipelineRunObjectV1,
4646
return nil, err
4747
}
4848

49-
sub := subjectDigests(ctx, pro, slsaconfig)
49+
sub := SubjectDigests(ctx, pro, slsaconfig)
5050

5151
return provenance.GetSLSA1Statement(pro, sub, &bd, bp, slsaconfig)
5252
}
@@ -73,7 +73,7 @@ func byproducts(pro *objects.PipelineRunObjectV1, slsaconfig *slsaconfig.SlsaCon
7373
return byProd, nil
7474
}
7575

76-
func subjectDigests(ctx context.Context, pro *objects.PipelineRunObjectV1, slsaconfig *slsaconfig.SlsaConfig) []*intoto.ResourceDescriptor {
76+
func SubjectDigests(ctx context.Context, pro *objects.PipelineRunObjectV1, slsaconfig *slsaconfig.SlsaConfig) []*intoto.ResourceDescriptor {
7777
subjects := extract.SubjectsFromBuildArtifact(ctx, pro.GetResults())
7878

7979
if !slsaconfig.DeepInspectionEnabled {

pkg/chains/formats/slsa/v2alpha4/slsav2.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"fmt"
2222

23+
intoto "github.com/in-toto/attestation/go/v1"
2324
"github.com/tektoncd/chains/pkg/chains/formats"
2425
"github.com/tektoncd/chains/pkg/chains/formats/slsa/internal/slsaconfig"
2526
"github.com/tektoncd/chains/pkg/chains/formats/slsa/v2alpha4/internal/pipelinerun"
@@ -74,3 +75,24 @@ func (s *Slsa) CreatePayload(ctx context.Context, obj interface{}) (interface{},
7475
func (s *Slsa) Type() config.PayloadType {
7576
return payloadTypeSlsav2alpha4
7677
}
78+
79+
func (s *Slsa) RetrieveAllArtifactURIs(ctx context.Context, obj interface{}) ([]string, error) {
80+
var subjects []*intoto.ResourceDescriptor
81+
var fullURIs []string
82+
83+
switch v := obj.(type) {
84+
case *objects.TaskRunObjectV1:
85+
subjects = taskrun.SubjectDigests(ctx, v)
86+
case *objects.PipelineRunObjectV1:
87+
subjects = pipelinerun.SubjectDigests(ctx, v, s.slsaConfig)
88+
default:
89+
return nil, fmt.Errorf("intoto does not support type: %s", v)
90+
}
91+
92+
for _, s := range subjects {
93+
for algo, digest := range s.Digest {
94+
fullURIs = append(fullURIs, fmt.Sprintf("%s@%s:%s", s.Name, algo, digest))
95+
}
96+
}
97+
return fullURIs, nil
98+
}

pkg/chains/storage/grafeas/grafeas.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ func (b *Backend) createOccurrence(ctx context.Context, obj objects.TektonObject
253253
}
254254

255255
// create Occurrence_Build for TaskRun
256-
allURIs := extract.RetrieveAllArtifactURIs(ctx, obj, b.cfg.Artifacts.PipelineRuns.DeepInspectionEnabled)
256+
allURIs := b.getAllArtifactURIs(ctx, opts.PayloadFormat, obj)
257257
for _, uri := range allURIs {
258258
occ, err := b.createBuildOccurrence(ctx, obj, payload, signature, uri)
259259
if err != nil {
@@ -264,6 +264,19 @@ func (b *Backend) createOccurrence(ctx context.Context, obj objects.TektonObject
264264
return occs, nil
265265
}
266266

267+
func (b *Backend) getAllArtifactURIs(ctx context.Context, payloadFormat config.PayloadType, obj objects.TektonObject) []string {
268+
payloader, err := formats.GetPayloader(payloadFormat, b.cfg)
269+
if err != nil {
270+
return extract.RetrieveAllArtifactURIs(ctx, obj, b.cfg.Artifacts.PipelineRuns.DeepInspectionEnabled)
271+
}
272+
273+
if uris, err := payloader.RetrieveAllArtifactURIs(ctx, obj); err == nil {
274+
return uris
275+
}
276+
277+
return extract.RetrieveAllArtifactURIs(ctx, obj, b.cfg.Artifacts.PipelineRuns.DeepInspectionEnabled)
278+
}
279+
267280
func (b *Backend) createAttestationOccurrence(ctx context.Context, payload []byte, signature string, uri string) (*pb.Occurrence, error) {
268281
occurrenceDetails := &pb.Occurrence_Attestation{
269282
Attestation: &pb.AttestationOccurrence{

0 commit comments

Comments
 (0)