Commit afa270aa89 for openssl.org

commit afa270aa893f2e76d2db97f9b67f068ee28dacf8
Author: Norbert Pocs <norbertp@openssl.org>
Date:   Mon Jul 27 12:54:03 2026 +0200

    test: fix flaky -md and -iter mismatch checks in 20-test_enc.t

    The subtests added in f26d632a0e assert that "openssl enc -d" exits
    non-zero when the key derivation parameters do not match.  enc has no
    MAC, so a wrong key is not detectable as such; the only signal is
    whether the garbage happens to form valid PKCS#7 padding, which
    openssl-enc(1) documents as passing better than one time in 256.  With
    a random salt the tests thus failed about 0.4% of the time.

    Assert instead that mismatching parameters do not recover the
    plaintext: the decryption must either fail or produce differing output.

    Assisted-by: Claude:claude-opus-5[1m]

    Signed-off-by: Norbert Pocs <norbertp@openssl.org>

    Reviewed-by: Eugene Syromiatnikov <esyr@openssl.org>
    Reviewed-by: Saša NedvÄ›dický <sashan@openssl.org>
    Reviewed-by: Neil Horman <nhorman@openssl.org>
    MergeDate: Mon Jul 27 12:17:21 2026
    (Merged from https://github.com/openssl/openssl/pull/32083)

diff --git a/test/recipes/20-test_enc.t b/test/recipes/20-test_enc.t
index 2ad9d1f787..d8173f9761 100644
--- a/test/recipes/20-test_enc.t
+++ b/test/recipes/20-test_enc.t
@@ -154,9 +154,14 @@ plan tests => 10 + (scalar @ciphers)*2;
             "decrypt with -md sha1");
          ok(compare_text($test, "md.clear") == 0,
             "decrypted output matches the original");
+         # A mismatching digest derives a different key.  The decryption
+         # usually fails on the padding check, but with a random salt the
+         # garbage last block occasionally happens to look like valid
+         # padding, in which case it succeeds and produces garbage instead.
          ok(!run(app([$cmd, "enc", "-aes-128-cbc", "-md", "sha256", "-d", "-k", "test",
-                      "-in", "md.cipher", "-out", "md_mismatch.clear"])),
-            "decrypt fails when -md does not match the one used to encrypt");
+                      "-in", "md.cipher", "-out", "md_mismatch.clear"]))
+            || compare_text($test, "md_mismatch.clear") != 0,
+            "decrypt does not recover the plaintext when -md does not match");
      };

      subtest "-iter sets the PBKDF2 iteration count" => sub {
@@ -170,8 +175,13 @@ plan tests => 10 + (scalar @ciphers)*2;
             "decrypt with -iter 5");
          ok(compare_text($test, "iter.clear") == 0,
             "decrypted output matches the original");
+         # As with -md above, a mismatching iteration count derives a
+         # different key, so the decryption either fails on the padding check
+         # or, when the garbage happens to look like valid padding, succeeds
+         # and yields garbage.
          ok(!run(app([$cmd, "enc", "-aes-128-cbc", "-iter", "6", "-d", "-k", "test",
-                      "-in", "iter.cipher", "-out", "iter_mismatch.clear"])),
-            "decrypt fails when -iter does not match the one used to encrypt");
+                      "-in", "iter.cipher", "-out", "iter_mismatch.clear"]))
+            || compare_text($test, "iter_mismatch.clear") != 0,
+            "decrypt does not recover the plaintext when -iter does not match");
      };
 }