Skip to content

Commit 09afead

Browse files
committed
NVSHAS-6217: implement named roots of trust
1 parent 46b5056 commit 09afead

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

main.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,32 @@ import (
2525

2626
type Configuration struct {
2727
ImageDigest string `json:"ImageDigest"`
28-
RootOfTrust RootOfTrust `json:"RootOfTrust"`
29-
Verifiers []Verifier `json:"Verifiers"`
28+
RootsOfTrust []RootOfTrust `json:"RootsOfTrust"`
3029
SignatureData SignatureData `json:"SignatureData"`
3130
}
3231

3332
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"`
3738
}
3839

3940
type Verifier struct {
4041
Name string `json:"Name"`
4142
Type string `json:"Type"`
4243
IgnoreTLog bool `json:"IgnoreTLog"`
4344
IgnoreSCT bool `json:"IgnoreSCT"`
44-
KeyPairOptions KeyPairVerifierOptions `json:"KeyPairOptions"`
45-
KeylessOptions KeylessVerifierOptions `json:"KeylessOptions"`
45+
KeyPairOptions VerifierKeyPairOptions `json:"KeyPairOptions"`
46+
KeylessOptions VerifierKeylessOptions `json:"KeylessOptions"`
4647
}
4748

48-
type KeyPairVerifierOptions struct {
49+
type VerifierKeyPairOptions struct {
4950
PublicKey string `json:"PublicKey"`
5051
}
5152

52-
type KeylessVerifierOptions struct {
53+
type VerifierKeylessOptions struct {
5354
CertIssuer string `json:"CertIssuer"`
5455
CertSubject string `json:"CertSubject"`
5556
}
@@ -75,9 +76,12 @@ func main() {
7576
log.Fatalf("error generating objects for signature data: %s", err.Error())
7677
}
7778

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+
}
8185
}
8286

8387
fmt.Println("satisfied verifiers")
@@ -115,14 +119,14 @@ func generateCosignSignatureObjects(sigData SignatureData) ([]oci.Signature, err
115119
return signatures, nil
116120
}
117121

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) {
119123
ctx := context.Background()
120124
cosignOptions := cosign.CheckOpts{ClaimVerifier: cosign.SimpleClaimVerifier}
121-
err = setRootOfTrustCosignOptions(&cosignOptions, config.RootOfTrust, ctx)
125+
err = setRootOfTrustCosignOptions(&cosignOptions, rootOfTrust, ctx)
122126
if err != nil {
123127
return satisfiedVerifiers, fmt.Errorf("could not set root of trust cosign check options: %s", err.Error())
124128
}
125-
for _, verifier := range config.Verifiers {
129+
for _, verifier := range rootOfTrust.Verifiers {
126130
fmt.Printf("checking verifier %s\n", verifier.Name)
127131
err = setVerifierCosignOptions(&cosignOptions, verifier, ctx)
128132
if err != nil {
@@ -136,7 +140,7 @@ func verify(imgDigest v1.Hash, config Configuration, sigs []oci.Signature) (sati
136140
}
137141
if err == nil {
138142
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))
140144
break
141145
}
142146
}

0 commit comments

Comments
 (0)