@@ -305,7 +305,7 @@ func ValidateAndUnpackCertWithOpts(cert *x509.Certificate, co *CheckOpts, opts .
305305 co .IntermediateCerts = subPool
306306 }
307307
308- verifier , err := signature .LoadVerifierWithOpts (cert .PublicKey , crypto . SHA256 , o .svOpts ... )
308+ verifier , err := signature .LoadVerifierWithOpts (cert .PublicKey , o .svOpts ... )
309309 if err != nil {
310310 return nil , fmt .Errorf ("invalid certificate found on signature: %w" , err )
311311 }
@@ -543,6 +543,10 @@ func (fos *fakeOCISignatures) Get() ([]oci.Signature, error) {
543543// Note that if co.ExperimentlOCI11 is set, we will attempt to verify
544544// signatures using the experimental OCI 1.1 behavior.
545545func VerifyImageSignatures (ctx context.Context , signedImgRef name.Reference , co * CheckOpts ) (checkedSignatures []oci.Signature , bundleVerified bool , err error ) {
546+ return VerifyImageSignaturesWithOpts (ctx , signedImgRef , co )
547+ }
548+
549+ func VerifyImageSignaturesWithOpts (ctx context.Context , signedImgRef name.Reference , co * CheckOpts , svOpts ... signature.SignerVerifierOption ) (checkedSignatures []oci.Signature , bundleVerified bool , err error ) {
546550 // Try first using OCI 1.1 behavior if experimental flag is set.
547551 if co .ExperimentalOCI11 {
548552 verified , bundleVerified , err := verifyImageSignaturesExperimentalOCI (ctx , signedImgRef , co )
@@ -642,7 +646,7 @@ func VerifyLocalImageSignatures(ctx context.Context, path string, co *CheckOpts)
642646 return verifySignatures (ctx , sigs , h , co )
643647}
644648
645- func verifySignatures (ctx context.Context , sigs oci.Signatures , h v1.Hash , co * CheckOpts ) (checkedSignatures []oci.Signature , bundleVerified bool , err error ) {
649+ func verifySignatures (ctx context.Context , sigs oci.Signatures , h v1.Hash , co * CheckOpts , svOpts ... signature. SignerVerifierOption ) (checkedSignatures []oci.Signature , bundleVerified bool , err error ) {
646650 sl , err := sigs .Get ()
647651 if err != nil {
648652 return nil , false , err
@@ -670,7 +674,7 @@ func verifySignatures(ctx context.Context, sigs oci.Signatures, h v1.Hash, co *C
670674 return
671675 }
672676
673- verified , err := VerifyImageSignature (ctx , sig , h , co )
677+ verified , err := VerifyImageSignatureWithOpts (ctx , sig , h , co , svOpts ... )
674678 bundlesVerified [index ] = verified
675679 if err != nil {
676680 t .Done (err )
@@ -876,13 +880,23 @@ func keyBytes(sig oci.Signature, co *CheckOpts) ([]byte, error) {
876880
877881// VerifyBlobSignature verifies a blob signature.
878882func VerifyBlobSignature (ctx context.Context , sig oci.Signature , co * CheckOpts ) (bundleVerified bool , err error ) {
883+ return VerifyBlobSignatureWithOpts (ctx , sig , co )
884+ }
885+
886+ // VerifyBlobSignature verifies a blob signature.
887+ func VerifyBlobSignatureWithOpts (ctx context.Context , sig oci.Signature , co * CheckOpts , svOpts ... signature.SignerVerifierOption ) (bundleVerified bool , err error ) {
879888 // The hash of the artifact is unused.
880- return verifyInternal (ctx , sig , v1.Hash {}, verifyOCISignature , co , signature . WithED25519ph () )
889+ return verifyInternal (ctx , sig , v1.Hash {}, verifyOCISignature , co , svOpts ... )
881890}
882891
883892// VerifyImageSignature verifies a signature
884893func VerifyImageSignature (ctx context.Context , sig oci.Signature , h v1.Hash , co * CheckOpts ) (bundleVerified bool , err error ) {
885- return verifyInternal (ctx , sig , h , verifyOCISignature , co , signature .WithED25519ph ())
894+ return VerifyImageSignatureWithOpts (ctx , sig , h , co )
895+ }
896+
897+ // VerifyImageSignature verifies a signature
898+ func VerifyImageSignatureWithOpts (ctx context.Context , sig oci.Signature , h v1.Hash , co * CheckOpts , svOpts ... signature.SignerVerifierOption ) (bundleVerified bool , err error ) {
899+ return verifyInternal (ctx , sig , h , verifyOCISignature , co , svOpts ... )
886900}
887901
888902func loadSignatureFromFile (ctx context.Context , sigRef string , signedImgRef name.Reference , co * CheckOpts ) (oci.Signatures , error ) {
@@ -1433,7 +1447,7 @@ func correctAnnotations(wanted, have map[string]interface{}) bool {
14331447
14341448// verifyImageSignaturesExperimentalOCI does all the main cosign checks in a loop, returning the verified signatures.
14351449// If there were no valid signatures, we return an error, using OCI 1.1+ behavior.
1436- func verifyImageSignaturesExperimentalOCI (ctx context.Context , signedImgRef name.Reference , co * CheckOpts ) (checkedSignatures []oci.Signature , bundleVerified bool , err error ) {
1450+ func verifyImageSignaturesExperimentalOCI (ctx context.Context , signedImgRef name.Reference , co * CheckOpts , svOpts ... signature. SignerVerifierOption ) (checkedSignatures []oci.Signature , bundleVerified bool , err error ) {
14371451 // Enforce this up front.
14381452 if co .RootCerts == nil && co .SigVerifier == nil {
14391453 return nil , false , errors .New ("one of verifier or root certs is required" )
@@ -1486,5 +1500,5 @@ func verifyImageSignaturesExperimentalOCI(ctx context.Context, signedImgRef name
14861500 }
14871501 }
14881502
1489- return verifySignatures (ctx , sigs , h , co )
1503+ return verifySignatures (ctx , sigs , h , co , svOpts ... )
14901504}
0 commit comments