From ba51cdd2d969943a5edd2ecbab290323e6b0d4e2 Mon Sep 17 00:00:00 2001 From: Douglas Stebila Date: Mon, 2 Nov 2026 14:02:58 -0500 Subject: [PATCH 1/2] Sign a 64-byte mu in testAllSigs for ML-DSA-*-extmu liboqs enables ML-DSA-44-extmu, ML-DSA-65-extmu and ML-DSA-87-extmu by default. They sign an externally computed 64-byte mu rather than an arbitrary message, and reject any other message length. testAllSigs signed the same 27-byte message with every enabled algorithm, so it failed for these three, and mvn package failed against liboqs main. Sign a 64-byte mu for the extmu variants, as liboqs's own test_sig.c does. Signed-off-by: Douglas Stebila Co-Authored-By: Claude Opus 5.5 --- src/test/java/org/openquantumsafe/SigTest.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/openquantumsafe/SigTest.java b/src/test/java/org/openquantumsafe/SigTest.java index d1f283f..4309634 100644 --- a/src/test/java/org/openquantumsafe/SigTest.java +++ b/src/test/java/org/openquantumsafe/SigTest.java @@ -16,6 +16,9 @@ public class SigTest { private final byte[] message = "This is the message to sign".getBytes(); + // The ML-DSA-*-extmu variants sign an externally computed 64-byte mu + // instead of the message itself + private final byte[] mu = new byte[64]; private static ArrayList enabled_sigs; /** @@ -45,11 +48,13 @@ public void testAllSigs(String sig_name) { // Generate signer key pair byte[] signer_public_key = signer.generate_keypair(); + byte[] to_sign = sig_name.endsWith("-extmu") ? mu : message; + // Sign the message - byte[] signature = signer.sign(message); + byte[] signature = signer.sign(to_sign); // Verify the signature - boolean is_valid = verifier.verify(message, signature, signer_public_key); + boolean is_valid = verifier.verify(to_sign, signature, signer_public_key); assertTrue(is_valid, sig_name); From df3d58d567e092747d133ac9694169395d37dc24 Mon Sep 17 00:00:00 2001 From: Douglas Stebila Date: Mon, 2 Nov 2026 14:16:12 -0500 Subject: [PATCH 2/2] Use a random mu in testAllSigs for ML-DSA-*-extmu An all-zero mu would not catch the wrapper passing a zeroed buffer to liboqs instead of the caller's bytes. Use random bytes, as liboqs's test_sig.c does. Signed-off-by: Douglas Stebila Co-Authored-By: Claude Opus 5.5 --- src/test/java/org/openquantumsafe/SigTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/openquantumsafe/SigTest.java b/src/test/java/org/openquantumsafe/SigTest.java index 4309634..4d2e4af 100644 --- a/src/test/java/org/openquantumsafe/SigTest.java +++ b/src/test/java/org/openquantumsafe/SigTest.java @@ -18,7 +18,7 @@ public class SigTest { private final byte[] message = "This is the message to sign".getBytes(); // The ML-DSA-*-extmu variants sign an externally computed 64-byte mu // instead of the message itself - private final byte[] mu = new byte[64]; + private final byte[] mu = Rand.randombytes(64); private static ArrayList enabled_sigs; /**