posting
quadrismegistus 4 years ago
parent a7d304c55e
commit cc9750afea

@ -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])

@ -12,8 +12,8 @@ from komrade.backend.keymaker import *
class KomradeX(Caller):
def __init__(self, name=None, pubkey=None, passphrase=DEBUG_DEFAULT_PASSPHRASE):
super().__init__(name=name,passphrase=passphrase)
def __init__(self, name=None, pubkey=None):
super().__init__(name=name)
# self.log(f'booted komrade with {name} and {passphrase} and\n\n{dict_format(self.keychain())}')
# if SHOW_STATUS:
# from komrade.cli import CLI
@ -184,9 +184,14 @@ class KomradeX(Caller):
self.log(f'''Now saving name and public key on local device:''')
self.crypt_keys.set(name, pubkey_b, prefix='/pubkey/')
self.crypt_keys.set(uri_id, name, prefix='/name/')
self.crypt_keys.set(uri_id, privkey_encr_obj.data, prefix='/privkey_encr/')
self.crypt_keys.set(uri_id,sec_login,prefix='/secret_login/')
# store privkey pieces
self.crypt_keys.set(uri_id, privkey_encr_obj.data, prefix='/privkey_encr/')
# just to show we used a passphrase -->
self.crypt_keys.set(uri_id, KomradeSymmetricKeyWithPassphrase.__name__, prefix='/privkey_decr/')
# save qr too:
self.save_uri_as_qrcode(uri_id)
# self.log(f'saved public key as QR code to:\n {fnfn}\n\n{qr_str}')
@ -331,8 +336,9 @@ def test_msg():
def test_loading():
# z1 = Komrade('zuck')
# print(z1.keychain())
z1 = Komrade('zuck')
print(z1.keychain())
exit()
z2 = Komrade(b'VUVDMgAAAC08BCMVA+0dMJXc66/W7hty669+3/3S61Q1yjmgJW8I0k3lqfDi')
print(z2)

@ -103,7 +103,7 @@ class Message(Logger):
self.log(f'Attempting to decrypt:\n{self}')
# decrypt msg
self.log('attempting to decrypt',self.msg,'from',self.from_pubkey,'to',self.to_pubkey, self.to_whom,dict_format(self.to_whom.keychain()),self.to_whom.assemble(self.to_whom.keychain()))
# self.log('attempting to decrypt',self.msg,'from',self.from_pubkey,'to',self.to_pubkey, self.to_whom,dict_format(self.to_whom.keychain()),self.to_whom.assemble(self.to_whom.keychain()))
if not self.to_whom.privkey:
self.log(f'{self.to_whom} cannot decrypt this message! {dict_format(self.to_whom.keychain())}!\n\n{self.to_whom.name} {self.to_whom.pubkey} {self.to_name} {self.to_pubkey} {self.to_whom.keychain()}')
return

@ -293,9 +293,6 @@ class TheOperator(Operator):
def test_op():
from komrade.backend.the_telephone import TheTelephone

Loading…
Cancel
Save