Signed-off-by: Vladimir Serbinenko <phco...@gmail.com> --- util/import_gcry.py | 1277 +++++++++++++++++++++---------------------- 1 file changed, 623 insertions(+), 654 deletions(-)
diff --git a/util/import_gcry.py b/util/import_gcry.py index 396ce0f68..cd54daca1 100644 --- a/util/import_gcry.py +++ b/util/import_gcry.py @@ -1,3 +1,4 @@ +# pylint: disable=invalid-name,line-too-long #* #* GRUB -- GRand Unified Bootloader #* Copyright (C) 2009 Free Software Foundation, Inc. @@ -27,8 +28,7 @@ def removesuffix(base: str, suffix: str) -> str: if base.endswith(suffix): return base[:-len(suffix)] - else: - return base + return base def removeprefix(base: str, prefix: str) -> str: @@ -36,8 +36,7 @@ def removeprefix(base: str, prefix: str) -> str: if base.startswith(prefix): return base[len(prefix):] - else: - return base + return base if len (sys.argv) < 3: print ("Usage: %s SOURCE DESTINATION" % sys.argv[0]) @@ -46,44 +45,16 @@ indir = sys.argv[1] outdir = sys.argv[2] basedir = os.path.join (outdir, "lib/libgcrypt-grub") -try: - os.makedirs (basedir) -except: - print ("WARNING: %s already exists" % basedir) +os.makedirs (basedir, exist_ok=True) cipher_dir_in = os.path.join (indir, "cipher") cipher_dir_out = os.path.join (basedir, "cipher") -try: - os.makedirs (cipher_dir_out) -except: - print ("WARNING: %s already exists" % cipher_dir_out) +os.makedirs (cipher_dir_out, exist_ok=True) mpidir = os.path.join (basedir, "mpi") -try: - os.makedirs (mpidir) -except: - print ("WARNING: %s already exists" % mpidir) +os.makedirs (mpidir, exist_ok=True) srcdir = os.path.join (basedir, "src") -try: - os.makedirs (srcdir) -except: - print ("WARNING: %s already exists" % srcdir) +os.makedirs (srcdir, exist_ok=True) -cipher_files = sorted (os.listdir (cipher_dir_in)) -conf = codecs.open (os.path.join ("grub-core", "Makefile.gcry.def"), "w", "utf-8") -conf.write ("AutoGen definitions Makefile.tpl;\n\n") -confutil = codecs.open ("Makefile.utilgcry.def", "w", "utf-8") -confutil.write ("AutoGen definitions Makefile.tpl;\n\n") -confutil.write ("library = {\n"); -confutil.write (" name = libgrubgcry.a;\n"); -confutil.write (" cflags = '$(CFLAGS_GCRY)';\n"); -confutil.write (" cppflags = '$(CPPFLAGS_GCRY)';\n"); -confutil.write (" extra_dist = grub-core/lib/libgcrypt-grub/cipher/ChangeLog;\n"); -confutil.write ("\n"); - -for src in ['src/const-time.c']: - confutil.write (" common = grub-core/lib/libgcrypt-grub/%s;\n" % src) - -confutil.write ("\n"); chlog = "" modules_sym_md = [] @@ -123,636 +94,634 @@ mdblocksizes = {"_gcry_digest_spec_crc32" : 64, "_gcry_digest_spec_cshake256": 64, "_gcry_digest_spec_blake2": "GRUB_BLAKE2 ## BS ## _BLOCK_SIZE"} -cryptolist = codecs.open (os.path.join (cipher_dir_out, "crypto.lst"), "w", "utf-8") - -# rijndael is the only cipher using aliases. So no need for mangling, just -# hardcode it -cryptolist.write ("RIJNDAEL: gcry_rijndael\n"); -cryptolist.write ("RIJNDAEL192: gcry_rijndael\n"); -cryptolist.write ("RIJNDAEL256: gcry_rijndael\n"); -cryptolist.write ("AES128: gcry_rijndael\n"); -cryptolist.write ("AES-128: gcry_rijndael\n"); -cryptolist.write ("AES-192: gcry_rijndael\n"); -cryptolist.write ("AES-256: gcry_rijndael\n"); - -cryptolist.write ("ADLER32: adler32\n"); -cryptolist.write ("CRC64: crc64\n"); - -extra_files = { - "gcry_camellia": ["camellia.c"], # Main file is camellia-glue.c - "gcry_sha512" : ["hash-common.c"], -} -extra_files_list = [x for xs in extra_files.values() for x in xs] + ["pubkey-util.c", "rsa-common.c", "dsa-common.c", "md.c"] - -for cipher_file in cipher_files: - infile = os.path.join (cipher_dir_in, cipher_file) - outfile = os.path.join (cipher_dir_out, cipher_file) - if cipher_file == "ChangeLog" or cipher_file == "ChangeLog-2011": - continue - chlognew = " * %s" % cipher_file - # Unused generic support files - if re.match (r"(Makefile\.am|primegen\.c|cipher\.c|cipher-.*\.c|mac-.*\.c|mac\.c|pubkey\.c)$", cipher_file): - chlog = "%s%s: Removed\n" % (chlog, chlognew) - continue - # TODO: Support KDF - if re.match (r"(kdf\.c|scrypt\.c)$", cipher_file): - chlog = "%s%s: Removed\n" % (chlog, chlognew) - continue - # TODO: Support chacha20 and poly1305 - # TODO: Support ECC - # TODO: Support quantum-resistant - if cipher_file in ["poly1305.c", "chacha20.c", "ecc.c", "elgamal.c", - "sntrup761.c", "mceliece6688128f.c", "kyber-common.c", "kyber.c", "kyber-kdep.c", "kem-ecc.c", "kem.c"] or re.match (r"^ecc-.*\.c$", cipher_file): - chlog = "%s%s: Removed\n" % (chlog, chlognew) - continue - # TODO: Use optimized versions - if re.match (r"(.*\.[sS]|.*-intel-shaext\.c|.*-ssse3-i386\.c|.*-ppc\.c|.*-ssse3-amd64\.c|.*-s390x\.c|rijndael-aesni\.c|crc-intel-pclmul\.c|.*-armv8-ce.c|.*-aarch64-ce\.c|.*-p10le\.c|rijndael-padlock.c|.*-ppc[89]le.c|rijndael-vaes.c|rijndael-vaes-i386.c|serpent-avx512-x86.c)$", cipher_file): - chlog = "%s%s: Removed\n" % (chlog, chlognew) - continue - # We use pregenerated version - if cipher_file == "gost-s-box.c": - chlog = "%s%s: Removed\n" % (chlog, chlognew) - continue - # Autogenerated files. Not even worth mentionning in ChangeLog - if re.match (r"Makefile\.in$", cipher_file): - continue - nch = False - if re.match (r".*\.[ch]$", cipher_file): - isc = re.match (r".*\.c$", cipher_file) - f = codecs.open (infile, "r", "utf-8") - fw = codecs.open (outfile, "w", "utf-8") - fw.write ("/* This file was automatically imported with \n") - fw.write (" import_gcry.py. Please don't modify it */\n") - add_license = cipher_file == "pubkey-util.c" or (isc and not cipher_file in extra_files_list) - if add_license: - fw.write ("#include <grub/dl.h>\n") - if cipher_file == "camellia.h": - fw.write ("#include <grub/misc.h>\n") - fw.write ("void camellia_setup128(const unsigned char *key, grub_uint32_t *subkey);\n") - fw.write ("void camellia_setup192(const unsigned char *key, grub_uint32_t *subkey);\n") - fw.write ("void camellia_setup256(const unsigned char *key, grub_uint32_t *subkey);\n") - fw.write ("void camellia_encrypt128(const grub_uint32_t *subkey, grub_uint32_t *io);\n") - fw.write ("void camellia_encrypt192(const grub_uint32_t *subkey, grub_uint32_t *io);\n") - fw.write ("void camellia_encrypt256(const grub_uint32_t *subkey, grub_uint32_t *io);\n") - fw.write ("void camellia_decrypt128(const grub_uint32_t *subkey, grub_uint32_t *io);\n") - fw.write ("void camellia_decrypt192(const grub_uint32_t *subkey, grub_uint32_t *io);\n") - fw.write ("void camellia_decrypt256(const grub_uint32_t *subkey, grub_uint32_t *io);\n") - fw.write ("#define memcpy grub_memcpy\n") - # Whole libgcrypt is distributed under GPLv3+ or compatible - if add_license: - fw.write ("GRUB_MOD_LICENSE (\"GPLv3+\");\n") - - ciphernames = [] - mdnames = [] - mdctxsizes = [] - pknames = [] - hold = False - skip = 0 - skip2 = False - ismd = False - ismddefine = False - mdarg = 0 - ispk = False - iscipher = False - iscryptostart = False - iscomma = False - skip_statement = False - skip_comma = False - if isc: - modname = "gcry_%s" % removesuffix(removesuffix(cipher_file, ".c"), "-glue").replace("-", "_") - for line in f: - line = line - if skip_statement: - if not re.search (";", line) is None: - skip_statement = False - continue - if skip > 0: - if line[0] == "}": - skip = skip - 1 - continue - if skip2: - if not re.search (" *};", line) is None: - skip2 = False - continue - if iscryptostart: - s = re.search (" *\"([A-Z0-9_a-z-]*)\"", line) - if not s is None: - sg = s.groups()[0] - cryptolist.write (("%s: %s\n") % (sg, modname)) - iscryptostart = False - if ismd: - spl = line.split (",") - if mdarg + len (spl) > 9 and mdarg <= 9 and ("sizeof" in spl[9-mdarg]): - mdctxsizes.append (spl[9-mdarg].lstrip ().rstrip()) - mdarg = mdarg + len (spl) - 1 - if ismd or iscipher or ispk: - if not re.search (" *};", line) is None: - escapenl = " \\" if ismddefine else "" - if not iscomma: - fw.write (" ,%s\n" % escapenl) - fw.write (" GRUB_UTIL_MODNAME(\"%s\")%s\n" % (modname, escapenl)) - if ismd: - if not (mdname in mdblocksizes): - print ("ERROR: Unknown digest blocksize: %s\n" - % mdname) - exit (1) - fw.write (" .blocksize = %s%s\n" - % (mdblocksizes [mdname], escapenl)) - ismd = False - ismddefine = False - mdarg = 0 - iscipher = False - ispk = False - iscomma = not re.search (",$", line) is None - # Used only for selftests. - m = re.match (r"(static byte|static unsigned char|static const gcry_md_spec_t \* const) (weak_keys_chksum|digest_list)\[[0-9]*\] =", line) - if not m is None: - skip = 1 - fname = m.groups ()[1] - chmsg = "(%s): Removed." % fname - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True - continue - if (not hold) and (re.match (r"[ \t]*(run_selftests|do_tripledes_set_extra_info),?", line) is not None): - iscomma = True - line = "" - if hold: +cipher_files = sorted (os.listdir (cipher_dir_in)) + +with codecs.open (os.path.join (cipher_dir_out, "crypto.lst"), "w", "utf-8") as cryptolist, \ + codecs.open (os.path.join ("grub-core", "Makefile.gcry.def"), "w", "utf-8") as conf, \ + codecs.open ("Makefile.utilgcry.def", "w", "utf-8") as confutil: + + conf.write ("AutoGen definitions Makefile.tpl;\n\n") + confutil.write ("AutoGen definitions Makefile.tpl;\n\n") + confutil.write ("library = {\n") + confutil.write (" name = libgrubgcry.a;\n") + confutil.write (" cflags = '$(CFLAGS_GCRY)';\n") + confutil.write (" cppflags = '$(CPPFLAGS_GCRY)';\n") + confutil.write (" extra_dist = grub-core/lib/libgcrypt-grub/cipher/ChangeLog;\n") + confutil.write ("\n") + + for src in ['src/const-time.c']: + confutil.write (" common = grub-core/lib/libgcrypt-grub/%s;\n" % src) + + confutil.write ("\n") + + + # rijndael is the only cipher using aliases. So no need for mangling, just + # hardcode it + cryptolist.write ("RIJNDAEL: gcry_rijndael\n") + cryptolist.write ("RIJNDAEL192: gcry_rijndael\n") + cryptolist.write ("RIJNDAEL256: gcry_rijndael\n") + cryptolist.write ("AES128: gcry_rijndael\n") + cryptolist.write ("AES-128: gcry_rijndael\n") + cryptolist.write ("AES-192: gcry_rijndael\n") + cryptolist.write ("AES-256: gcry_rijndael\n") + + cryptolist.write ("ADLER32: adler32\n") + cryptolist.write ("CRC64: crc64\n") + + extra_files = { + "gcry_camellia": ["camellia.c"], # Main file is camellia-glue.c + "gcry_sha512" : ["hash-common.c"], + } + extra_files_list = [x for xs in extra_files.values() for x in xs] + [ + "pubkey-util.c", "rsa-common.c", "dsa-common.c", "md.c"] + + for cipher_file in cipher_files: + infile = os.path.join (cipher_dir_in, cipher_file) + outfile = os.path.join (cipher_dir_out, cipher_file) + if cipher_file in ["ChangeLog", "ChangeLog-2011"]: + continue + chlognew = " * %s" % cipher_file + # Unused generic support files + if re.match (r"(Makefile\.am|primegen\.c|cipher\.c|cipher-.*\.c|mac-.*\.c|mac\.c|pubkey\.c)$", cipher_file): + chlog = "%s%s: Removed\n" % (chlog, chlognew) + continue + # TODO: Support KDF + if re.match (r"(kdf\.c|scrypt\.c)$", cipher_file): + chlog = "%s%s: Removed\n" % (chlog, chlognew) + continue + # TODO: Support chacha20 and poly1305 + # TODO: Support ECC + # TODO: Support quantum-resistant + if cipher_file in ["poly1305.c", "chacha20.c", "ecc.c", "elgamal.c", + "sntrup761.c", "mceliece6688128f.c", "kyber-common.c", + "kyber.c", "kyber-kdep.c", "kem-ecc.c", + "kem.c"] or re.match (r"^ecc-.*\.c$", cipher_file): + chlog = "%s%s: Removed\n" % (chlog, chlognew) + continue + # TODO: Use optimized versions + if re.match (r"(.*\.[sS]|.*-intel-shaext\.c|.*-ssse3-i386\.c|.*-ppc\.c|.*-ssse3-amd64\.c|.*-s390x\.c|rijndael-aesni\.c|crc-intel-pclmul\.c|.*-armv8-ce.c|.*-aarch64-ce\.c|.*-p10le\.c|rijndael-padlock.c|.*-ppc[89]le.c|rijndael-vaes.c|rijndael-vaes-i386.c|serpent-avx512-x86.c)$", cipher_file): + chlog = "%s%s: Removed\n" % (chlog, chlognew) + continue + # We use pregenerated version + if cipher_file == "gost-s-box.c": + chlog = "%s%s: Removed\n" % (chlog, chlognew) + continue + # Autogenerated files. Not even worth mentionning in ChangeLog + if re.match (r"Makefile\.in$", cipher_file): + continue + nch = False + if re.match (r".*\.[ch]$", cipher_file): + isc = re.match (r".*\.c$", cipher_file) + with codecs.open (infile, "r", "utf-8") as f, codecs.open (outfile, "w", "utf-8") as fw: + fw.write ("/* This file was automatically imported with \n") + fw.write (" import_gcry.py. Please don't modify it */\n") + add_license = cipher_file == "pubkey-util.c" or (isc and not cipher_file in extra_files_list) + if add_license: + fw.write ("#include <grub/dl.h>\n") + if cipher_file == "camellia.h": + fw.write ("#include <grub/misc.h>\n") + fw.write ("void camellia_setup128(const unsigned char *key, grub_uint32_t *subkey);\n") + fw.write ("void camellia_setup192(const unsigned char *key, grub_uint32_t *subkey);\n") + fw.write ("void camellia_setup256(const unsigned char *key, grub_uint32_t *subkey);\n") + fw.write ("void camellia_encrypt128(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_encrypt192(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_encrypt256(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_decrypt128(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_decrypt192(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_decrypt256(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("#define memcpy grub_memcpy\n") + # Whole libgcrypt is distributed under GPLv3+ or compatible + if add_license: + fw.write ("GRUB_MOD_LICENSE (\"GPLv3+\");\n") + + ciphernames = [] + mdnames = [] + mdctxsizes = [] + pknames = [] hold = False - # We're optimising for size and exclude anything needing good - # randomness. - if re.match ("(_gcry_hash_selftest_check_one|bulk_selftest_setkey|run_selftests|do_tripledes_set_extra_info|selftest|sm4_selftest|_gcry_[a-z0-9_]*_hash_buffers|_gcry_sha1_hash_buffer|tripledes_set2keys|_gcry_rmd160_mixblock|serpent_test|dsa_generate_ext|test_keys|gen_k|sign|gen_x931_parm_xp|generate_x931|generate_key|dsa_generate|dsa_sign|ecc_sign|generate|generate_fips186|_gcry_register_pk_dsa_progress|_gcry_register_pk_ecc_progress|progress|scanval|ec2os|ecc_generate_ext|ecc_generate|ecc_get_param|_gcry_register_pk_dsa_progress|gen_x931_parm_xp|gen_x931_parm_xi|rsa_decrypt|rsa_sign|rsa_generate_ext|rsa_generate|secret|check_exponent|rsa_blind|rsa_unblind|extract_a_from_sexp|curve_free|curve_copy|point_set|_gcry_dsa_gen_rfc6979_k|bits2octets|int2octets|_gcry_md_debug|_gcry_md_selftest|_gcry_md_is_enabled|_gcry_md_is_secure|_gcry_md_init|_gcry_md_info|md_get_algo|md_extract|_gcry_md_get |_gcry_md_get_algo |_gcry_md_extract|_gcry_md_setkey|md_setkey|prepare_macpads|_gcry_md_algo_name|search_oid|spec_from_oid|spec_from_name|spec_from_algo|map_algo|cshake_hash_buffers|blake2b_vl_hash|selftest_seq)", line) is not None: - - skip = 1 - if not re.match ("selftest", line) is None and cipher_file == "idea.c": - skip = 3 - - if not re.match ("serpent_test", line) is None: - fw.write ("static const char *serpent_test (void) { return 0; }\n"); - if not re.match ("sm4_selftest", line) is None: - fw.write ("static const char *sm4_selftest (void) { return 0; }\n"); - hash_buf = re.match ("(_gcry_[a-z0-9_]*_hash_buffers)", line) - if hash_buf is not None: - fw.write ("#define %s 0" % (hash_buf.group(0))) - if not re.match ("dsa_generate", line) is None: - fw.write ("#define dsa_generate 0"); - if not re.match ("ecc_generate", line) is None: - fw.write ("#define ecc_generate 0"); - if not re.match ("rsa_generate ", line) is None: - fw.write ("#define rsa_generate 0"); - if not re.match ("rsa_sign", line) is None: - fw.write ("#define rsa_sign 0"); - if not re.match ("rsa_decrypt", line) is None: - fw.write ("#define rsa_decrypt 0"); - if not re.match ("dsa_sign", line) is None: - fw.write ("#define dsa_sign 0"); - if not re.match ("ecc_sign", line) is None: - fw.write ("#define ecc_sign 0"); - if not re.match ("search_oid", line) is None: - fw.write ("#define search_oid(a,b) grub_crypto_lookup_md_by_oid(a)") - if not re.match ("spec_from_name", line) is None: - fw.write ("#define spec_from_name grub_crypto_lookup_md_by_name") - fname = re.match ("[a-zA-Z0-9_]*", line).group () - chmsg = "(%s): Removed." % fname + skip = 0 + skip2 = False + ismd = False + ismddefine = False + mdarg = 0 + ispk = False + iscipher = False + iscryptostart = False + iscomma = False + skip_statement = False + skip_comma = False + if isc: + modname = "gcry_%s" % removesuffix(removesuffix(cipher_file, ".c"), + "-glue").replace("-", "_") + for line in f: + if skip_statement: + if not re.search (";", line) is None: + skip_statement = False + continue + if skip > 0: + if line[0] == "}": + skip = skip - 1 + continue + if skip2: + if not re.search (" *};", line) is None: + skip2 = False + continue + if iscryptostart: + s = re.search (" *\"([A-Z0-9_a-z-]*)\"", line) + if not s is None: + sg = s.groups()[0] + cryptolist.write (("%s: %s\n") % (sg, modname)) + iscryptostart = False + if ismd: + spl = line.split (",") + if mdarg + len (spl) > 9 and mdarg <= 9 and ("sizeof" in spl[9-mdarg]): + mdctxsizes.append (spl[9-mdarg].lstrip ().rstrip()) + mdarg = mdarg + len (spl) - 1 + if ismd or iscipher or ispk: + if not re.search (" *};", line) is None: + escapenl = " \\" if ismddefine else "" + if not iscomma: + fw.write (" ,%s\n" % escapenl) + fw.write (" GRUB_UTIL_MODNAME(\"%s\")%s\n" % (modname, escapenl)) + if ismd: + if mdname not in mdblocksizes: + print ("ERROR: Unknown digest blocksize: %s\n" + % mdname) + exit (1) + fw.write (" .blocksize = %s%s\n" + % (mdblocksizes [mdname], escapenl)) + ismd = False + ismddefine = False + mdarg = 0 + iscipher = False + ispk = False + iscomma = not re.search (",$", line) is None + # Used only for selftests. + m = re.match (r"(static byte|static unsigned char|static const gcry_md_spec_t \* const) (weak_keys_chksum|digest_list)\[[0-9]*\] =", line) + if not m is None: + skip = 1 + fname = m.groups ()[1] + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + if (not hold) and (re.match (r"[ \t]*(run_selftests|do_tripledes_set_extra_info),?", line) is not None): + iscomma = True + line = "" + if hold: + hold = False + # We're optimising for size and exclude anything needing good + # randomness. + if re.match ("(_gcry_hash_selftest_check_one|bulk_selftest_setkey|run_selftests|do_tripledes_set_extra_info|selftest|sm4_selftest|_gcry_[a-z0-9_]*_hash_buffers|_gcry_sha1_hash_buffer|tripledes_set2keys|_gcry_rmd160_mixblock|serpent_test|dsa_generate_ext|test_keys|gen_k|sign|gen_x931_parm_xp|generate_x931|generate_key|dsa_generate|dsa_sign|ecc_sign|generate|generate_fips186|_gcry_register_pk_dsa_progress|_gcry_register_pk_ecc_progress|progress|scanval|ec2os|ecc_generate_ext|ecc_generate|ecc_get_param|_gcry_register_pk_dsa_progress|gen_x931_parm_xp|gen_x931_parm_xi|rsa_decrypt|rsa_sign|rsa_generate_ext|rsa_generate|secret|check_exponent|rsa_blind|rsa_unblind|extract_a_from_sexp|curve_free|curve_copy|point_set|_gcry_dsa_gen_rfc6979_k|bits2octets|int2octets|_gcry_md_debug|_gcry_md_selftest|_gcry_md_is_enabled|_gcry_md_is_secure|_gcry_md_init|_gcry_md_info|md_get_algo|md_extract|_gcry_md_get |_gcry_md_get_algo |_gcry_md_extract|_gcry_md_setkey|md_setkey|prepare_macpads|_gcry_md_algo_name|search_oid|spec_from_oid|spec_from_name|spec_from_algo|map_algo|cshake_hash_buffers|blake2b_vl_hash|selftest_seq)", line) is not None: + + skip = 1 + if not re.match ("selftest", line) is None and cipher_file == "idea.c": + skip = 3 + + if not re.match ("serpent_test", line) is None: + fw.write ("static const char *serpent_test (void) { return 0; }\n") + if not re.match ("sm4_selftest", line) is None: + fw.write ("static const char *sm4_selftest (void) { return 0; }\n") + hash_buf = re.match ("(_gcry_[a-z0-9_]*_hash_buffers)", line) + if hash_buf is not None: + fw.write ("#define %s 0" % (hash_buf.group(0))) + if not re.match ("dsa_generate", line) is None: + fw.write ("#define dsa_generate 0") + if not re.match ("ecc_generate", line) is None: + fw.write ("#define ecc_generate 0") + if not re.match ("rsa_generate ", line) is None: + fw.write ("#define rsa_generate 0") + if not re.match ("rsa_sign", line) is None: + fw.write ("#define rsa_sign 0") + if not re.match ("rsa_decrypt", line) is None: + fw.write ("#define rsa_decrypt 0") + if not re.match ("dsa_sign", line) is None: + fw.write ("#define dsa_sign 0") + if not re.match ("ecc_sign", line) is None: + fw.write ("#define ecc_sign 0") + if not re.match ("search_oid", line) is None: + fw.write ("#define search_oid(a,b) grub_crypto_lookup_md_by_oid(a)") + if not re.match ("spec_from_name", line) is None: + fw.write ("#define spec_from_name grub_crypto_lookup_md_by_name") + fname = re.match ("[a-zA-Z0-9_]*", line).group () + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + else: + fw.write (holdline) + m = re.match ("# *include <(.*)>", line) + if not m is None: + chmsg = "Removed including of %s" % m.groups ()[0] + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s: %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("(const )?gcry_cipher_spec_t", line) + if isc and not m is None: + assert not ismd + assert not ispk + assert not iscipher + assert not iscryptostart + ciphername = removeprefix(removeprefix(line, "const "), + "gcry_cipher_spec_t").strip () + ciphername = re.match("[a-zA-Z0-9_]*",ciphername).group () + ciphernames.append (ciphername) + iscipher = True + iscryptostart = True + + m = re.match ("(const )?gcry_pk_spec_t", line) + if isc and not m is None: + assert not ismd + assert not ispk + assert not iscipher + assert not iscryptostart + pkname = removeprefix(removeprefix(line, "const "), "gcry_pk_spec_t").strip () + pkname = re.match("[a-zA-Z0-9_]*",pkname).group () + pknames.append (pkname) + ispk = True + iscryptostart = True + + m = re.match (r"DEFINE_BLAKE2_VARIANT\((.), (.), ([0-9]*)", line) + if isc and not m is None: + bs = m.groups()[0] + bits = m.groups()[2] + mdname = "_gcry_digest_spec_blake2%s_%s" % (bs, bits) + mdnames.append (mdname) + + m = re.match ("(const )?gcry_md_spec_t", line) + if isc and not m is None: + assert not ismd + assert not ispk + assert not iscipher + assert not iscryptostart + line = removeprefix(line, "const ") + mdname = removeprefix(removeprefix(line, "const "), "gcry_md_spec_t").strip () + mdname = re.match("[a-zA-Z0-9_]*",mdname).group () + mdnames.append (mdname) + ismd = True + ismddefine = False + mdarg = 0 + iscryptostart = True + m = re.match (" (const )?gcry_md_spec_t _gcry_digest_spec_blake2.*\\\\", line) + if isc and not m is None: + assert not ismd + assert not ispk + assert not iscipher + assert not iscryptostart + line = removeprefix(line, " const ") + ismd = True + ismddefine = True + mdname = "_gcry_digest_spec_blake2" + mdarg = 0 + iscryptostart = True + m = re.match (r"static const char \*selftest.*;$", line) + if not m is None: + fname = line[len (r"static const char \*"):] + fname = re.match ("[a-zA-Z0-9_]*", fname).group () + chmsg = "(%s): Removed declaration." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("static gcry_mpi_t gen_k .*;$", line) + if not m is None: + chmsg = "(gen_k): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("static (int|void) test_keys .*;$", line) + if not m is None: + chmsg = "(test_keys): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("static void secret .*;$", line) + if not m is None: + chmsg = "(secret): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match (r"static void \(\*progress_cb\).*;$", line) + if not m is None: + chmsg = "(progress_cb): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match (r"static void \*progress_cb_data.*;$", line) + if not m is None: + chmsg = "(progress_cb): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + + m = re.match (r"((static )?const char( |)\*|static const gcry_md_spec_t \*|(static )?gpg_err_code_t|gpg_error_t|void|(static )?int|(static )?unsigned int|(static )?gcry_err_code_t|static gcry_mpi_t|static void|void|static elliptic_curve_t) *$", line) + if not m is None: + hold = True + holdline = line + continue + m = re.match (r"static int tripledes_set2keys \(.*\);", line) + if not m is None: + continue + m = re.match (r"static int tripledes_set3keys \(.*\);", line) + if not m is None: + continue + m = re.match (r"static int tripledes_set2keys \(", line) + if not m is None: + skip_statement = True + continue + m = re.match (r"static int tripledes_set3keys \(", line) + if not m is None: + skip_statement = True + continue + m = re.match ("static const char sample_secret_key", line) + if not m is None: + skip_statement = True + continue + m = re.match ("static const char sample_public_key", line) + if not m is None: + skip_statement = True + continue + m = re.match ("static void sign|static gpg_err_code_t sign|static gpg_err_code_t generate", + line) + if not m is None: + skip_statement = True + continue + + m = re.match ("cipher_extra_spec_t", line) + if isc and not m is None: + skip2 = True + fname = line[len ("cipher_extra_spec_t "):] + fname = re.match ("[a-zA-Z0-9_]*", fname).group () + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("pk_extra_spec_t", line) + if isc and not m is None: + skip2 = True + fname = line[len ("pk_extra_spec_t "):] + fname = re.match ("[a-zA-Z0-9_]*", fname).group () + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("md_extra_spec_t", line) + if isc and not m is None: + skip2 = True + fname = line[len ("md_extra_spec_t "):] + fname = re.match ("[a-zA-Z0-9_]*", fname).group () + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + fw.write (line) + if len (ciphernames) > 0 or len (mdnames) > 0 or len (pknames) > 0: + modfiles = [cipher_file] + if modname in extra_files: + modfiles += extra_files[modname] + if len (ciphernames) > 0 or len (mdnames) > 0: + modules_sym_md.append (modname) + chmsg = "(GRUB_MOD_INIT(%s)): New function\n" % modname if nch: chlognew = "%s\n %s" % (chlognew, chmsg) else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True - continue - else: - fw.write (holdline) - m = re.match ("# *include <(.*)>", line) - if not m is None: - chmsg = "Removed including of %s" % m.groups ()[0] - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s: %s" % (chlognew, chmsg) - nch = True - continue - m = re.match ("(const )?gcry_cipher_spec_t", line) - if isc and not m is None: - assert (not ismd) - assert (not ispk) - assert (not iscipher) - assert (not iscryptostart) - ciphername = removeprefix(removeprefix(line, "const "), "gcry_cipher_spec_t").strip () - ciphername = re.match("[a-zA-Z0-9_]*",ciphername).group () - ciphernames.append (ciphername) - iscipher = True - iscryptostart = True - - m = re.match ("(const )?gcry_pk_spec_t", line) - if isc and not m is None: - assert (not ismd) - assert (not ispk) - assert (not iscipher) - assert (not iscryptostart) - pkname = removeprefix(removeprefix(line, "const "), "gcry_pk_spec_t").strip () - pkname = re.match("[a-zA-Z0-9_]*",pkname).group () - pknames.append (pkname) - ispk = True - iscryptostart = True - - m = re.match (r"DEFINE_BLAKE2_VARIANT\((.), (.), ([0-9]*)", line) - if isc and not m is None: - bs = m.groups()[0] - bits = m.groups()[2] - mdname = "_gcry_digest_spec_blake2%s_%s" % (bs, bits) - mdnames.append (mdname) - - m = re.match ("(const )?gcry_md_spec_t", line) - if isc and not m is None: - assert (not ismd) - assert (not ispk) - assert (not iscipher) - assert (not iscryptostart) - line = removeprefix(line, "const ") - mdname = removeprefix(removeprefix(line, "const "), "gcry_md_spec_t").strip () - mdname = re.match("[a-zA-Z0-9_]*",mdname).group () - mdnames.append (mdname) - ismd = True - ismddefine = False - mdarg = 0 - iscryptostart = True - m = re.match (" (const )?gcry_md_spec_t _gcry_digest_spec_blake2.*\\\\", line) - if isc and not m is None: - assert (not ismd) - assert (not ispk) - assert (not iscipher) - assert (not iscryptostart) - line = removeprefix(line, " const ") - ismd = True - ismddefine = True - mdname = "_gcry_digest_spec_blake2" - mdarg = 0 - iscryptostart = True - m = re.match (r"static const char \*selftest.*;$", line) - if not m is None: - fname = line[len (r"static const char \*"):] - fname = re.match ("[a-zA-Z0-9_]*", fname).group () - chmsg = "(%s): Removed declaration." % fname - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True - continue - m = re.match ("static gcry_mpi_t gen_k .*;$", line) - if not m is None: - chmsg = "(gen_k): Removed declaration." - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True - continue - m = re.match ("static (int|void) test_keys .*;$", line) - if not m is None: - chmsg = "(test_keys): Removed declaration." - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True - continue - m = re.match ("static void secret .*;$", line) - if not m is None: - chmsg = "(secret): Removed declaration." - if nch: + chlognew = "%s%s" % (chlognew, chmsg) + nch = True + fw.write ("\n\nGRUB_MOD_INIT(%s)\n" % modname) + fw.write ("{\n") + for ciphername in ciphernames: + chmsg = "Register cipher %s" % ciphername + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_cipher_register (&%s);\n" % ciphername) + for ctxsize in mdctxsizes: + fw.write (" COMPILE_TIME_ASSERT(%s <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE);\n" % ctxsize) + for mdname in mdnames: + chmsg = "Register digest %s" % mdname + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_md_register (&%s);\n" % mdname) + for pkname in pknames: + chmsg = "Register pk %s" % pkname + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_crypto_pk_%s = &%s;\n" + % (pkname.replace ("_gcry_pubkey_spec_", ""), pkname)) + fw.write ("}") + chmsg = "(GRUB_MOD_FINI(%s)): New function\n" % modname chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True + fw.write ("\n\nGRUB_MOD_FINI(%s)\n" % modname) + fw.write ("{\n") + for ciphername in ciphernames: + chmsg = "Unregister cipher %s" % ciphername + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_cipher_unregister (&%s);\n" % ciphername) + for mdname in mdnames: + chmsg = "Unregister MD %s" % mdname + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_md_unregister (&%s);\n" % mdname) + for pkname in pknames: + chmsg = "Unregister pk %s" % pkname + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_crypto_pk_%s = 0;\n" + % (pkname.replace ("_gcry_pubkey_spec_", ""))) + fw.write ("}\n") + conf.write ("module = {\n") + conf.write (" name = %s;\n" % modname) + for src in modfiles: + conf.write (" common = lib/libgcrypt-grub/cipher/%s;\n" % src) + if len (ciphernames) > 0 or len (mdnames) > 0: + confutil.write (" common = grub-core/lib/libgcrypt-grub/cipher/%s;\n" % src) + if modname == "gcry_ecc": + conf.write (" common = lib/libgcrypt-grub/mpi/ec.c;\n") + conf.write (" cflags = '$(CFLAGS_GCRY) -Wno-redundant-decls';\n") + elif modname in ["gcry_rijndael", "gcry_md4", "gcry_md5", "gcry_rmd160", "gcry_sha1", "gcry_sha256", "gcry_sha512", "gcry_tiger"]: + # Alignment checked by hand + conf.write (" cflags = '$(CFLAGS_GCRY) -Wno-cast-align';\n") + else: + conf.write (" cflags = '$(CFLAGS_GCRY)';\n") + conf.write (" cppflags = '$(CPPFLAGS_GCRY)';\n") + conf.write ("};\n\n") + if nch: + chlog = "%s%s\n" % (chlog, chlognew) + elif isc and cipher_file not in extra_files_list: + print ("WARNING: C file isn't a module: %s" % cipher_file) + os.remove (outfile) + chlog = "%s\n * %s: Removed" % (chlog, cipher_file) continue - m = re.match (r"static void \(\*progress_cb\).*;$", line) - if not m is None: - chmsg = "(progress_cb): Removed declaration." - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True + chlog = "%s%sSkipped unknown file\n" % (chlog, chlognew) + print ("WARNING: unknown file %s" % cipher_file) + + for src in sorted (os.listdir (os.path.join (indir, "src"))): + if src in ["versioninfo.rc.in", "ath.c", "ChangeLog-2011", + "dumpsexp.c", "fips.c", "gcrypt.h.in", + "gcryptrnd.c", "getrandom.c", + "global.c", "hmac256.c", + "hwfeatures.c", "libgcrypt-config.in", + "libgcrypt.def", "libgcrypt.m4", + "libgcrypt.vers", "Makefile.am", + "Manifest", "misc.c", + "missing-string.c", "module.c", + "secmem.c", + "stdmem.c", "visibility.c"]: + continue + outfile = os.path.join (basedir, "src", src) + infile = os.path.join (indir, "src", src) + if os.path.isdir (infile): + continue + with codecs.open (outfile, "w", "utf-8") as fw: + if src == "gcrypt-module.h": continue - m = re.match (r"static void \*progress_cb_data.*;$", line) - if not m is None: - chmsg = "(progress_cb): Removed declaration." - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True + if src == "visibility.h": + fw.write ("# include <grub/gcrypt/gcrypt.h>\n") continue + with codecs.open (infile, "r", "utf-8") as f: + if src == "types.h": + fw.write (f.read ().replace ("float f;", "").replace ("double g;", "")) + continue - m = re.match (r"((static )?const char( |)\*|static const gcry_md_spec_t \*|(static )?gpg_err_code_t|gpg_error_t|void|(static )?int|(static )?unsigned int|(static )?gcry_err_code_t|static gcry_mpi_t|static void|void|static elliptic_curve_t) *$", line) - if not m is None: - hold = True - holdline = line - continue - m = re.match (r"static int tripledes_set2keys \(.*\);", line) - if not m is None: - continue - m = re.match (r"static int tripledes_set3keys \(.*\);", line) - if not m is None: - continue - m = re.match (r"static int tripledes_set2keys \(", line) - if not m is None: - skip_statement = True - continue - m = re.match (r"static int tripledes_set3keys \(", line) - if not m is None: - skip_statement = True - continue - m = re.match ("static const char sample_secret_key", line) - if not m is None: - skip_statement = True - continue - m = re.match ("static const char sample_public_key", line) - if not m is None: - skip_statement = True - continue - m = re.match ("static void sign|static gpg_err_code_t sign|static gpg_err_code_t generate", - line) - if not m is None: - skip_statement = True - continue + if src == "cipher-proto.h": + fw.write("#include <grub/crypto.h>\n") + fw.write("typedef gcry_selftest_func_t selftest_func_t;") + continue - m = re.match ("cipher_extra_spec_t", line) - if isc and not m is None: - skip2 = True - fname = line[len ("cipher_extra_spec_t "):] - fname = re.match ("[a-zA-Z0-9_]*", fname).group () - chmsg = "(%s): Removed." % fname - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True - continue - m = re.match ("pk_extra_spec_t", line) - if isc and not m is None: - skip2 = True - fname = line[len ("pk_extra_spec_t "):] - fname = re.match ("[a-zA-Z0-9_]*", fname).group () - chmsg = "(%s): Removed." % fname - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True - continue - m = re.match ("md_extra_spec_t", line) - if isc and not m is None: - skip2 = True - fname = line[len ("md_extra_spec_t "):] - fname = re.match ("[a-zA-Z0-9_]*", fname).group () - chmsg = "(%s): Removed." % fname - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s %s" % (chlognew, chmsg) - nch = True - continue - fw.write (line) - if len (ciphernames) > 0 or len (mdnames) > 0 or len (pknames) > 0: - modfiles = [cipher_file] - if modname in extra_files.keys(): - modfiles += extra_files[modname] - if len (ciphernames) > 0 or len (mdnames) > 0: - modules_sym_md.append (modname) - chmsg = "(GRUB_MOD_INIT(%s)): New function\n" % modname - if nch: - chlognew = "%s\n %s" % (chlognew, chmsg) - else: - chlognew = "%s%s" % (chlognew, chmsg) - nch = True - fw.write ("\n\nGRUB_MOD_INIT(%s)\n" % modname) - fw.write ("{\n") - for ciphername in ciphernames: - chmsg = "Register cipher %s" % ciphername - chlognew = "%s\n %s" % (chlognew, chmsg) - fw.write (" grub_cipher_register (&%s);\n" % ciphername) - for ctxsize in mdctxsizes: - fw.write (" COMPILE_TIME_ASSERT(%s <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE);\n" % ctxsize) - for mdname in mdnames: - chmsg = "Register digest %s" % mdname - chlognew = "%s\n %s" % (chlognew, chmsg) - fw.write (" grub_md_register (&%s);\n" % mdname) - for pkname in pknames: - chmsg = "Register pk %s" % pkname - chlognew = "%s\n %s" % (chlognew, chmsg) - fw.write (" grub_crypto_pk_%s = &%s;\n" - % (pkname.replace ("_gcry_pubkey_spec_", ""), pkname)) - fw.write ("}") - chmsg = "(GRUB_MOD_FINI(%s)): New function\n" % modname - chlognew = "%s\n %s" % (chlognew, chmsg) - fw.write ("\n\nGRUB_MOD_FINI(%s)\n" % modname) - fw.write ("{\n") - for ciphername in ciphernames: - chmsg = "Unregister cipher %s" % ciphername - chlognew = "%s\n %s" % (chlognew, chmsg) - fw.write (" grub_cipher_unregister (&%s);\n" % ciphername) - for mdname in mdnames: - chmsg = "Unregister MD %s" % mdname - chlognew = "%s\n %s" % (chlognew, chmsg) - fw.write (" grub_md_unregister (&%s);\n" % mdname) - for pkname in pknames: - chmsg = "Unregister pk %s" % pkname - chlognew = "%s\n %s" % (chlognew, chmsg) - fw.write (" grub_crypto_pk_%s = 0;\n" - % (pkname.replace ("_gcry_pubkey_spec_", ""))) - fw.write ("}\n") - conf.write ("module = {\n") - conf.write (" name = %s;\n" % modname) - for src in modfiles: - conf.write (" common = lib/libgcrypt-grub/cipher/%s;\n" % src) - if len (ciphernames) > 0 or len (mdnames) > 0: - confutil.write (" common = grub-core/lib/libgcrypt-grub/cipher/%s;\n" % src) - if modname == "gcry_ecc": - conf.write (" common = lib/libgcrypt-grub/mpi/ec.c;\n") - conf.write (" cflags = '$(CFLAGS_GCRY) -Wno-redundant-decls';\n") - elif modname == "gcry_rijndael" or modname == "gcry_md4" or modname == "gcry_md5" or modname == "gcry_rmd160" or modname == "gcry_sha1" or modname == "gcry_sha256" or modname == "gcry_sha512" or modname == "gcry_tiger": - # Alignment checked by hand - conf.write (" cflags = '$(CFLAGS_GCRY) -Wno-cast-align';\n"); - else: - conf.write (" cflags = '$(CFLAGS_GCRY)';\n"); - conf.write (" cppflags = '$(CPPFLAGS_GCRY)';\n"); - conf.write ("};\n\n") - f.close () - fw.close () - if nch: - chlog = "%s%s\n" % (chlog, chlognew) - elif isc and cipher_file not in extra_files_list: - print ("WARNING: C file isn't a module: %s" % cipher_file) - f.close () - fw.close () - os.remove (outfile) - chlog = "%s\n * %s: Removed" % (chlog, cipher_file) - continue - chlog = "%s%sSkipped unknown file\n" % (chlog, chlognew) - print ("WARNING: unknown file %s" % cipher_file) - -cryptolist.close () - -for src in sorted (os.listdir (os.path.join (indir, "src"))): - if src == "versioninfo.rc.in" or src == "ath.c" or src == "ChangeLog-2011" \ - or src == "dumpsexp.c" or src == "fips.c" or src == "gcrypt.h.in" \ - or src == "gcryptrnd.c"or src == "getrandom.c" \ - or src == "global.c" or src == "hmac256.c" \ - or src == "hwfeatures.c" or src == "libgcrypt-config.in" \ - or src == "libgcrypt.def" or src == "libgcrypt.m4" \ - or src == "libgcrypt.vers" or src == "Makefile.am" \ - or src == "Manifest" or src == "misc.c" \ - or src == "missing-string.c" or src == "module.c" \ - or src == "secmem.c" \ - or src == "stdmem.c" or src == "visibility.c": - continue - outfile = os.path.join (basedir, "src", src) - infile = os.path.join (indir, "src", src) - if os.path.isdir (infile): - continue - fw = codecs.open (outfile, "w", "utf-8") - if src == "gcrypt-module.h": - fw.close () - continue - if src == "visibility.h": - fw.write ("# include <grub/gcrypt/gcrypt.h>\n") - fw.close () - continue - f = codecs.open (infile, "r", "utf-8") - if src == "types.h": - fw.write (f.read ().replace ("float f;", "").replace ("double g;", "")) - f.close () - fw.close () - continue - - if src == "cipher-proto.h": - fw.write("#include <grub/crypto.h>\n") - fw.write("typedef gcry_selftest_func_t selftest_func_t;") - f.close () - fw.close () - continue - - if src == "g10lib.h": - fw.write("#include <cipher_wrap.h>\n") - fw.write("#include <grub/crypto.h>\n") - fw.write("#include <stdlib.h>\n") - fw.write (f.read ().replace ("(printf,f,a)", "(__printf__,f,a)").replace ("#include \"../compat/libcompat.h\"", "").replace("#define N_(a) (a)", "")) - f.close () - fw.close () - continue - - fw.write (f.read ()) - f.close () - fw.close () - -for src in sorted (os.listdir (os.path.join (indir, "mpi"))): - if src == "config.links" or src == "ChangeLog-2011" \ - or src == "Manifest" \ - or src == "Makefile.am": - continue - infile = os.path.join (indir, "mpi", src) - outfile = os.path.join (basedir, "mpi", src) - if os.path.isdir (infile): - continue - f = codecs.open (infile, "r", "utf-8") - fw = codecs.open (outfile, "w", "utf-8") - fw.write ("/* This file was automatically imported with \n") - fw.write (" import_gcry.py. Please don't modify it */\n") - hold = False - skip = 0 - for line in f: - if skip > 0: - if line[0] == "}": - skip = skip - 1 - continue - if hold: - hold = False - # We're optimising for size and exclude anything needing good - # randomness. - if not re.match ("(_gcry_mpi_get_hw_config|gcry_mpi_randomize|_gcry_mpi_randomize)", line) is None: - skip = 1 - continue - else: - fw.write (holdline) - m = re.match (r"(const char( |)\*|void) *$", line) - if not m is None: - hold = True - holdline = line + if src == "g10lib.h": + fw.write("#include <cipher_wrap.h>\n") + fw.write("#include <grub/crypto.h>\n") + fw.write("#include <stdlib.h>\n") + fw.write (f.read ().replace ("(printf,f,a)", "(__printf__,f,a)").replace ("#include \"../compat/libcompat.h\"", "").replace("#define N_(a) (a)", "")) + continue + + fw.write (f.read ()) + + for src in sorted (os.listdir (os.path.join (indir, "mpi"))): + if src in ["config.links", "ChangeLog-2011", "Manifest", "Makefile.am"]: continue - m = re.match (r"#include \"mod-source-info\.h\"", line) - if not m is None: + infile = os.path.join (indir, "mpi", src) + outfile = os.path.join (basedir, "mpi", src) + if os.path.isdir (infile): continue - fw.write (line) - -chlog = "%s * crypto.lst: New file.\n" % chlog - -outfile = os.path.join (cipher_dir_out, "types.h") -fw=codecs.open (outfile, "w", "utf-8") -fw.write ("#include <grub/types.h>\n") -fw.write ("#include <cipher_wrap.h>\n") -chlog = "%s * types.h: New file.\n" % chlog -fw.close () - -outfile = os.path.join (cipher_dir_out, "memory.h") -fw=codecs.open (outfile, "w", "utf-8") -fw.write ("#include <cipher_wrap.h>\n") -chlog = "%s * memory.h: New file.\n" % chlog -fw.close () - - -outfile = os.path.join (cipher_dir_out, "cipher.h") -fw=codecs.open (outfile, "w", "utf-8") -fw.write ("#include <grub/crypto.h>\n") -fw.write ("#include <cipher_wrap.h>\n") -chlog = "%s * cipher.h: Likewise.\n" % chlog -fw.close () - -outfile = os.path.join (cipher_dir_out, "g10lib.h") -fw=codecs.open (outfile, "w", "utf-8") -fw.write ("#include <cipher_wrap.h>\n") -chlog = "%s * g10lib.h: Likewise.\n" % chlog -fw.close () - -conf.close (); - -initfile = codecs.open (os.path.join (cipher_dir_out, "init.c"), "w", "utf-8") -initfile.write ("#include <grub/crypto.h>\n") -for module in modules_sym_md: - initfile.write ("extern void grub_%s_init (void);\n" % module) - initfile.write ("extern void grub_%s_fini (void);\n" % module) -initfile.write ("\n") -initfile.write ("void\n") -initfile.write ("grub_gcry_init_all (void)\n") -initfile.write ("{\n") -for module in modules_sym_md: - initfile.write (" grub_%s_init ();\n" % module) -initfile.write ("}\n") -initfile.write ("\n") -initfile.write ("void\n") -initfile.write ("grub_gcry_fini_all (void)\n") -initfile.write ("{\n") -for module in modules_sym_md: - initfile.write (" grub_%s_fini ();\n" % module) -initfile.write ("}\n") -initfile.close () - -confutil.write (" common = grub-core/lib/libgcrypt-grub/cipher/init.c;\n") -confutil.write ("};\n"); -confutil.close (); + with codecs.open (infile, "r", "utf-8") as f, codecs.open (outfile, "w", "utf-8") as fw: + fw.write ("/* This file was automatically imported with \n") + fw.write (" import_gcry.py. Please don't modify it */\n") + hold = False + holdline = "" + skip = 0 + for line in f: + if skip > 0: + if line[0] == "}": + skip = skip - 1 + continue + if hold: + hold = False + # We're optimising for size and exclude anything needing good + # randomness. + if not re.match ("(_gcry_mpi_get_hw_config|gcry_mpi_randomize|_gcry_mpi_randomize)", line) is None: + skip = 1 + continue + else: + fw.write (holdline) + m = re.match (r"(const char( |)\*|void) *$", line) + if not m is None: + hold = True + holdline = line + continue + m = re.match (r"#include \"mod-source-info\.h\"", line) + if not m is None: + continue + fw.write (line) + + chlog = "%s * crypto.lst: New file.\n" % chlog + + outfile = os.path.join (cipher_dir_out, "types.h") + with codecs.open (outfile, "w", "utf-8") as fw: + fw.write ("#include <grub/types.h>\n") + fw.write ("#include <cipher_wrap.h>\n") + chlog = "%s * types.h: New file.\n" % chlog + + outfile = os.path.join (cipher_dir_out, "memory.h") + with codecs.open (outfile, "w", "utf-8") as fw: + fw.write ("#include <cipher_wrap.h>\n") + chlog = "%s * memory.h: New file.\n" % chlog + + + outfile = os.path.join (cipher_dir_out, "cipher.h") + with codecs.open (outfile, "w", "utf-8") as fw: + fw.write ("#include <grub/crypto.h>\n") + fw.write ("#include <cipher_wrap.h>\n") + chlog = "%s * cipher.h: Likewise.\n" % chlog + + outfile = os.path.join (cipher_dir_out, "g10lib.h") + with codecs.open (outfile, "w", "utf-8") as fw: + fw.write ("#include <cipher_wrap.h>\n") + chlog = "%s * g10lib.h: Likewise.\n" % chlog + + conf.close () + + with codecs.open (os.path.join (cipher_dir_out, "init.c"), "w", "utf-8") as initfile: + initfile.write ("#include <grub/crypto.h>\n") + for module in modules_sym_md: + initfile.write ("extern void grub_%s_init (void);\n" % module) + initfile.write ("extern void grub_%s_fini (void);\n" % module) + initfile.write ("\n") + initfile.write ("void\n") + initfile.write ("grub_gcry_init_all (void)\n") + initfile.write ("{\n") + for module in modules_sym_md: + initfile.write (" grub_%s_init ();\n" % module) + initfile.write ("}\n") + initfile.write ("\n") + initfile.write ("void\n") + initfile.write ("grub_gcry_fini_all (void)\n") + initfile.write ("{\n") + for module in modules_sym_md: + initfile.write (" grub_%s_fini ();\n" % module) + initfile.write ("}\n") + + confutil.write (" common = grub-core/lib/libgcrypt-grub/cipher/init.c;\n") + confutil.write ("};\n") + confutil.close () outfile = os.path.join (cipher_dir_out, "ChangeLog") -fw=codecs.open (outfile, "w", "utf-8") -dt = datetime.date.today () -fw.write ("%04d-%02d-%02d Automatic import tool\n" % \ - (dt.year,dt.month, dt.day)) -fw.write ("\n") -fw.write (" Imported ciphers to GRUB\n") -fw.write ("\n") -fw.write (chlog) -fw.write ("\n") -fw.close () +with codecs.open (outfile, "w", "utf-8") as fw: + dt = datetime.date.today () + fw.write ("%04d-%02d-%02d Automatic import tool\n" % \ + (dt.year,dt.month, dt.day)) + fw.write ("\n") + fw.write (" Imported ciphers to GRUB\n") + fw.write ("\n") + fw.write (chlog) + fw.write ("\n") -- 2.49.0 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel