Python wrapper for PGP encryption
pgp.py
import os
import subprocess, re
import tempfile
from typing import Union
from common.subprocess import SubprocessResult
class PgpWrapper:
def __init__(self):
self.work_folder: tempfile.TemporaryDirectory = tempfile.TemporaryDirectory()
self.env = env
def _run(self, vargs: list[str]) -> SubprocessResult:
return common.subprocess.run(self.env.config.get_item('pgp', 'executable-path'),
['--homedir', self.work_folder.name, *vargs])
class PgpEncrypt(PgpWrapper):
def __init__(self, public_key_path: str):
super().__init__(env)
res = self._run(['--import', public_key_path]).assertCode0()
key_mail_row: str = [it for it in str(res.err, 'UTF-8').split('\r\n') if it[0:9] == 'gpg: key '][0]
self.key_id: str = re.sub('[^A-Z0-9]+', ' ', key_mail_row).strip().split(' ')[0]
self.recipient_email: str = key_mail_row.split('"')[1]
def encrypt(self, message: Union[bytes, str]):
if type(message) is str: message = bytes(message, 'UTF-8')
with tempfile.TemporaryFile(delete=False) as input:
input.write(message)
output_name = os.path.join(self.work_folder.name, Ids.next_subid())
self._run(['--openpgp', '-e', '--always-trust', '-a', '-r', self.key_id, '-o', output_name,
input.name]).assertCode0()
return open(output_name).read()