diff options
Diffstat (limited to 'src/tests/gnupg.py')
-rw-r--r-- | src/tests/gnupg.py | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/tests/gnupg.py b/src/tests/gnupg.py new file mode 100644 index 0000000..375cbc9 --- /dev/null +++ b/src/tests/gnupg.py @@ -0,0 +1,121 @@ +import copy +from cli_common import run_proc + +class GnuPG(object): + def __init__(self, homedir, gpg_path): + self.__gpg = gpg_path + self.__common_params = ['--homedir', homedir, '--yes'] + self.__password = None + self.__userid = None + self.__hash = None + + @property + def bin(self): + return self.__gpg + + @property + def common_params(self): + return copy.copy(self.__common_params) + + @property + def password(self): + return self.__password + + @property + def userid(self): + return self.__userid + + @userid.setter + def userid(self, val): + self.__userid = val + + @property + def hash(self): + return self.__hash + + @hash.setter + def hash(self, val): + self.__hash = val + + @password.setter + def password(self, val): + self.__password = val + + def copy(self): + return copy.deepcopy(self) + + def _run(self, cmd, params, batch_input = None): + retcode, _, _ = run_proc(cmd, params, batch_input) + return retcode == 0 + + def list_keys(self, secret = False): + params = ['--list-secret-keys'] if secret else ['--list-keys'] + params = params + self.common_params + return self._run(self.__gpg, params) + + def generate_key_batch(self, batch_input): + params = ['--gen-key', '--expert', '--batch', + '--pinentry-mode', 'loopback'] + self.common_params + if self.password: + params += ['--passphrase', self.password] + if self.hash: + params += ['--cert-digest-algo', self.hash] + return self._run(self.__gpg, params, batch_input) + + def export_key(self, out_filename, secret=False): + params = ['--armor'] + if secret: + params += ['--pinentry-mode', 'loopback', '--export-secret-key'] + params += ['--passphrase', self.password] + else: + params = ['--export'] + + params = self.common_params + \ + params + ['-o', out_filename, self.userid] + return self._run(self.__gpg, params) + + def import_key(self, filename, secret = False): + params = self.common_params + if secret: + params += ['--trust-model', 'always'] + params += ['--batch'] + params += ['--passphrase', self.password] + params += ['--import', filename] + return self._run(self.__gpg, params) + + def sign(self, out, input): + params = self.common_params + params += ['--passphrase', self.password] + params += ['--batch'] + params += ['--pinentry-mode', 'loopback'] + params += ['-u', self.userid] + params += ['-o', out] + params += ['--sign', input] + if self.hash: + params += ['--digest-algo', self.hash] + return self._run(self.__gpg, params) + + def verify(self, input): + params = self.common_params + params += ['--verify', input] + if self.hash: + params += ['--digest-algo', self.hash] + return self._run(self.__gpg, params) + + def encrypt(self, recipient, out, input): + params = self.common_params + params += ['--passphrase', self.password] + params += ['-r', recipient] + params += ['-o', out] + # Blindely trust the key without asking + params += ['--always-trust'] + params += ['--encrypt', input] + return self._run(self.__gpg, params) + + def decrypt(self, out, input): + params = self.common_params + params += ['--passphrase', self.password] + params += ['--pinentry-mode', 'loopback'] + params += ['-o', out] + params += ['--decrypt', input] + return self._run(self.__gpg, params) |