@@ -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