diff options
Diffstat (limited to 'src/mailman_pgp/pgp/keygen.py')
| -rw-r--r-- | src/mailman_pgp/pgp/keygen.py | 57 |
1 files changed, 25 insertions, 32 deletions
diff --git a/src/mailman_pgp/pgp/keygen.py b/src/mailman_pgp/pgp/keygen.py index e1fa6b0..5df56d4 100644 --- a/src/mailman_pgp/pgp/keygen.py +++ b/src/mailman_pgp/pgp/keygen.py @@ -14,46 +14,46 @@ class ListKeyGenerator(mp.Process): """""" def __init__(self, keypair_config, display_name, posting_address, - request_address, queue, key_path): + request_address, key_path): super().__init__( target=self.generate, args=( keypair_config, display_name, posting_address, request_address, - queue, key_path), + key_path), daemon=True) def generate(self, keypair_config, display_name, posting_address, - request_address, queue, key_path): + request_address, key_path): """ - + Generates the list keypair and saves it to key_path, if it does not + exist. :param keypair_config: :param display_name: :param posting_address: :param request_address: - :param queue: :param key_path: - :return: """ - if exists(key_path) and isfile(key_path): - queue.put(PGPKey.from_file(key_path)) - return - key = self._create(keypair_config, display_name, posting_address, - request_address) - self._save(key, queue, key_path) + with Lock(key_path + '.lock'): + if exists(key_path) and isfile(key_path): + return + key = self._create(keypair_config, display_name, posting_address, + request_address) + self._save(key, key_path) def _create(self, config, display_name, posting_address, request_address): """ - + Generates the list `PGPKey` keypair, with posting and request UIDs. + Uses a Sign+Certify main key and Encrypt subkey. :param config: :param display_name: :param posting_address: :param request_address: - :return: + :return: `PGPKey` """ # Generate the Sign + Certify primary key. key_type = config['key_type'] - key_size = config['key_size'] - key = PGPKey.new(key_type, key_size) + key_length = config['key_length'] + key = PGPKey.new(key_type, key_length) key_params = dict(usage={KeyFlags.Sign, KeyFlags.Certify}, hashes=[HashAlgorithm.SHA256, HashAlgorithm.SHA384, @@ -67,36 +67,29 @@ class ListKeyGenerator(mp.Process): CompressionAlgorithm.ZIP, CompressionAlgorithm.Uncompressed], primary=True) - + # Generate the posting + request uids. main_uid = PGPUID.new(display_name, email=posting_address) request_uid = PGPUID.new(display_name, email=request_address) - + # Generate the Encrypt subkey. subkey_type = config['subkey_type'] - subkey_size = config['subkey_size'] - subkey = PGPKey.new(subkey_type, subkey_size) - + subkey_length = config['subkey_length'] + subkey = PGPKey.new(subkey_type, subkey_length) subkey_params = dict( usage={KeyFlags.EncryptCommunications, KeyFlags.EncryptStorage}, primary=False ) - + # Put it all together. key.add_uid(main_uid, **key_params) key.add_uid(request_uid, **key_params) key.add_subkey(subkey, **subkey_params) return key - def _save(self, key, queue, key_path): + def _save(self, key, key_path): """ - + Save the generated key. :param key: - :param queue: :param key_path: - :return: """ - queue.put(key) - - lock = Lock(key_path) - with lock: - with open(key_path, 'w') as key_file: - key_file.write(str(key)) + with open(key_path, 'w') as key_file: + key_file.write(str(key)) |
