@@ -14,6 +14,7 @@ import (
1414 "os/signal"
1515 "path"
1616 "path/filepath"
17+ "strings"
1718 "syscall"
1819 "time"
1920
@@ -34,7 +35,7 @@ import (
3435var (
3536 noPGI = flag .Bool ("no-public-good" , false , "disable public good sigstore instance" )
3637 certsDir = flag .String ("certs" , "" , "Directory to where TLS certs are stored" )
37- trustDomain = flag .String ("trust-domain" , "" , "trust domain to use" )
38+ trustDomains = flag .String ("trust-domain" , "" , "comma separated trust domains to use" )
3839 tufRepo = flag .String ("tuf-repo" , "" , "URL to TUF repository" )
3940 tufRoot = flag .String ("tuf-root" , "" , "Path to a root.json used to initialize TUF repository" )
4041 ns = flag .String ("namespace" , "" , "namespace the pod runs in" )
@@ -66,17 +67,20 @@ func main() {
6667 var kc * authn.KeyChainProvider
6768 var v provider.Verifier
6869 var err error
70+ var tds []string
6971
7072 flag .Parse ()
7173
74+ tds = strings .Split (* trustDomains , "," )
75+
7276 if * tufRepo != "" && * tufRoot != "" {
7377 if v , err = loadCustomVerifier (* tufRepo ,
7478 * tufRoot ,
75- * trustDomain ); err != nil {
79+ tds ); err != nil {
7680 log .Fatal (err )
7781 }
7882 } else {
79- if v , err = loadVerifiers (! * noPGI , * trustDomain ); err != nil {
83+ if v , err = loadVerifiers (! * noPGI , tds ); err != nil {
8084 log .Fatal (err )
8185 }
8286 }
@@ -185,9 +189,11 @@ func run(ctx context.Context, srv *http.Server, cf string, kf string) error {
185189// loadCustomVerifier loads a user provided TUF root.
186190// Currently only verificatoin options with RFC3161 signed timestamps
187191// are supported.
188- func loadCustomVerifier (repo , root , td string ) (provider.Verifier , error ) {
192+ func loadCustomVerifier (repo , root string , tds []string ) (provider.Verifier , error ) {
193+ var mv = verifier.Multi {
194+ V : []* verifier.Verifier {},
195+ }
189196 var rb []byte
190- var v * verifier.Verifier
191197 var vo = []verify.VerifierOption {
192198 verify .WithSignedTimestamps (1 ),
193199 }
@@ -197,49 +203,63 @@ func loadCustomVerifier(repo, root, td string) (provider.Verifier, error) {
197203 return nil , fmt .Errorf ("failed to load verifier: %w" , err )
198204 }
199205
200- if v , err = verifier .New (rb , repo , td , vo ); err != nil {
201- return nil , fmt .Errorf ("failed to create verifier: %w" , err )
206+ for _ , td := range tds {
207+ var v * verifier.Verifier
208+
209+ if v , err = verifier .New (rb , repo , td , vo ); err != nil {
210+ return nil , fmt .Errorf ("failed to create verifier: %w" , err )
211+ }
212+
213+ mv .V = append (mv .V , v )
214+
215+ slog .Info ("loaded verifier" ,
216+ "tuf_repo" , repo ,
217+ "trust_domain" , td )
202218 }
203219
204- return v , nil
220+ if len (mv .V ) == 0 {
221+ return nil , errors .New ("no trust root provided" )
222+ }
223+
224+ return & mv , nil
205225}
206226
207227// loadVerifiers returns the default verifiers. If pgi is true and tr is
208228// the empty string, pgi and gh verifiers are returned.
209229// if the provided trust domain is set, only gh verifier is returend,
210230// with the set trust domain.
211- func loadVerifiers (pgi bool , td string ) (provider.Verifier , error ) {
231+ func loadVerifiers (pgi bool , tds [] string ) (provider.Verifier , error ) {
212232 var mv = verifier.Multi {
213- V : map [ string ]* verifier.Verifier {},
233+ V : [ ]* verifier.Verifier {},
214234 }
215235 var v * verifier.Verifier
216236 var err error
217- var dotcom bool
218237
219- // only load PGI if no tenant's trust domain is selected
220- if td == "" || td == DotcomTrustDomain {
221- dotcom = true
238+ if len (tds ) == 0 {
239+ tds = append (tds , DotcomTrustDomain )
222240 }
223241
224- if pgi && dotcom {
242+ if pgi {
225243 if v , err = verifier .PGIVerifier (); err != nil {
226244 return nil , fmt .Errorf ("failed to load PGI verifier: %w" , err )
227245 }
228- mv .V [ verifier . PublicGoodIssuer ] = v
246+ mv .V = append ( mv . V , v )
229247 slog .Info ("loaded verifier" ,
230248 "instance" , "public good Sigstore" )
231249 }
232250
233- if v , err = verifier .GHVerifier (td ); err != nil {
234- return nil , fmt .Errorf ("failed to load GitHub verifier: %w" , err )
235- }
236- mv .V [verifier .GitHubIssuer ] = v
237- if td == "" {
238- td = "dotcom"
251+ for _ , td := range tds {
252+ var v * verifier.Verifier
253+
254+ if v , err = verifier .GHVerifier (td ); err != nil {
255+ return nil , fmt .Errorf ("failed to load GitHub verifier: %w" , err )
256+ }
257+ mv .V = append (mv .V , v )
258+
259+ slog .Info ("loaded verifier" ,
260+ "instance" , "GitHub Sigstore" ,
261+ "trust_domain" , td )
239262 }
240- slog .Info ("loaded verifier" ,
241- "instance" , "GitHub Sigstore" ,
242- "trust_domain" , td )
243263
244264 return & mv , nil
245265}
0 commit comments