tundertaker.py - tomb - the crypto undertaker
HTML git clone git://parazyd.org/tomb.git
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
tundertaker.py (2289B)
---
1 import subprocess
2 from tempfile import NamedTemporaryFile
3
4 import parser
5
6 class Undertaker(object):
7 '''
8 This is similar to Tomb class, and provides a wrapper on undertaker.
9
10 TODO:
11 * methods for automagical scan
12 * output parsing, giving meaningful output
13
14 Due to the non-interactive nature of undertaker, it's simpler than Tomb
15 '''
16 undertakerexec = 'undertaker'
17 @classmethod
18 def check(cls, paths):
19 '''Will check if there are keys available there, as in --path
20
21 paths can be a string (one address), or a list of
22 '''
23 #TODO: more solid check: something like
24 if type(paths) is not str:
25 out = []
26 for p in paths:
27 try:
28 res = cls.check(p)
29 except:
30 continue
31 else:
32 if res:
33 out.extend(res)
34 return out
35
36 buf = NamedTemporaryFile()
37 try:
38 subprocess.check_call([cls.undertakerexec, paths, '--batch',
39 '--path'], stderr=buf)
40 except subprocess.CalledProcessError as exc:
41 return False
42
43 out = []
44 buf.seek(0)
45 for line in buf:
46 ret = parser.parse_line(line)
47 if ret and ret['type'] == 'found':
48 out.append(ret['content'])
49 return out
50
51
52 @classmethod
53 def get(cls, paths):
54 '''
55 Similar to check, but truly get the key content.
56 If paths is iterable, stop at the first successful path
57 '''
58 if type(paths) is not str:
59 for p in paths:
60 try:
61 res = cls.get(p)
62 except:
63 continue
64 else:
65 if res:
66 return res
67 buf = NamedTemporaryFile()
68 try:
69 subprocess.check_call([cls.undertakerexec, paths, '--batch'],
70 stdout=buf)
71 except subprocess.CalledProcessError:
72 return False
73 buf.seek(0)
74 return buf.read()
75
76
77 if __name__ == '__main__':
78 Undertaker.undertakerexec = '/home/davide/coding/projects/tomb/src/undertaker'
79 print Undertaker.get('near:///home/davide/Desktop/testing.tomb')