summaryrefslogtreecommitdiffstats
path: root/src/tests/gnupg.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/gnupg.py')
-rw-r--r--src/tests/gnupg.py121
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)