From 45f0ceb29950bbb791d765d8e9cae4fa50b43eef Mon Sep 17 00:00:00 2001 From: Anjan Roy Date: Sat, 20 Sep 2025 21:06:44 +0530 Subject: [PATCH] Add Python script for parsing NIST ACVP KATs for ML-KEM keygen to local KAT format Signed-off-by: Anjan Roy --- kats/scripts/parse_ml_kem_keygen_acvp_kat.py | 43 ++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 kats/scripts/parse_ml_kem_keygen_acvp_kat.py diff --git a/kats/scripts/parse_ml_kem_keygen_acvp_kat.py b/kats/scripts/parse_ml_kem_keygen_acvp_kat.py new file mode 100644 index 0000000..762a74b --- /dev/null +++ b/kats/scripts/parse_ml_kem_keygen_acvp_kat.py @@ -0,0 +1,43 @@ +#!/usr/bin/python + +import json +import sys +import typing + +ML_KEM_512_ACVP_KAT_FILE_NAME="ml_kem_512.acvp.kat" +ML_KEM_768_ACVP_KAT_FILE_NAME="ml_kem_768.acvp.kat" +ML_KEM_1024_ACVP_KAT_FILE_NAME="ml_kem_1024.acvp.kat" + +def extract_and_write_ml_kem_keygen_kats(test_group: dict[str, typing.Any], write_to_file: str): + assert test_group["testType"] == "AFT" + + with open(write_to_file, "wt") as fd: + for test in test_group["tests"]: + fd.write(f'd = {test["d"]}\n') + fd.write(f'z = {test["z"]}\n') + fd.write(f'pk = {test["ek"]}\n') + fd.write(f'sk = {test["dk"]}\n') + + fd.write('\n') + + fd.flush() + + +def main(): + json_as_str = '' + for line in sys.stdin: + json_as_str += line + + acvp_kats = json.loads(json_as_str) + + ml_kem_512_param_set = acvp_kats["testGroups"][0] + ml_kem_768_param_set = acvp_kats["testGroups"][1] + ml_kem_1024_param_set = acvp_kats["testGroups"][2] + + extract_and_write_ml_kem_keygen_kats(ml_kem_512_param_set, ML_KEM_512_ACVP_KAT_FILE_NAME) + extract_and_write_ml_kem_keygen_kats(ml_kem_768_param_set, ML_KEM_768_ACVP_KAT_FILE_NAME) + extract_and_write_ml_kem_keygen_kats(ml_kem_1024_param_set, ML_KEM_1024_ACVP_KAT_FILE_NAME) + + +if __name__=='__main__': + main()