1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
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
|