@@ -10,11 +10,13 @@ import (
10
10
"log"
11
11
"os"
12
12
13
- "github.com/slsa-framework/slsa-verifier/verification"
13
+ "github.com/slsa-framework/slsa-verifier/options"
14
+ "github.com/slsa-framework/slsa-verifier/verifiers"
14
15
)
15
16
16
17
var (
17
18
provenancePath string
19
+ builderID string
18
20
artifactPath string
19
21
source string
20
22
branch string
24
26
)
25
27
26
28
func main () {
29
+ flag .StringVar (& builderID , "builder-id" , "" , "EXPERIMENTAL: the unique builder ID who created the provenance" )
27
30
flag .StringVar (& provenancePath , "provenance" , "" , "path to a provenance file" )
28
31
flag .StringVar (& artifactPath , "artifact-path" , "" , "path to an artifact to verify" )
29
32
flag .StringVar (& source , "source" , "" ,
@@ -41,21 +44,26 @@ func main() {
41
44
os .Exit (1 )
42
45
}
43
46
44
- var ptag , pversiontag * string
47
+ var pbuilderID , ptag , pversiontag * string
45
48
49
+ // Note: nil tag, version-tag and builder-id means we ignore them during verification.
46
50
if isFlagPassed ("tag" ) {
47
51
ptag = & tag
48
52
}
49
53
if isFlagPassed ("versioned-tag" ) {
50
54
pversiontag = & versiontag
51
55
}
56
+ if isFlagPassed ("builder-id" ) {
57
+ pbuilderID = & builderID
58
+ }
52
59
53
60
if ptag != nil && pversiontag != nil {
54
61
fmt .Fprintf (os .Stderr , "'version' and 'tag' options cannot be used together\n " )
55
62
os .Exit (1 )
56
63
}
57
64
58
- verifiedProvenance , err := runVerify (artifactPath , provenancePath , source , branch , ptag , pversiontag )
65
+ verifiedProvenance , _ , err := runVerify (artifactPath , provenancePath , source ,
66
+ branch , pbuilderID , ptag , pversiontag )
59
67
if err != nil {
60
68
fmt .Fprintf (os .Stderr , "FAILED: SLSA verification failed: %v\n " , err )
61
69
os .Exit (2 )
@@ -78,7 +86,9 @@ func isFlagPassed(name string) bool {
78
86
return found
79
87
}
80
88
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 ) {
82
92
f , err := os .Open (artifactPath )
83
93
if err != nil {
84
94
log .Fatal (err )
@@ -87,7 +97,7 @@ func runVerify(artifactPath, provenancePath, source, branch string, ptag, pversi
87
97
88
98
provenance , err := os .ReadFile (provenancePath )
89
99
if err != nil {
90
- return nil , err
100
+ return nil , "" , err
91
101
}
92
102
93
103
h := sha256 .New ()
@@ -96,15 +106,19 @@ func runVerify(artifactPath, provenancePath, source, branch string, ptag, pversi
96
106
}
97
107
artifactHash := hex .EncodeToString (h .Sum (nil ))
98
108
99
- provenanceOpts := & verification.ProvenanceOpts {
109
+ provenanceOpts := & options.ProvenanceOpts {
110
+ ExpectedSourceURI : source ,
100
111
ExpectedBranch : branch ,
101
112
ExpectedDigest : artifactHash ,
102
113
ExpectedVersionedTag : pversiontag ,
103
114
ExpectedTag : ptag ,
104
115
}
105
116
117
+ builderOpts := & options.BuilderOpts {
118
+ ExpectedID : builderID ,
119
+ }
120
+
106
121
ctx := context .Background ()
107
- return verification .Verify (ctx , provenance ,
108
- artifactHash ,
109
- source , provenanceOpts )
122
+ return verifiers .Verify (ctx , provenance ,
123
+ artifactHash , provenanceOpts , builderOpts )
110
124
}
0 commit comments