URI: 
       ttomb.py - tomb - the crypto undertaker
  HTML git clone git://parazyd.org/tomb.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       ttomb.py (3027B)
       ---
            1 '''
            2 Module structure:
            3 
            4 this contain a class, which is indeed just a collection of functions
            5 (the methods are all static).
            6 It's meant to behave in a way which is similar to the command line, for
            7     
            8 Notes: consider moving to a more typical usage (instantiate, then use method)
            9 to make it more configurable (ie set the tomb executable path).
           10 '''
           11 
           12 import subprocess
           13 
           14 class Tomb(object):
           15     '''
           16     This is just a collection of static methods, so you should NOT instantiate
           17 
           18     The methods are meant to resemble the command line interface as much as
           19     possible
           20 
           21     There is no support to things like threading, multiprocessing, whatever.
           22     If you want to interact asynchronously with tomb, just do it in a separate
           23     layer.
           24     '''
           25     tombexec = 'tomb'
           26     def _check_exec_path(self):
           27         '''Checks, using which, if tomb is available.
           28         Returns None on error, the path on success.
           29         '''
           30         try:
           31             path = subprocess.check_output(['which', 'tomb'])
           32         except subprocess.CalledProcessError:
           33             return None
           34         return path
           35 
           36     @classmethod
           37     def check(cls, command, stdout=None, stderr=None, no_color=True, ignore_swap=False):
           38         args = [command]
           39         if no_color:
           40             args += ['--no-color']
           41         if ignore_swap:
           42             args += ['--ignore-swap']
           43         try:
           44             subprocess.check_call([cls.tombexec, 'check'] + args, stdout=stdout, stderr=stderr)
           45         except subprocess.CalledProcessError:
           46             return False
           47         return True
           48 
           49     @classmethod
           50     def create(cls, tombpath, tombsize,keypath, stdout=None, stderr=None,
           51             no_color=True, ignore_swap=False):
           52         '''If keypath is None, it will be created adjacent to the tomb.
           53         This is unsafe, and you should NOT do it.
           54 
           55         Note that this will invoke pinentry
           56 
           57         no_color is supported as an option for short-lived retrocompatibility:
           58             it will be removed as soon as no-color will be integrated
           59         '''
           60         args = [tombpath, '-s', tombsize]
           61         if keypath is not None:
           62             args += ['-k', keypath]
           63         if no_color:
           64             args += ['--no-color']
           65         if ignore_swap:
           66             args += ['--ignore-swap']
           67         try:
           68             subprocess.check_call([cls.tombexec, 'create'] + args, stdout=stdout, stderr=stderr)
           69         except subprocess.CalledProcessError:
           70             return False
           71         return True
           72 
           73     @classmethod
           74     def open(cls, tombpath,keypath=None, no_color=True, ignore_swap=False):
           75         args = [tombpath]
           76         if keypath is not None:
           77             args += ['-k', keypath]
           78         if no_color:
           79             args += ['--no-color']
           80         if ignore_swap:
           81             args += ['--ignore-swap']
           82         try:
           83             subprocess.check_call([cls.tombexec, 'open'] + args)
           84         except subprocess.CalledProcessError:
           85             return False
           86         return True
           87 
           88 
           89 if __name__ == '__main__':
           90     #Debug stuff. Also useful for an example
           91     print Tomb.create('/tmp/a.tomb', '10', '/tmp/akey')