posting
quadrismegistus 4 years ago
parent ac61753e76
commit a9451663d2

@ -117,10 +117,14 @@ class KomradeX(Caller):
qr_str=self.qr_str(pubkey.data_b64)
logfunc(f'(1) You may store your public key both on your device hardware, as well as share it with anyone you wish:\n\n{pubkey.data_b64_s}\n\nIt will also be stored as a QR code on your device:\n{qr_str}',pause=True,clear=True)
logfunc('You must also register your username and public key with Komrade @Operator on the remote server.\n\nShall Komrade @Telephone send them over?',pause=False,clear=False)#),dict_format(data,tab=2),pause=True)
ok_to_send = input(f'Komrade @{name}: [Y/n] ')
ok_to_send = input(f'\n@{name}: [Y/n] ')
if ok_to_send.strip().lower()=='n':
logfunc('Cancelling registration.')
return
else:
print()
logfunc('Connecting you to the @Operator...',komrade_name='Telephone')
time.sleep(1)
## CALL OP WITH PUBKEY
resp_msg_d = self.ring_ring(
@ -140,8 +144,8 @@ class KomradeX(Caller):
# clear_screen()
logfunc('Great. Komrade @Operator knows who you are now, because they have your name and public key on file (and nothing else!).',pause=True,clear=True)
logfunc(f"(2) Your PRIVATE key, on the other hand, will be stored only on your device hardware.",pause=True)
logfunc('''But your private key is so sensitive we'll even encrypt it before storing it.''',pause=True,use_prefix=False)
logfunc(f"(2) Your PRIVATE key, on the other hand, must be stored only on your device hardware.",pause=True)
logfunc('''Your private key is so sensitive we'll even encrypt it before storing it.''',pause=True,use_prefix=False)
@ -153,20 +157,25 @@ class KomradeX(Caller):
while not passphrase:
# logfunc('Please type a password:',use_prefix=False)
logfunc('''Please enter a memorable password to generate a (symmetric AES) encryption key with:''',use_prefix=True)
passphrase=getpass(f'\nKomrade @{self.name}: ')
clear_screen()
passphrase=getpass(f'\n@{self.name}: ')
# clear_screen()
## 4) Get hashed password
passhash = hasher(passphrase)
privkey_decr = KomradeSymmetricKeyWithPassphrase(passhash=passhash)
logfunc(f'''Let's beef up your password by running it through a SHA-256 hashing algorithm:\n\n{make_key_discreet_str(passhash)}''',pause=True,clear=False)
print()
logfunc(f'''Great. Let's even beef up your password by running it through a SHA-256 hashing algorithm, inflating it to:\n\n{make_key_discreet_str(passhash)}''',pause=True,clear=False)
privkey_encr = privkey_decr.encrypt(privkey.data)
privkey_encr_obj = KomradeEncryptedAsymmetricPrivateKey(privkey_encr)
self._keychain['privkey_encr']=privkey_encr_obj
self.log('My keychain now looks like v2:',dict_format(self.keychain()))
logfunc('With this inflated password we can encrypt your super-sensitive private key.',pause=True,clear=True)
logfunc(f"Your original private key looks like this (heavily redacted):\n\n{privkey_encr_obj}",pause=True,clear=False)
logfunc(f"With that password we then encrypt your asymmetric private key:\n\n[Encrypted Private Key]\n({make_key_discreet_str(privkey_encr_obj.data_b64)})",pause=True,clear=False)
logfunc(f"After we encrypt it with your passworded key, it looks like this (redacted):\n\n[Encrypted Private Key]\n({make_key_discreet_str(privkey.data_b64)})",pause=True,clear=False)
logfunc('Only this encrypted version is stored.',pause=True,clear=True)

@ -290,7 +290,7 @@ class TheOperator(Operator):
'pubkey':pubkey_b,
'secret_login':shared_secret,
'name':name,
'status':f'Name @{name} was successfully registered with the public key {uri_id.decode()}.'
'status':f'Name @{name} was successfully registered.\n\nIt has been permanently linked to the following public key:\n\n{uri_id.decode()}.'
}
# res_safe = {
# **res,

@ -42,13 +42,14 @@ class CLI(Logger):
while True:
try:
inp=input(f'Komrade @{self.name if self.name else "?"}: ')
inp=input(f'@{self.name if self.name else "?"}: ')
# self.print(inp,'??')
self.route(inp)
except (KeyboardInterrupt,EOFError) as e:
exit('\n\nKomrade @Operator: Goodbye.\n')
self.stat('Goodbye.')
exit()
except KomradeException as e:
self.print(f'Komrade @Operator: I could not handle your request. {e}\n')
self.stat(f'I could not handle your request. {e}\n')
#await asyncio.sleep(0.5)
def route(self,inp):
@ -66,10 +67,11 @@ class CLI(Logger):
except KomradeException as e:
self.stat('Message not sent.',str(e),'\n')
def stat(self,*msgs,use_prefix=True,prefix=None,komrade_name=None,pause=False,clear=False,min_prefix_len=19,**kwargs):
def stat(self,*msgs,use_prefix=True,prefix=None,komrade_name=None,pause=False,clear=False,min_prefix_len=12,**kwargs):
if not prefix:
if not komrade_name: komrade_name='Operator'
prefix='Komrade @'+komrade_name+': '
if not komrade_name: komrade_name='Telephone'
# prefix='Komrade @'+komrade_name+': '
prefix='@'+komrade_name+': '
blank=' '*(len(prefix) if len(prefix)>min_prefix_len else min_prefix_len)
total_msg=[]
for i,msg in enumerate(msgs):
@ -80,10 +82,11 @@ class CLI(Logger):
total_msg+=['']
ln_wrap=tw.wrap(ln,CLI_WIDTH-len(prefix))
for iii,lnw in enumerate(ln_wrap):
# prfx=prefix + (' '*(len(blank)-len(prefix))) if (not i and not ii and not iii and use_prefix) else blank
prfx=prefix + (' '*(len(blank)-len(prefix))) if (not i and not ii and not iii and use_prefix) else blank
x=prfx+lnw
total_msg+=[x]
total_msg+=['']
# total_msg+=['']
# print()
# print([total_msg])

Loading…
Cancel
Save