aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/pgp/keygen.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman_pgp/pgp/keygen.py')
-rw-r--r--src/mailman_pgp/pgp/keygen.py57
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))