{{error}}
{{(quickSearchResults.length>10)?'10+':(quickSearchResults.length)}} {{(quickSearchResults.length==1)?'result':'results'}}
{{result.title}} {{result.timeStamp | mysql2ymd }}
I am sorry, no such article was written yet.
Python wrapper for PGP encryption
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()