]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
test: update the ACVP test data parser to include tests that use μ
authorPauli <ppzgs1@gmail.com>
Wed, 5 Feb 2025 03:25:09 +0000 (14:25 +1100)
committerTomas Mraz <tomas@openssl.org>
Fri, 14 Feb 2025 09:46:04 +0000 (10:46 +0100)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/26637)

test/mldsa_parse.py [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 1443e93..5d53f83
@@ -1,3 +1,5 @@
+#!/usr/bin/env python
+
 # A python program written to parse (version 42) of the ACVP test vectors for
 # ML_DSA. The 3 files that can be processed by this utility can be downloaded
 # from
@@ -24,7 +26,9 @@ def print_hexlabel(label, tag, value):
 def parse_ml_dsa_key_gen(groups):
     for grp in groups:
         for tst in grp['tests']:
-            print_label("\nKeyGen", grp['parameterSet'])
+            print("");
+            print_label("FIPSversion", ">=3.5.0")
+            print_label("KeyGen", grp['parameterSet'])
             print_label("KeyName", "tcId" + str(tst['tcId']))
             print_hexlabel("Ctrl", "seed", tst['seed'])
             print_hexlabel("CtrlOut", "pub", tst['pk'])
@@ -33,22 +37,33 @@ def parse_ml_dsa_key_gen(groups):
 def parse_ml_dsa_sig_gen(groups):
     for grp in groups:
         deter = grp['deterministic'] # Boolean
-        externalMu = grp["externalMu"] # Boolean
+        externalMu = grp['externalMu'] # Boolean
         signInterfaceExternal = (grp['signatureInterface'] == "External")
+        signPreHash = (grp['preHash'] == "preHash")
         signPure = (grp['preHash'] == "pure")
+        includeMu = True # Flag flips to only include the Ctrl mu:0 half the time
 
-        if externalMu or not signPure:
+        if signPreHash:
+            continue
+        if not externalMu and not signPure:
             continue
 
         name = grp['parameterSet'].replace('-', '_')
         for tst in grp['tests']:
             testname = name + "_" + str(tst['tcId'])
-            print_label("\nPrivateKeyRaw", testname + ":" + grp['parameterSet'] + ":" + tst['sk'])
-            print_label("\nSign-Message", grp['parameterSet'] + ":" + testname)
-            print_label("Input", tst['message'])
+            print("");
+            print_label("PrivateKeyRaw", testname + ":" + grp['parameterSet'] + ":" + tst['sk'])
+            print("");
+            print_label("FIPSversion", ">=3.5.0")
+            print_label("Sign-Message", grp['parameterSet'] + ":" + testname)
+            print_label("Input", tst['mu' if externalMu else 'message'])
             print_label("Output", tst['signature'])
             print_label("Ctrl", "message-encoding:1")
-            print_label("Ctrl", "hexcontext-string:" + tst["context"])
+            if not externalMu:
+                print_label("Ctrl", "hexcontext-string:" + tst["context"])
+                includeMu = not includeMu
+            if externalMu or includeMu:
+                print_label("Ctrl", "mu:" + ("1" if externalMu else "0"))
             print_label("Ctrl", "deterministic:" + ("1" if deter else "0"))
             if not deter:
                 print_label("Ctrl", "hextest-entropy:" + tst["rnd"])
@@ -57,22 +72,33 @@ def parse_ml_dsa_sig_ver(groups):
     for grp in groups:
         externalMu = grp["externalMu"] # Boolean
         signInterfaceExternal = (grp['signatureInterface'] == "External")
+        signPreHash = (grp['preHash'] == "preHash")
         signPure = (grp['preHash'] == "pure")
+        includeMu = True # Flag flips to only include the Ctrl mu:0 half the time
 
-        if externalMu or not signPure:
+        if signPreHash:
+            continue
+        if not externalMu and not signPure:
             continue
 
         name = grp['parameterSet'].replace('-', '_')
         for tst in grp['tests']:
             testname = name + "_" + str(tst['tcId'])
-            print_label("\nPublicKeyRaw", testname + ":" + grp['parameterSet'] + ":" + tst['pk'] + "\n")
+            print("");
+            print_label("PublicKeyRaw", testname + ":" + grp['parameterSet'] + ":" + tst['pk'])
+            print("");
             if "reason" in tst:
                 print("# " + tst['reason'])
+            print_label("FIPSversion", ">=3.5.0")
             print_label("Verify-Message-Public", grp['parameterSet'] + ":" + testname)
-            print_label("Input", tst['message'])
+            print_label("Input", tst['mu' if externalMu else 'message'])
             print_label("Output", tst['signature'])
             print_label("Ctrl", "message-encoding:1")
-            print_label("Ctrl", "hexcontext-string:" + tst["context"])
+            if not externalMu:
+                print_label("Ctrl", "hexcontext-string:" + tst["context"])
+                includeMu = not includeMu
+            if externalMu or includeMu:
+                print_label("Ctrl", "mu:" + ("1" if externalMu else "0"))
             if not tst['testPassed']:
                 print_label("Result", "VERIFY_ERROR")