From 22e4c0b2bfea51c9f48d0d84e527ffe4c8eb0e25 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 13 Oct 2019 18:25:49 +0300 Subject: Improve meson.build files - meson should now properly create OpenSSL signing key and hexdump before trying to compile plugin loader --- tools/ssl-keygen.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100755 tools/ssl-keygen.py (limited to 'tools/ssl-keygen.py') diff --git a/tools/ssl-keygen.py b/tools/ssl-keygen.py new file mode 100755 index 0000000..555b379 --- /dev/null +++ b/tools/ssl-keygen.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 + +import argparse +import sys +import os.path +import subprocess +from functools import partial + +def generate_private_key(out_pem='privateKey.pem'): + subprocess.run(['openssl', 'genrsa', '-out', out_pem, '4096'], check=True) + +def generate_public_key(in_pem='privateKey.pem', out_pem='publicKey.pem'): + subprocess.run(['openssl', 'rsa', '-in', in_pem, '-pubout', '-out', out_pem], check=True) + +def hexdump(array_type, array_name, length_type, in_pem, out_h): + n = 0 + + print("// Autogenerated hex dump of OpenSSL public key, do not edit", file=out_h) + print("{} {}[] = {{".format(array_type, array_name), file=out_h) + + for line in iter(partial(in_pem.read, 16), b''): + l = list(line) + for n, i in enumerate(l): + l[n] = '0x{:02X}'.format(i) + + print(" {},".format(", ".join(l)), file=out_h) + + n += 1 + + print("};", file=out_h) + print("{} {}_len = {};".format(length_type, array_name, n), file=out_h) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Generate OpenSSL key and hexdump') + + parser.add_argument('--private', default='privateKey.pem', type=str, help='Private key input') + parser.add_argument('--public', default='publicKey.pem', type=str, help='Public key input') + + parser.add_argument('--output', type=argparse.FileType('wt'), default=sys.stdout, help='Output file') + + parser.add_argument('--array-type', type=str, default='const unsigned char', help='Array type') + parser.add_argument('--length-type', type=str, default='const unsigned int', help='Length type') + parser.add_argument('--array-name', type=str, default='a', help='Array name') + + args=parser.parse_args() + + # check if public key exists + if not os.path.isfile(args.public): + # if there is no private key, generate one + if not os.path.isfile(args.private): + generate_private_key(args.private) + + # export public key from private + generate_public_key(args.private, args.public) + + with open(args.public, "rb") as public_pem: + hexdump(args.array_type, args.array_name, args.length_type, public_pem, args.output) + + -- cgit v1.2.1