@ -70,16 +70,26 @@ from getpass import getpass
class KomradeSymmetricKeyWithPassphrase ( KomradeSymmetricKey ) :
def hash ( self , x ) : return self . crypt_keys . hash ( x )
def __init__ ( self , passphrase = DEBUG_DEFAULT_PASSPHRASE , why = WHY_MSG ) :
if not passphrase :
# raise KomradeException
self . passhash = hasher ( getpass ( why ) )
@property
def passhash ( self ) :
if not self . _passhash :
self . _passhash = getpass ( WHY_MSG )
return self . _passhash
def __init__ ( self , passphrase = None , passhash = None ) :
if passhash :
self . _passhash = passhash
elif passphrase :
self . _passhash = hasher ( passphrase )
else :
self . passhash = hasher ( passphrase )
self . _passhash = None
@property
def data ( self ) : return KEY_TYPE_SYMMETRIC_WITH_PASSPHRASE . encode ( ' utf-8 ' )
def __repr__ ( self ) : return f ' [Symmetric Key] (generated by password) '
@property
def cell ( self ) :
if not hasattr ( self , ' _cell ' ) :
@ -220,7 +230,14 @@ KEYMAKER_DEFAULT_KEY_TYPES = {
def get_key_obj ( keyname , data , passphrase = None , key_types = KEYMAKER_DEFAULT_KEY_TYPES ) :
def get_key_obj ( keyname , data , key_types = KEYMAKER_DEFAULT_KEY_TYPES ) :
try :
data_s = data . decode ( )
if data_s == KomradeSymmetricKeyWithPassphrase . __name__ :
return KomradeSymmetricKeyWithPassphrase ( )
except UnicodeDecodeError :
pass
return key_types [ keyname ] ( data )
@ -234,7 +251,6 @@ def get_key_obj(keyname,data,passphrase=None,key_types=KEYMAKER_DEFAULT_KEY_TYPE
class Keymaker ( Logger ) :
def __init__ ( self ,
name = None ,
passphrase = DEBUG_DEFAULT_PASSPHRASE ,
uri_id = None ,
keychain = { } ,
path_crypt_keys = PATH_CRYPT_CA_KEYS ,
@ -249,7 +265,7 @@ class Keymaker(Logger):
self . path_crypt_data = path_crypt_data
# boot keychain
self . _keychain = self . keychain ( passphrase = passphrase )
self . _keychain = self . keychain ( )
def find_pubkey ( self , name = None ) :
@ -320,7 +336,7 @@ class Keymaker(Logger):
return ( name , pubkey )
def keychain ( self , look_for = KEYMAKER_DEFAULT_ALL_KEY_NAMES ,passphrase = None ):
def keychain ( self , look_for = KEYMAKER_DEFAULT_ALL_KEY_NAMES ):
# load existing keychain
keys = self . _keychain
@ -328,8 +344,10 @@ class Keymaker(Logger):
# name,pubkey = self.find_pubkey_and_name()
# get uri
keys[ ' pubkey ' ] = pubkey = self . find_pubkey ( )
pubkey = self . find_pubkey ( )
if pubkey :
keys [ ' pubkey ' ] = pubkey
uri = pubkey . data_b64
#uri = b64encode(pubkey) if type(pubkey)==bytes else b64encode(pubkey.encode())
# get from cache
@ -341,7 +359,7 @@ class Keymaker(Logger):
if key : keys [ keyname ] = get_key_obj ( keyname , key )
# try to assemble
keys = self . assemble ( self . assemble ( keys ,passphrase = passphrase ), passphrase = passphrase )
keys = self . assemble ( self . assemble ( keys ))
#store to existing set
self . _keychain = { * * keys }
@ -615,9 +633,8 @@ Keymaker ({self}) is forging new keys for {name}
# self.log(encr_key_name,decr_key_name,unencr_key_name)
if decrypt and unencr_key_name in keychain : continue
if not decr_key_name in keychain :
# self.log('looking for decr key name:',decr_key_name,keychain)
keychain [ decr_key_name ] = KomradeSymmetricKeyWithPassphrase ( passphrase = passphrase )
else :
self . log ( ' ! not in keychain: decr key name: ' , decr_key_name , keychain )
#keychain[decr_key_name] = KomradeSymmetricKeyWithPassphrase(passphrase=passphrase)
continue
decr_key = keychain . get ( decr_key_name )
# self.log('?',decr_key,decr_key_name,encr_key_name,keychain[encr_key_name])