@@ -516,6 +516,101 @@ func TestSignVerifyEnv(t *testing.T) {
516516 }
517517}
518518
519+ func TestSignVerify_IgnoredEnvVars (t * testing.T ) {
520+ t .Parallel ()
521+ ctx := context .Background ()
522+
523+ keyStr , keyAlg := "alpacas" , jwa .HS256
524+ signer , verifier , err := jwkutil .NewSymmetricKeyPairFromString (keyID , keyStr , keyAlg )
525+ if err != nil {
526+ t .Fatalf ("jwkutil.NewSymmetricKeyPairFromString(%q, %q, %q) error = %v" , keyID , keyStr , keyAlg , err )
527+ }
528+
529+ key , ok := signer .Key (0 )
530+ if ! ok {
531+ t .Fatalf ("signer.Key(0) = _, false, want true" )
532+ }
533+
534+ toSign := & CommandStepWithInvariants {
535+ CommandStep : pipeline.CommandStep {
536+ Command : "llamas" ,
537+ Env : map [string ]string {
538+ "CONTEXT" : "cats" ,
539+ // "DEPLOY": "0",
540+ },
541+ },
542+ RepositoryURL : fakeRepositoryURL ,
543+ }
544+
545+ toVerify := & CommandStepWithInvariants {
546+ CommandStep : pipeline.CommandStep {
547+ Command : "llamas" ,
548+ Env : map [string ]string {
549+ "CONTEXT" : "dogs" , // Changed from "cats"
550+ // "DEPLOY": "0",
551+ },
552+ },
553+ RepositoryURL : fakeRepositoryURL ,
554+ }
555+
556+ sig , err := Sign (ctx , key , toSign , IgnoringEnvVars ("CONTEXT" ))
557+ if err != nil {
558+ t .Fatalf ("Sign(ctx, key, %v) error = %v" , toSign , err )
559+ }
560+
561+ if err := Verify (ctx , sig , verifier , toVerify , IgnoringEnvVars ("CONTEXT" )); err != nil {
562+ t .Errorf ("Verify(ctx, %v, verifier, %v) = %v" , sig , toVerify , err )
563+ }
564+ }
565+
566+ // In this test, we have a step with no env, then sign it with a pipeline env that has an ignored env var.
567+ // Then, we verify the step having changed the ignored env var in the step env. It should verify successfully,
568+ // because the ignored env var is not included in the signature.
569+ func TestSignVerify_IgnoredEnvVars_WithEnv (t * testing.T ) {
570+ t .Parallel ()
571+ ctx := context .Background ()
572+
573+ keyStr , keyAlg := "alpacas" , jwa .HS256
574+ signer , verifier , err := jwkutil .NewSymmetricKeyPairFromString (keyID , keyStr , keyAlg )
575+ if err != nil {
576+ t .Fatalf ("jwkutil.NewSymmetricKeyPairFromString(%q, %q, %q) error = %v" , keyID , keyStr , keyAlg , err )
577+ }
578+
579+ key , ok := signer .Key (0 )
580+ if ! ok {
581+ t .Fatalf ("signer.Key(0) = _, false, want true" )
582+ }
583+
584+ toSign := & CommandStepWithInvariants {
585+ CommandStep : pipeline.CommandStep {Command : "llamas" },
586+ RepositoryURL : fakeRepositoryURL ,
587+ }
588+
589+ ignored := "ENV_VAR_TO_CHANGE"
590+ pipelineEnv := map [string ]string {
591+ ignored : "cats" ,
592+ }
593+
594+ toVerify := & CommandStepWithInvariants {
595+ CommandStep : pipeline.CommandStep {
596+ Command : "llamas" ,
597+ Env : map [string ]string {
598+ ignored : "dogs" ,
599+ },
600+ },
601+ RepositoryURL : fakeRepositoryURL ,
602+ }
603+
604+ sig , err := Sign (ctx , key , toSign , WithEnv (pipelineEnv ), IgnoringEnvVars (ignored ))
605+ if err != nil {
606+ t .Fatalf ("Sign(ctx, key, %v) error = %v" , toSign , err )
607+ }
608+
609+ if err := Verify (ctx , sig , verifier , toVerify , WithEnv (pipelineEnv ), IgnoringEnvVars (ignored )); err != nil {
610+ t .Errorf ("Verify(ctx, %v, verifier, %v) = %v" , sig , toVerify , err )
611+ }
612+ }
613+
519614func TestSignVerify_NilVsEmpty (t * testing.T ) {
520615 t .Parallel ()
521616 ctx := context .Background ()
0 commit comments