Skip to content

Commit

Permalink
fix: use ExternalParameters["source"] for the Source URI for SLSA v1.…
Browse files Browse the repository at this point in the history
…0 provenance (#621)

* feat: add support for checking a source annotation when there are multiple resolveddependencies

Signed-off-by: Asra Ali <asraa@google.com>

* revert to using external parameters source key

Signed-off-by: Asra Ali <asraa@google.com>

* unused file

Signed-off-by: Asra Ali <asraa@google.com>

---------

Signed-off-by: Asra Ali <asraa@google.com>
  • Loading branch information
asraa committed May 27, 2023
1 parent 7e2c7ae commit db0560e
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 13 deletions.
6 changes: 3 additions & 3 deletions verifiers/internal/gha/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ var (
)

var defaultArtifactTrustedReusableWorkflows = map[string]bool{
trustedBuilderRepository + "/.github/workflows/generator_generic_slsa3.yml": true,
trustedBuilderRepository + "/.github/workflows/builder_go_slsa3.yml": true,
trustedBuilderRepository + "/.github/workflows/builder_docker-based_slsa3.yml": true,
trustedBuilderRepository + "/.github/workflows/generator_generic_slsa3.yml": true,
trustedBuilderRepository + "/.github/workflows/builder_go_slsa3.yml": true,
trustedBuilderRepository + "/.github/workflows/builder_container-based_slsa3.yml": true,
}

var defaultContainerTrustedReusableWorkflows = map[string]bool{
Expand Down
6 changes: 3 additions & 3 deletions verifiers/internal/gha/provenance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -362,8 +362,8 @@ func Test_verifySourceURI(t *testing.T) {
// "path": "some/path",
// },
// },
ResolvedDependencies: []slsa1.ResourceDescriptor{
{
ExternalParameters: map[string]interface{}{
"source": slsa1.ResourceDescriptor{
URI: tt.provMaterialsURI,
},
},
Expand All @@ -372,7 +372,7 @@ func Test_verifySourceURI(t *testing.T) {
}

if tt.provMaterialsURI == "" {
prov1.Predicate.BuildDefinition.ResolvedDependencies = nil
prov1.Predicate.BuildDefinition.ExternalParameters = nil
}
err = verifySourceURI(prov1, tt.expectedSourceURI, tt.allowNoMaterialRef)
if !errCmp(err, tt.err) {
Expand Down
24 changes: 17 additions & 7 deletions verifiers/internal/gha/slsaprovenance/v1.0/provenance.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package v1

import (
"encoding/json"
"fmt"
"strings"
"time"
Expand Down Expand Up @@ -38,15 +39,24 @@ func (prov *ProvenanceV1) BuilderID() (string, error) {
}

func (prov *ProvenanceV1) SourceURI() (string, error) {
// Use resolvedDependencies.
if len(prov.Predicate.BuildDefinition.ResolvedDependencies) == 0 {
return "", fmt.Errorf("%w: empty resovedDependencies", serrors.ErrorInvalidDssePayload)
// Use externalParameters.
extParams, ok := prov.Predicate.BuildDefinition.ExternalParameters.(map[string]interface{})
if !ok {
return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "external parameters type")
}
source, ok := extParams["source"]
if !ok {
return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "external parameters source not found")
}
sourceBytes, err := json.Marshal(source)
if err != nil {
return "", fmt.Errorf("%w: %s", err, "marshalling external parameters source")
}
uri := prov.Predicate.BuildDefinition.ResolvedDependencies[0].URI
if uri == "" {
return "", fmt.Errorf("%w: empty uri", serrors.ErrorMalformedURI)
var sourceResource slsa1.ResourceDescriptor
if err := json.Unmarshal(sourceBytes, &sourceResource); err != nil {
return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "external parameters source type")
}
return uri, nil
return sourceResource.URI, nil
}

// TODO(#613): Support for generators.
Expand Down

0 comments on commit db0560e

Please sign in to comment.