@@ -25,31 +25,32 @@ import (
25
25
26
26
type Configuration struct {
27
27
ImageDigest string `json:"ImageDigest"`
28
- RootOfTrust RootOfTrust `json:"RootOfTrust"`
29
- Verifiers []Verifier `json:"Verifiers"`
28
+ RootsOfTrust []RootOfTrust `json:"RootsOfTrust"`
30
29
SignatureData SignatureData `json:"SignatureData"`
31
30
}
32
31
33
32
type RootOfTrust struct {
34
- RekorPublicKey string `json:"RekorPublicKey"`
35
- RootCert string `json:"RootCert"`
36
- SCTPublicKey string `json:"SCTPublicKey"`
33
+ Name string `json:"Name"`
34
+ RekorPublicKey string `json:"RekorPublicKey"`
35
+ RootCert string `json:"RootCert"`
36
+ SCTPublicKey string `json:"SCTPublicKey"`
37
+ Verifiers []Verifier `json:"Verifiers"`
37
38
}
38
39
39
40
type Verifier struct {
40
41
Name string `json:"Name"`
41
42
Type string `json:"Type"`
42
43
IgnoreTLog bool `json:"IgnoreTLog"`
43
44
IgnoreSCT bool `json:"IgnoreSCT"`
44
- KeyPairOptions KeyPairVerifierOptions `json:"KeyPairOptions"`
45
- KeylessOptions KeylessVerifierOptions `json:"KeylessOptions"`
45
+ KeyPairOptions VerifierKeyPairOptions `json:"KeyPairOptions"`
46
+ KeylessOptions VerifierKeylessOptions `json:"KeylessOptions"`
46
47
}
47
48
48
- type KeyPairVerifierOptions struct {
49
+ type VerifierKeyPairOptions struct {
49
50
PublicKey string `json:"PublicKey"`
50
51
}
51
52
52
- type KeylessVerifierOptions struct {
53
+ type VerifierKeylessOptions struct {
53
54
CertIssuer string `json:"CertIssuer"`
54
55
CertSubject string `json:"CertSubject"`
55
56
}
@@ -75,9 +76,12 @@ func main() {
75
76
log .Fatalf ("error generating objects for signature data: %s" , err .Error ())
76
77
}
77
78
78
- satisfiedVerifiers , err := verify (imageDigestHash , config , signatures )
79
- if err != nil {
80
- log .Fatalf ("error verifying signatures: %s" , err .Error ())
79
+ satisfiedVerifiers := []string {}
80
+ for _ , rootOfTrust := range config .RootsOfTrust {
81
+ satisfiedVerifiers , err = verify (imageDigestHash , rootOfTrust , signatures )
82
+ if err != nil {
83
+ log .Fatalf ("error verifying signatures: %s" , err .Error ())
84
+ }
81
85
}
82
86
83
87
fmt .Println ("satisfied verifiers" )
@@ -115,14 +119,14 @@ func generateCosignSignatureObjects(sigData SignatureData) ([]oci.Signature, err
115
119
return signatures , nil
116
120
}
117
121
118
- func verify (imgDigest v1.Hash , config Configuration , sigs []oci.Signature ) (satisfiedVerifiers []string , err error ) {
122
+ func verify (imgDigest v1.Hash , rootOfTrust RootOfTrust , sigs []oci.Signature ) (satisfiedVerifiers []string , err error ) {
119
123
ctx := context .Background ()
120
124
cosignOptions := cosign.CheckOpts {ClaimVerifier : cosign .SimpleClaimVerifier }
121
- err = setRootOfTrustCosignOptions (& cosignOptions , config . RootOfTrust , ctx )
125
+ err = setRootOfTrustCosignOptions (& cosignOptions , rootOfTrust , ctx )
122
126
if err != nil {
123
127
return satisfiedVerifiers , fmt .Errorf ("could not set root of trust cosign check options: %s" , err .Error ())
124
128
}
125
- for _ , verifier := range config .Verifiers {
129
+ for _ , verifier := range rootOfTrust .Verifiers {
126
130
fmt .Printf ("checking verifier %s\n " , verifier .Name )
127
131
err = setVerifierCosignOptions (& cosignOptions , verifier , ctx )
128
132
if err != nil {
@@ -136,7 +140,7 @@ func verify(imgDigest v1.Hash, config Configuration, sigs []oci.Signature) (sati
136
140
}
137
141
if err == nil {
138
142
fmt .Printf ("signature %d satisfies verifier %s\n " , i , verifier .Name )
139
- satisfiedVerifiers = append (satisfiedVerifiers , verifier .Name )
143
+ satisfiedVerifiers = append (satisfiedVerifiers , fmt . Sprintf ( "%s/%s" , rootOfTrust . Name , verifier .Name ) )
140
144
break
141
145
}
142
146
}
0 commit comments