123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #!/usr/bin/env python
- import argparse
- from datetime import datetime
- import os
- import sys
- from typing import Tuple
- import zmq.auth
- # @brief Creates a new keypair for ZMQ encryption
- # @param[in] directory The location where to store the keys
- # @return The public and private key tuple
- def KeyPairCreator(directory: str, server: bool) -> Tuple[str, str]:
- if not server:
- target = 'client'
- else:
- target = 'server'
- public, private = zmq.auth.create_certificates(directory, target)
- return public, private
- def str2bool(value):
- if isinstance(value, bool):
- return value
- elif value.lower() in ('yes', 'true', 't', 'y', '1'):
- return True
- elif value.lower() in ('no', 'false', 'f', 'n', '0'):
- return False
- else:
- raise argparse.ArgumentTypeError('Boolean value expected')
- def findIdentificationKey(path, publicKey : bool):
- if True == publicKey:
- identifier = 'public-key = '
- else:
- identifier = 'secret-key = '
- with open(path) as file:
- key = ''
- for line in file:
- if identifier in line:
- elements = line.split('=')
- for idx in range(1, len(elements)):
- if 0 == len(key):
- key = elements[idx][2:-1]
- key = key + elements[idx][-1]
- else:
- key = key + '=' + elements[idx]
- return key[0:-2]
- return None
- if __name__ == '__main__':
- # create the commandline parser
- parser = argparse.ArgumentParser(description='Create a new key-value pair')
- parser.add_argument('--directory', type=str, help='Directory where to store the key pair')
- parser.add_argument('--publickey', nargs='?', type=str, default=os.getcwd(), help='Full path to the public key of the server')
- parser.add_argument('--server', default=False, action='store_true', help="Creates server key pair")
- args = parser.parse_args()
- # validate the arguments
- if False == args.server and not os.path.exists(args.publickey):
- sys.stderr.write('The public key of the server cannot be found')
- sys.exit(-1)
- # create the directory if it does not exist
- if not os.path.exists(args.directory):
- os.makedirs(args.directory)
- # create the keys
- _, private = KeyPairCreator(args.directory, args.server)
- if False == args.server:
- publicServer = findIdentificationKey(args.publickey, True)
- publicClient = findIdentificationKey(private, True)
- privateClient = findIdentificationKey(private, False)
- if None == publicServer:
- sys.stderr.write('The public key of the server cannot be found in the defined file')
- sys.exit(-1)
- if None == publicClient:
- sys.stderr.write('Unable to extract the created public key')
- sys.exit(-1)
- if None == privateClient:
- sys.stderr.write('Unable to extract the created private key')
- sys.exit(-1)
- # rename keys
- timestamp = str(datetime.now(tz=None))
- timestamp = timestamp.replace(' ', '_')
- timestamp = timestamp.replace(':', '-')
- os.rename(os.path.join(args.directory, 'client.key'), os.path.join(args.directory, timestamp + '.key'))
- os.rename(os.path.join(args.directory, 'client.key_secret'), os.path.join(args.directory, timestamp + '.key_secret'))
- print(publicServer)
- print(publicClient)
- print(privateClient)
|