Skip to content

Commit edb792b

Browse files
authored
feat: Create interface for verifiers (#187)
* update * update * unit tests * update * comments * update * update * update * update * Use interface for builders * update * update * update * update * fix * update * update * update * update * update * update * update * update * update * update * update * update
1 parent 0cf9e9c commit edb792b

33 files changed

+1131
-239
lines changed

cli/slsa-verifier/main.go

+23-9
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ import (
1010
"log"
1111
"os"
1212

13-
"github.com/slsa-framework/slsa-verifier/verification"
13+
"github.com/slsa-framework/slsa-verifier/options"
14+
"github.com/slsa-framework/slsa-verifier/verifiers"
1415
)
1516

1617
var (
1718
provenancePath string
19+
builderID string
1820
artifactPath string
1921
source string
2022
branch string
@@ -24,6 +26,7 @@ var (
2426
)
2527

2628
func main() {
29+
flag.StringVar(&builderID, "builder-id", "", "EXPERIMENTAL: the unique builder ID who created the provenance")
2730
flag.StringVar(&provenancePath, "provenance", "", "path to a provenance file")
2831
flag.StringVar(&artifactPath, "artifact-path", "", "path to an artifact to verify")
2932
flag.StringVar(&source, "source", "",
@@ -41,21 +44,26 @@ func main() {
4144
os.Exit(1)
4245
}
4346

44-
var ptag, pversiontag *string
47+
var pbuilderID, ptag, pversiontag *string
4548

49+
// Note: nil tag, version-tag and builder-id means we ignore them during verification.
4650
if isFlagPassed("tag") {
4751
ptag = &tag
4852
}
4953
if isFlagPassed("versioned-tag") {
5054
pversiontag = &versiontag
5155
}
56+
if isFlagPassed("builder-id") {
57+
pbuilderID = &builderID
58+
}
5259

5360
if ptag != nil && pversiontag != nil {
5461
fmt.Fprintf(os.Stderr, "'version' and 'tag' options cannot be used together\n")
5562
os.Exit(1)
5663
}
5764

58-
verifiedProvenance, err := runVerify(artifactPath, provenancePath, source, branch, ptag, pversiontag)
65+
verifiedProvenance, _, err := runVerify(artifactPath, provenancePath, source,
66+
branch, pbuilderID, ptag, pversiontag)
5967
if err != nil {
6068
fmt.Fprintf(os.Stderr, "FAILED: SLSA verification failed: %v\n", err)
6169
os.Exit(2)
@@ -78,7 +86,9 @@ func isFlagPassed(name string) bool {
7886
return found
7987
}
8088

81-
func runVerify(artifactPath, provenancePath, source, branch string, ptag, pversiontag *string) ([]byte, error) {
89+
func runVerify(artifactPath, provenancePath, source, branch string,
90+
builderID, ptag, pversiontag *string,
91+
) ([]byte, string, error) {
8292
f, err := os.Open(artifactPath)
8393
if err != nil {
8494
log.Fatal(err)
@@ -87,7 +97,7 @@ func runVerify(artifactPath, provenancePath, source, branch string, ptag, pversi
8797

8898
provenance, err := os.ReadFile(provenancePath)
8999
if err != nil {
90-
return nil, err
100+
return nil, "", err
91101
}
92102

93103
h := sha256.New()
@@ -96,15 +106,19 @@ func runVerify(artifactPath, provenancePath, source, branch string, ptag, pversi
96106
}
97107
artifactHash := hex.EncodeToString(h.Sum(nil))
98108

99-
provenanceOpts := &verification.ProvenanceOpts{
109+
provenanceOpts := &options.ProvenanceOpts{
110+
ExpectedSourceURI: source,
100111
ExpectedBranch: branch,
101112
ExpectedDigest: artifactHash,
102113
ExpectedVersionedTag: pversiontag,
103114
ExpectedTag: ptag,
104115
}
105116

117+
builderOpts := &options.BuilderOpts{
118+
ExpectedID: builderID,
119+
}
120+
106121
ctx := context.Background()
107-
return verification.Verify(ctx, provenance,
108-
artifactHash,
109-
source, provenanceOpts)
122+
return verifiers.Verify(ctx, provenance,
123+
artifactHash, provenanceOpts, builderOpts)
110124
}

0 commit comments

Comments
 (0)