posting
quadrismegistus 4 years ago
parent 89e78cac90
commit 7a07babe4c

@ -34,10 +34,11 @@ class KomradeSymmetricKey(KomradeKey):
@property @property
def cell(self): def cell(self):
if not hasattr(self,'_cell'): if not hasattr(self,'_cell'):
if hasattr(self,'passphrase') and self.passphrase: # if hasattr(self,'passphrase') and self.passphrase:
self._cell = SCellSeal(passphrase=hasher(self.passphrase)) # self._cell = SCellSeal(passphrase=hasher(self.passphrase))
elif hasattr(self,'key') and self.key: # elif hasattr(self,'key') and self.key:
self._cell = SCellSeal(key=self.key) # self._cell = SCellSeal(key=self.key)
self._cell = SCellSeal(key=self.key)
return self._cell return self._cell
def encrypt(self,msg,**kwargs): def encrypt(self,msg,**kwargs):
if hasattr(msg,'data'): msg=msg.data if hasattr(msg,'data'): msg=msg.data
@ -70,16 +71,24 @@ class KomradeSymmetricKeyWithPassphrase(KomradeSymmetricKey):
def hash(self,x): return self.crypt_keys.hash(x) def hash(self,x): return self.crypt_keys.hash(x)
def __init__(self,passphrase=DEBUG_DEFAULT_PASSPHRASE, why=WHY_MSG): def __init__(self,passphrase=DEBUG_DEFAULT_PASSPHRASE, why=WHY_MSG):
if not passphrase: # if not passphrase:
# raise KomradeException # # raise KomradeException
self.passphrase=None #getpass(why) # passphrase=getpass(why)
else: # else:
self.passphrase=passphrase # self.passphrase=passphrase
# if passphrase: self.passphrase=passphrase # # if passphrase: self.passphrase=passphrase
pass
@property @property
def data(self): return KEY_TYPE_SYMMETRIC_WITH_PASSPHRASE.encode('utf-8') def data(self): return KEY_TYPE_SYMMETRIC_WITH_PASSPHRASE.encode('utf-8')
def __repr__(self): return f'[Symmetric Key] (generated by password)' def __repr__(self): return f'[Symmetric Key] (generated by password)'
@property
def cell(self):
if not hasattr(self,'_cell'):
from getpass import getpass
self._cell = SCellSeal(passphrase=hasher(getpass(WHY_MSG)))
return self._cell
class KomradeSymmetricKeyWithoutPassphrase(KomradeSymmetricKey): class KomradeSymmetricKeyWithoutPassphrase(KomradeSymmetricKey):
def __init__(self,key=None): def __init__(self,key=None):
@ -238,10 +247,12 @@ class Keymaker(Logger):
self._uri_id=uri_id self._uri_id=uri_id
self._pubkey=None self._pubkey=None
self._keychain=keychain self._keychain=keychain
self.passphrase=passphrase
self.path_crypt_keys=path_crypt_keys self.path_crypt_keys=path_crypt_keys
self.path_crypt_data=path_crypt_data self.path_crypt_data=path_crypt_data
# boot keychain
self._keychain = self.keychain(passphrase=passphrase)
def find_pubkey(self,name=None): def find_pubkey(self,name=None):
if not name: name=self.name if not name: name=self.name
@ -614,7 +625,8 @@ Keymaker ({self}) is forging new keys for {name}
# self.log(encr_key_name,decr_key_name,unencr_key_name) # self.log(encr_key_name,decr_key_name,unencr_key_name)
if decrypt and unencr_key_name in keychain: continue if decrypt and unencr_key_name in keychain: continue
if not decr_key_name in keychain: if not decr_key_name in keychain:
keychain[decr_key_name] = KomradeSymmetricKeyWithPassphrase(passphrase=passphrase if passphrase else self.passphrase) # self.log('looking for decr key name:',decr_key_name,keychain)
keychain[decr_key_name] = KomradeSymmetricKeyWithPassphrase(passphrase=passphrase)
else: else:
continue continue
decr_key = keychain.get(decr_key_name) decr_key = keychain.get(decr_key_name)

@ -7,24 +7,23 @@ class Komrade(Caller):
def __init__(self, name=None, passphrase=DEBUG_DEFAULT_PASSPHRASE): def __init__(self, name=None, passphrase=DEBUG_DEFAULT_PASSPHRASE):
super().__init__(name=name,passphrase=passphrase) super().__init__(name=name,passphrase=passphrase)
self.passphrase=passphprase if passphrase else None
if SHOW_STATUS: if SHOW_STATUS:
from komrade.cli import CLI from komrade.cli import CLI
self.cli = CLI(name=name, persona=self) self.cli = CLI(name=name, komrade=self)
# self.boot(create=False) self.boot(create=False)
# def boot(self,create=False): def boot(self,create=False):
# # Do I already have my keys? # Do I already have my keys?
# # yes? -- login # yes? -- login
# keys = self.keychain() keys = self.keychain()
# if keys.get('pubkey') and keys.get('privkey'): if keys.get('pubkey') and keys.get('privkey'):
# self.log('booted!') self.log('booted!')
# return True return True
# # If not, forge them -- only once! # If not, forge them -- only once!
# if not have_keys and create: if not have_keys and create:
# self.get_new_keys() self.get_new_keys()
def exists_locally_as_contact(self): def exists_locally_as_contact(self):
@ -82,7 +81,6 @@ class Komrade(Caller):
while not passphrase: while not passphrase:
passphrase=getpass(f'@Keymaker: Enter a memorable password to encrypt your private key with: \n\n@{self.name}: ') passphrase=getpass(f'@Keymaker: Enter a memorable password to encrypt your private key with: \n\n@{self.name}: ')
clear_screen() clear_screen()
self.passphrase=passphrase
## 4) Get hashed password ## 4) Get hashed password
passhash = hasher(passphrase) passhash = hasher(passphrase)
self.log(f'''@Keymaker: I have replaced your password with a disguised, hashed version\nusing a salted SHA-256 algorithm from python's hashlib:\n\n\t{make_key_discreet_str(passhash)}''') self.log(f'''@Keymaker: I have replaced your password with a disguised, hashed version\nusing a salted SHA-256 algorithm from python's hashlib:\n\n\t{make_key_discreet_str(passhash)}''')
@ -191,7 +189,6 @@ class Komrade(Caller):
return return
# check password # check password
if not passphrase: passphrase=self.passphrase
# while not passphrase: # while not passphrase:
# from getpass import getpass # from getpass import getpass
# passphrase = getpass('@Keymaker: Enter password for {self} in order to decrypt the encrypted private key:\n\n') # passphrase = getpass('@Keymaker: Enter password for {self} in order to decrypt the encrypted private key:\n\n')

@ -27,7 +27,6 @@ class TheOperator(Operator):
""" """
Boot up the operator. Requires knowing or setting a password of memory. Boot up the operator. Requires knowing or setting a password of memory.
""" """
self.passphrase=passphrase
super().__init__( super().__init__(
name, name,
passphrase, passphrase,

@ -19,13 +19,13 @@ class CLI(Logger):
} }
def __init__(self,name='',cmd='',persona=None): def __init__(self,name='',cmd='',persona=None):
self._name=name self.name=name
self.cmd=cmd self.cmd=cmd
self._komrade=None self.komrade=None
self._loggedin=False self.loggedin=False
def run(self,inp='',name=''): def run(self,inp='',name=''):
# if name: self._name=name # if name: self.name=name
# clear_screen() # clear_screen()
# self.boot() # self.boot()
self.help() self.help()
@ -70,52 +70,39 @@ class CLI(Logger):
def register(self,name=None): def register(self,name=None):
if not name: name=input('name: ') if not name: name=input('name: ')
if not name: return if not name: return
self._komrade = Komrade(name) self.komrade = Komrade(name)
res=self._komrade.register() res=self.komrade.register()
if res and type(res)==dict and 'success' in res and res['success']: if res and type(res)==dict and 'success' in res and res['success']:
self._name=self._komrade.name self.name=self.komrade.name
self._loggedin=True self.loggedin=True
else: else:
self._name=None self.name=None
self._loggedin=False self.loggedin=False
self._komrade=None self.komrade=None
if 'status' in res: if 'status' in res:
print('@Operator: '+res.get('status','?')) print('@Operator: '+res.get('status','?'))
def login(self,name): def login(self,name):
print(self,name,self.name,self.komrade,self.loggedin)
if not name: name=input('name: ') if not name: name=input('name: ')
if not name: return if not name: return
self._komrade=Komrade(name) self.komrade=Komrade(name)
res = self._komrade.login() res = self.komrade.login()
if res and type(res)==dict and 'success' in res and res['success']: if res and type(res)==dict and 'success' in res and res['success']:
self._name=self._komrade.name self.name=self.komrade.name
self._loggedin=True self.loggedin=True
else: else:
self._name=None self.name=None
self._loggedin=False self.loggedin=False
self._komrade=None self.komrade=None
if 'status' in res: if 'status' in res:
print('@Operator: '+res.get('status','?')+'\n') print('@Operator: '+res.get('status','?')+'\n')
@property
def komrade(self):
if not hasattr(self,'_komrade'):
self._komrade = Komrade(self._name)
return self._komrade
@property
def name(self):
if not hasattr(self,'_name'):
if hasattr(self,'_komrade'):
self._name=self._komrade.name
else:
return None
return self._name
@property @property
def logged_in(self): def logged_in(self):
return (self._loggedin and self._komrade and self._name) return (self.loggedin and self.komrade and self.name)
def meet(self,name): def meet(self,name):
if not self.logged_in: if not self.logged_in:
@ -176,11 +163,11 @@ class CLI(Logger):
None,{ART_OLDPHONE4},f'''@{name}: Hm, ok. Well, could you patch me through to the remote operator then?''', None,{ART_OLDPHONE4},f'''@{name}: Hm, ok. Well, could you patch me through to the remote operator then?''',
f'''@{TELEPHONE_NAME}: I could, but it's not safe yet. Your information could be exposed. You need to cut your encryption keys first.''', f'''@{TELEPHONEname}: I could, but it's not safe yet. Your information could be exposed. You need to cut your encryption keys first.''',
f'@{name}: Fine, but how do I do that?', f'@{name}: Fine, but how do I do that?',
f'@{TELEPHONE_NAME}: Visit the Keymaker.', f'@{TELEPHONEname}: Visit the Keymaker.',
clear=False,pause=True) clear=False,pause=True)

Loading…
Cancel
Save