1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-29 10:55:05 +00:00
kyverno/pkg/imageverification/imageverifiers/cosign/verifier_test.go
Vishal Choudhary f68706cab2
feat: add cel library for image verification (#12233)
* feat: concurrently add images to context

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

* feat: add cel library for image verification

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

* fix: add tests

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

* fix: ci

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

* fix: linter

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

* fix: type conv

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

* fix: linter

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

---------

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>
Co-authored-by: shuting <shuting@nirmata.com>
2025-02-26 00:56:17 +00:00

127 lines
3.4 KiB
Go

package cosign
import (
"context"
"testing"
"github.com/go-logr/logr"
"github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
"github.com/kyverno/kyverno/pkg/imageverification/imagedataloader"
"github.com/stretchr/testify/assert"
)
func Test_ImageSignatureVerificationKeyless(t *testing.T) {
image := "ghcr.io/jimbugwadia/pause2"
idf, err := imagedataloader.New(nil)
assert.NoError(t, err)
img, err := idf.FetchImageData(context.TODO(), image)
assert.NoError(t, err)
attestor := &v1alpha1.Attestor{
Name: "test",
Cosign: &v1alpha1.Cosign{
Keyless: &v1alpha1.Keyless{
Identities: []v1alpha1.Identity{
{
Issuer: "https://github.com/login/oauth",
Subject: "jim@nirmata.com",
},
},
},
CTLog: &v1alpha1.CTLog{
URL: "https://rekor.sigstore.dev",
InsecureIgnoreSCT: true,
},
},
}
v := Verifier{log: logr.Discard()}
err = v.VerifyImageSignature(context.TODO(), img, attestor)
assert.NoError(t, err)
}
func Test_ImageSignatureVerificationFail(t *testing.T) {
image := "ghcr.io/jimbugwadia/pause2"
idf, err := imagedataloader.New(nil)
assert.NoError(t, err)
img, err := idf.FetchImageData(context.TODO(), image)
assert.NoError(t, err)
attestor := &v1alpha1.Attestor{
Name: "test",
Cosign: &v1alpha1.Cosign{
Keyless: &v1alpha1.Keyless{
Identities: []v1alpha1.Identity{
{
Issuer: "https://github.com/login/oauth",
Subject: "jim@invalid.com",
},
},
},
CTLog: &v1alpha1.CTLog{
URL: "https://rekor.sigstore.dev",
InsecureIgnoreSCT: true,
},
},
}
v := Verifier{log: logr.Discard()}
err = v.VerifyImageSignature(context.TODO(), img, attestor)
assert.ErrorContains(t, err, "no matching signatures: none of the expected identities matched what was in the certificate")
}
func Test_ImageSignatureVerificationKeyed(t *testing.T) {
image := "ghcr.io/kyverno/test-verify-image:signed"
idf, err := imagedataloader.New(nil)
assert.NoError(t, err)
img, err := idf.FetchImageData(context.TODO(), image)
assert.NoError(t, err)
attestor := &v1alpha1.Attestor{
Name: "test",
Cosign: &v1alpha1.Cosign{
Key: &v1alpha1.Key{
Data: `-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8nXRh950IZbRj8Ra/N9sbqOPZrfM
5/KAQN0/KjHcorm/J5yctVd7iEcnessRQjU917hmKO6JWVGHpDguIyakZA==
-----END PUBLIC KEY-----`,
},
CTLog: &v1alpha1.CTLog{
URL: "https://rekor.sigstore.dev",
InsecureIgnoreTlog: true,
},
},
}
v := Verifier{log: logr.Discard()}
err = v.VerifyImageSignature(context.TODO(), img, attestor)
assert.NoError(t, err)
}
func Test_ImageSignatureVerificationKeyedFail(t *testing.T) {
image := "ghcr.io/kyverno/test-verify-image:signed"
idf, err := imagedataloader.New(nil)
assert.NoError(t, err)
img, err := idf.FetchImageData(context.TODO(), image)
assert.NoError(t, err)
attestor := &v1alpha1.Attestor{
Name: "test",
Cosign: &v1alpha1.Cosign{
Key: &v1alpha1.Key{
Data: `-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoKYkkX32oSx61B4iwKXa6llAF2dB
IoL3R/9n1SJ7s00Nfkk3z4/Ar6q8el/guUmXi8akEJMxvHnvphorVUz8vQ==
-----END PUBLIC KEY-----`,
},
CTLog: &v1alpha1.CTLog{
URL: "https://rekor.sigstore.dev",
InsecureIgnoreTlog: true,
},
},
}
v := Verifier{log: logr.Discard()}
err = v.VerifyImageSignature(context.TODO(), img, attestor)
assert.ErrorContains(t, err, "failed to verify cosign signatures")
}