gestumblinde

Gestumblinde - reference implementation of SLH-DSA
git clone git://www.tkruger.se/gestumblinde.git
Log | Files | Refs | README

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")