Revision control

Copy as Markdown

Other Tools

from cli_common import (
pswd_pipe,
run_proc
)
import os
import copy
class Rnp(object):
def __init__(self, homedir, rnp_path, rnpkey_path):
self.__gpg = rnp_path
self.__key_mgm_bin = rnpkey_path
self.__common_params = ['--homedir', homedir]
self.__password = None
self.__userid = None
self.__hash = None
@property
def key_mgm_bin(self):
return self.__key_mgm_bin
@property
def rnp_bin(self):
return self.__gpg
@property
def common_params(self):
return copy.copy(self.__common_params)
@property
def password(self):
return self.__password
@password.setter
def password(self, val):
self.__password = val
@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
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-keys', '--secret'] if secret else ['--list-keys']
params = params + self.common_params
return self._run(self.key_mgm_bin, params)
def generate_key_batch(self, batch_input):
pipe = pswd_pipe(self.__password)
params = self.common_params
params += ['--generate-key', '--expert']
params += ['--pass-fd', str(pipe)]
params += ['--userid', self.userid]
if self.hash:
params += ['--hash', self.hash]
try:
ret = self._run(self.__key_mgm_bin, params, batch_input)
finally:
os.close(pipe)
return ret
def export_key(self, output, secure = False):
params = self.common_params
params += ["--output", output]
params += ["--userid", self.userid]
params += ["--overwrite"]
params += ["--export-key"]
if secure:
params += ["--secret"]
params += [self.userid]
return self._run(self.key_mgm_bin, params)
def import_key(self, filename, secure = False):
params = self.common_params
params += ['--import-key', filename]
return self._run(self.key_mgm_bin, params)
def sign(self, output, input):
pipe = pswd_pipe(self.password)
params = self.common_params
params += ['--pass-fd', str(pipe)]
params += ['--userid', self.userid]
params += ['--sign', input]
params += ['--output', output]
if self.hash:
params += ['--hash', self.hash]
try:
ret = self._run(self.rnp_bin, params)
finally:
os.close(pipe)
return ret
def verify(self, input):
params = self.common_params
params += ['--verify', input]
if self.hash:
params += ['--hash', self.hash]
return self._run(self.rnp_bin, params)
def encrypt(self, recipient, output, input):
pipe = pswd_pipe(self.password)
params = self.common_params
params += ['--pass-fd', str(pipe)]
params += ['--recipient', recipient]
params += ['--encrypt', input]
params += ['--output', output]
try:
ret = self._run(self.rnp_bin, params)
finally:
os.close(pipe)
return ret
def decrypt(self, output, input):
pipe = pswd_pipe(self.password)
params = self.common_params
params += ['--pass-fd', str(pipe)]
params += ['--userid', self.userid]
params += ['--decrypt', input]
params += ['--output', output]
try:
ret = self._run(self.rnp_bin, params)
finally:
os.close(pipe)
return ret