bench.py (3177B)
1 """ 2 Timing stuff. 3 """ 4 5 import json 6 import time 7 from slh_dsa import SLHDSA 8 from address import Address, AddressType 9 from wotsp import wotsp_pkgen, wotsp_sign, wotsp_pk_from_sig 10 from xmss import xmss_node, xmss_sign, xmss_pk_from_sig 11 from fors import fors_skgen, fors_node, fors_sign, fors_pk_from_sig 12 from slh import slh_keygen, slh_sign, slh_verify 13 from ht import ht_sign, ht_verify 14 from utils import toByte, cdiv 15 16 def read_json_test_vectors(filename): 17 """Read test vector from JSON file""" 18 with open(filename, "r") as infile: 19 json_object = infile.read() 20 r = json.loads(json_object) 21 # convert to bytes/tuples of bytes 22 converted = dict() 23 for k in r.keys(): 24 if type(r[k]) == list: 25 if len(r[k]) in [2,4] and (("SLH SK" in k) or ("SLH PK" in k)): 26 converted[k] = tuple([bytes(x) for x in r[k]]) 27 else: 28 converted[k] = bytes(r[k]) 29 else: 30 converted[k] = r[k] 31 return converted 32 33 def time_sign(file, name): 34 """Time signature generation""" 35 print(f"[+] Timing signing using {name} parameter set...") 36 tv = read_json_test_vectors(file) 37 ctx = SLHDSA(name) 38 pfx = name + " SLH " 39 sk = tv[pfx+"SK"] 40 sig_ref = tv[pfx+"SIGNATURE"] 41 msg = tv[pfx+"MSG"] 42 43 tb = time.time() 44 sig = slh_sign(msg, sk, ctx) 45 ta = time.time() 46 47 return ta-tb 48 49 def time_verify(file, name): 50 """Time signature verification""" 51 print(f"[+] Timing signature verification using {name} parameter set...") 52 tv = read_json_test_vectors(file) 53 ctx = SLHDSA(name) 54 pfx = name + " SLH " 55 pk = tv[pfx+"PK"] 56 sig = tv[pfx+"SIGNATURE"] 57 msg = tv[pfx+"MSG"] 58 59 tb = time.time() 60 slh_verify(msg, sig, pk, ctx) 61 ta = time.time() 62 63 return ta-tb 64 65 if __name__ == "__main__": 66 files = { 67 "SLH-DSA-SHAKE-128s": "../slh-dsa-shake-128s-test-vectors.json", 68 "SLH-DSA-SHAKE-128f": "../slh-dsa-shake-128f-test-vectors.json", 69 "SLH-DSA-SHAKE-192s": "../slh-dsa-shake-192s-test-vectors.json", 70 "SLH-DSA-SHAKE-192f": "../slh-dsa-shake-192f-test-vectors.json", 71 "SLH-DSA-SHAKE-256s": "../slh-dsa-shake-256s-test-vectors.json", 72 "SLH-DSA-SHAKE-256f": "../slh-dsa-shake-256f-test-vectors.json", 73 "SLH-DSA-SHA2-128s": "../slh-dsa-sha2-128s-test-vectors.json", 74 "SLH-DSA-SHA2-128f": "../slh-dsa-sha2-128f-test-vectors.json", 75 "SLH-DSA-SHA2-192s": "../slh-dsa-sha2-192s-test-vectors.json", 76 "SLH-DSA-SHA2-192f": "../slh-dsa-sha2-192f-test-vectors.json", 77 "SLH-DSA-SHA2-256s": "../slh-dsa-sha2-256s-test-vectors.json", 78 "SLH-DSA-SHA2-256f": "../slh-dsa-sha2-256f-test-vectors.json" 79 } 80 81 # timing 82 tsig = dict() 83 tver = dict() 84 for k in files.keys(): 85 tsig[k] = time_sign(files[k], k) 86 tver[k] = time_verify(files[k], k) 87 88 # printing 89 print("\n\nSignature times:") 90 for k in tsig.keys(): 91 print(f" {k}: {tsig[k]} seconds") 92 93 print("Verify times:") 94 for k in tver.keys(): 95 print(f" {k}: {tver[k]} seconds")