diff --git a/README.md b/README.md index b97212164..b5487d3e4 100644 --- a/README.md +++ b/README.md @@ -53,34 +53,8 @@ Falcon and SPHINCS+ have also been [selected for standardization](https://csrc.n All names other than `ML-KEM` and `ML-DSA` are subject to change. `liboqs` makes available a [selection mechanism for algorithms on the NIST standards track, continued NIST competition, or purely experimental nature by way of the configuration variable OQS_ALGS_ENABLED](CONFIGURE.md#oQS_ALGS_ENABLED). By default `liboqs` is built supporting all, incl. experimental, PQ algorithms listed below. -#### Key encapsulation mechanisms - - -- **BIKE**: BIKE-L1, BIKE-L3, BIKE-L5 -- **Classic McEliece**: Classic-McEliece-348864†, Classic-McEliece-348864f†, Classic-McEliece-460896†, Classic-McEliece-460896f†, Classic-McEliece-6688128†, Classic-McEliece-6688128f†, Classic-McEliece-6960119†, Classic-McEliece-6960119f†, Classic-McEliece-8192128†, Classic-McEliece-8192128f† -- **FrodoKEM**: FrodoKEM-640-AES, FrodoKEM-640-SHAKE, FrodoKEM-976-AES, FrodoKEM-976-SHAKE, FrodoKEM-1344-AES, FrodoKEM-1344-SHAKE -- **HQC**: HQC-128, HQC-192, HQC-256 -- **Kyber**: Kyber512, Kyber768, Kyber1024 -- **ML-KEM**: ML-KEM-512, ML-KEM-768, ML-KEM-1024 -- **NTRU**: NTRU-HPS-2048-509, NTRU-HPS-2048-677, NTRU-HPS-4096-821, NTRU-HPS-4096-1229, NTRU-HRSS-701, NTRU-HRSS-1373 -- **NTRU-Prime**: sntrup761 - - -#### Signature schemes - - -- **CROSS**: cross-rsdp-128-balanced, cross-rsdp-128-fast, cross-rsdp-128-small†, cross-rsdp-192-balanced, cross-rsdp-192-fast, cross-rsdp-192-small†, cross-rsdp-256-balanced†, cross-rsdp-256-fast, cross-rsdp-256-small†, cross-rsdpg-128-balanced, cross-rsdpg-128-fast, cross-rsdpg-128-small, cross-rsdpg-192-balanced, cross-rsdpg-192-fast, cross-rsdpg-192-small†, cross-rsdpg-256-balanced, cross-rsdpg-256-fast, cross-rsdpg-256-small† -- **Falcon**: Falcon-512, Falcon-1024, Falcon-padded-512, Falcon-padded-1024 -- **MAYO**: MAYO-1, MAYO-2, MAYO-3, MAYO-5† -- **ML-DSA**: ML-DSA-44, ML-DSA-65, ML-DSA-87 -- **SLH-DSA**: SLH\_DSA\_PURE\_SHA2\_128S†, SLH\_DSA\_PURE\_SHA2\_128F†, SLH\_DSA\_PURE\_SHA2\_192S†, SLH\_DSA\_PURE\_SHA2\_192F†, SLH\_DSA\_PURE\_SHA2\_256S†, SLH\_DSA\_PURE\_SHA2\_256F†, SLH\_DSA\_PURE\_SHAKE\_128S†, SLH\_DSA\_PURE\_SHAKE\_128F†, SLH\_DSA\_PURE\_SHAKE\_192S†, SLH\_DSA\_PURE\_SHAKE\_192F†, SLH\_DSA\_PURE\_SHAKE\_256S†, SLH\_DSA\_PURE\_SHAKE\_256F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_128S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_128F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_192S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_192F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_256S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHA2\_256F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_128S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_128F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_192S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_192F†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_256S†, SLH\_DSA\_SHA2\_224\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_256\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_384\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_512\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_512\_224\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA2\_512\_256\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA3\_224\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA3\_256\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA3\_384\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHA3\_512\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHAKE\_128\_PREHASH\_SHAKE\_256F†, SLH\_DSA\_SHAKE\_256\_PREHASH\_SHAKE\_256F† -- **SNOVA**: SNOVA\_24\_5\_4, SNOVA\_24\_5\_4\_SHAKE, SNOVA\_24\_5\_4\_esk, SNOVA\_24\_5\_4\_SHAKE\_esk, SNOVA\_37\_17\_2†, SNOVA\_25\_8\_3, SNOVA\_56\_25\_2†, SNOVA\_49\_11\_3†, SNOVA\_37\_8\_4†, SNOVA\_24\_5\_5†, SNOVA\_60\_10\_4†, SNOVA\_29\_6\_5† -- **SPHINCS+-SHA2**: SPHINCS+-SHA2-128f-simple, SPHINCS+-SHA2-128s-simple, SPHINCS+-SHA2-192f-simple, SPHINCS+-SHA2-192s-simple, SPHINCS+-SHA2-256f-simple, SPHINCS+-SHA2-256s-simple -- **SPHINCS+-SHAKE**: SPHINCS+-SHAKE-128f-simple, SPHINCS+-SHAKE-128s-simple, SPHINCS+-SHAKE-192f-simple, SPHINCS+-SHAKE-192s-simple, SPHINCS+-SHAKE-256f-simple, SPHINCS+-SHAKE-256s-simple -- **UOV**: OV-Is, OV-Ip, OV-III, OV-V, OV-Is-pkc, OV-Ip-pkc, OV-III-pkc, OV-V-pkc, OV-Is-pkc-skc, OV-Ip-pkc-skc, OV-III-pkc-skc, OV-V-pkc-skc - -- **XMSS**: XMSS-SHA2_10_256, XMSS-SHA2_16_256, XMSS-SHA2_20_256, XMSS-SHAKE_10_256, XMSS-SHAKE_16_256, XMSS-SHAKE_20_256, XMSS-SHA2_10_512, XMSS-SHA2_16_512, XMSS-SHA2_20_512, XMSS-SHAKE_10_512, XMSS-SHAKE_16_512, XMSS-SHAKE_20_512, XMSS-SHA2_10_192, XMSS-SHA2_16_192, XMSS-SHA2_20_192, XMSS-SHAKE256_10_192, XMSS-SHAKE256_16_192, XMSS-SHAKE256_20_192, SHAKE256_10_256, SHAKE256_16_256, SHAKE256_20_256, XMSSMT-SHA2_20/2_256, XMSSMT-SHA2_20/4_256, XMSSMT-SHA2_40/2_256, XMSSMT-SHA2_40/4_256, XMSSMT-SHA2_40/8_256, XMSSMT-SHA2_60/3_256, XMSSMT-SHA2_60/6_256, XMSSMT-SHA2_60/12_256, XMSSMT-SHAKE_20/2_256, XMSSMT-SHAKE_20/4_256, XMSSMT-SHAKE_40/2_256, XMSSMT-SHAKE_40/4_256, XMSSMT-SHAKE_40/8_256, XMSSMT-SHAKE_60/3_256, XMSSMT-SHAKE_60/6_256, XMSSMT-SHAKE_60/12_256 -- **LMS**: LMS_SHA256_H5_W1, LMS_SHA256_H5_W2, LMS_SHA256_H5_W4, LMS_SHA256_H5_W8, LMS_SHA256_H10_W1, LMS_SHA256_H10_W2, LMS_SHA256_H10_W4, LMS_SHA256_H10_W8, LMS_SHA256_H15_W1, LMS_SHA256_H15_W2, LMS_SHA256_H15_W4, LMS_SHA256_H15_W8, LMS_SHA256_H20_W1, LMS_SHA256_H20_W2, LMS_SHA256_H20_W4, LMS_SHA256_H20_W8, LMS_SHA256_H25_W1, LMS_SHA256_H25_W2, LMS_SHA256_H25_W4, LMS_SHA256_H25_W8, LMS_SHA256_H5_W8_H5_W8, LMS_SHA256_H10_W4_H5_W8, LMS_SHA256_H10_W8_H5_W8, LMS_SHA256_H10_W2_H10_W2, LMS_SHA256_H10_W4_H10_W4, LMS_SHA256_H10_W8_H10_W8, LMS_SHA256_H15_W8_H5_W8, LMS_SHA256_H15_W8_H10_W8, LMS_SHA256_H15_W8_H15_W8, LMS_SHA256_H20_W8_H5_W8, LMS_SHA256_H20_W8_H10_W8, LMS_SHA256_H20_W8_H15_W8, LMS_SHA256_H20_W8_H20_W8 + + Note that for algorithms marked with a dagger (†), liboqs contains at least one implementation that uses a large amount of stack space; this may cause failures when run in threads or in constrained environments. For more information, consult the algorithm information sheets in the [docs/algorithms](https://github.com/open-quantum-safe/liboqs/tree/main/docs/algorithms) folder. diff --git a/scripts/update_docs_from_yaml.py b/scripts/update_docs_from_yaml.py old mode 100644 new mode 100755 index dcd679763..83050c163 --- a/scripts/update_docs_from_yaml.py +++ b/scripts/update_docs_from_yaml.py @@ -1,11 +1,12 @@ +#!/usr/bin/env python3 # SPDX-License-Identifier: MIT import argparse -import sys import glob +import os + import tabulate import yaml -import os def load_yaml(filename, encoding='utf-8'): with open(filename, mode='r', encoding=encoding) as fh: @@ -15,14 +16,14 @@ def file_get_contents(filename, encoding=None): with open(filename, mode='r', encoding=encoding) as fh: return fh.read() -kem_yamls = [] -sig_yamls = [] -sig_stfl_yamls = [] - ######################################## # Update the KEM markdown documentation. ######################################## def do_it(liboqs_root): + kem_yamls = [] + sig_yamls = [] + sig_stfl_yamls = [] + for kem_yaml_path in sorted(glob.glob(os.path.join(liboqs_root, 'docs', 'algorithms', 'kem', '*.yml'))): kem_yaml = load_yaml(kem_yaml_path) kem_yamls.append(kem_yaml) @@ -339,103 +340,10 @@ def do_it(liboqs_root): out_md.write(tabulate.tabulate(table, tablefmt="pipe", headers="firstrow", colalign=("center",))) out_md.write('\n') + # TODO:construct the algorithm support table, replace the appropriate + # section in README.md (OQS_TEMPLATE_FRAGMENT_ALG_SUPPORT_START) - #################### - # Update the README. - #################### - print("Updating README.md") - - readme_path = os.path.join(liboqs_root, 'README.md') - start_identifier_tmpl = '' - end_identifier_tmpl = '' - - # KEMS - readme_contents = file_get_contents(readme_path) - - identifier_start = start_identifier_tmpl.format('KEXS') - identifier_end = end_identifier_tmpl.format('KEXS') - - preamble = readme_contents[:readme_contents.find(identifier_start)] - postamble = readme_contents[readme_contents.find(identifier_end):] - - with open(readme_path, mode='w', encoding='utf-8') as readme: - readme.write(preamble + identifier_start + '\n') - - for kem_yaml in kem_yamls: - parameter_sets = kem_yaml['parameter-sets'] - if any(impl['large-stack-usage'] for impl in parameter_sets[0]['implementations']): - readme.write('- **{}**: {}†'.format(kem_yaml['name'], parameter_sets[0]['name'])) - if 'alias' in parameter_sets[0]: - readme.write(' (alias: {})'.format(parameter_sets[0]['alias'])) - else: - readme.write('- **{}**: {}'.format(kem_yaml['name'], parameter_sets[0]['name'])) - if 'alias' in parameter_sets[0]: - readme.write(' (alias: {})'.format(parameter_sets[0]['alias'])) - for parameter_set in parameter_sets[1:]: - if any(impl['large-stack-usage'] for impl in parameter_set['implementations']): - readme.write(', {}†'.format(parameter_set['name'])) - if 'alias' in parameter_set: - readme.write(' (alias: {})'.format(parameter_set['alias'])) - else: - readme.write(', {}'.format(parameter_set['name'])) - if 'alias' in parameter_set: - readme.write(' (alias: {})'.format(parameter_set['alias'])) - readme.write('\n') - - readme.write(postamble) - - # Signatures - readme_contents = file_get_contents(readme_path) - - identifier_start = start_identifier_tmpl.format('SIGS') - identifier_end = end_identifier_tmpl.format('SIGS') - - preamble = readme_contents[:readme_contents.find(identifier_start)] - postamble = readme_contents[readme_contents.find(identifier_end):] - - with open(readme_path, mode='w', encoding='utf-8') as readme: - readme.write(preamble + identifier_start + '\n') - - for sig_yaml in sig_yamls: - # SPHINCS requires special handling. - if "SPHINCS" in sig_yaml["name"]: - for hash_func in ['SHA2', 'SHAKE']: - parameter_sets = [pset for pset in sig_yaml['parameter-sets'] if hash_func in pset['name']] - if any(impl['large-stack-usage'] for impl in parameter_sets[0]['implementations']): - readme.write('- **SPHINCS+-{}**: {}†'.format(hash_func, parameter_sets[0]['name'].replace('_','\\_'))) - else: - readme.write('- **SPHINCS+-{}**: {}'.format(hash_func, parameter_sets[0]['name'].replace('_','\\_'))) - for parameter_set in parameter_sets[1:]: - if any(impl['large-stack-usage'] for impl in parameter_set['implementations']): - readme.write(', {}†'.format(parameter_set['name'].replace('_', '\\_'))) - else: - readme.write(', {}'.format(parameter_set['name'].replace('_', '\\_'))) - readme.write('\n') - continue - - parameter_sets = sig_yaml['parameter-sets'] - if any(impl['large-stack-usage'] for impl in parameter_sets[0]['implementations']): - readme.write('- **{}**: {}†'.format(sig_yaml['name'], parameter_sets[0]['name'].replace('_','\\_'))) - if 'alias' in parameter_sets[0]: - readme.write(' (alias: {})'.format(parameter_sets[0]['alias']).replace('_','\\_')) - else: - readme.write('- **{}**: {}'.format(sig_yaml['name'], parameter_sets[0]['name'].replace('_','\\_'))) - if 'alias' in parameter_sets[0]: - readme.write(' (alias: {})'.format(parameter_sets[0]['alias']).replace('_','\\_')) - for parameter_set in parameter_sets[1:]: - if any(impl['large-stack-usage'] for impl in parameter_set['implementations']): - readme.write(', {}†'.format(parameter_set['name'].replace('_', '\\_'))) - if 'alias' in parameter_set: - readme.write(' (alias: {})'.format(parameter_set['alias']).replace('_','\\_')) - else: - readme.write(', {}'.format(parameter_set['name'].replace('_', '\\_'))) - if 'alias' in parameter_set: - readme.write(' (alias: {})'.format(parameter_set['alias']).replace('_','\\_')) - readme.write('\n') - - - readme.write(postamble) if __name__ == "__main__": parser = argparse.ArgumentParser()