posting
quadrismegistus 4 years ago
parent 41fb1ea497
commit 561482413b

@ -145,6 +145,13 @@ class Crypt(Logger):
)
)
def delete(self,k,prefix=''):
k_b=self.package_key(k,prefix=prefix)
k_b_hash = self.hash(k_b)
r=self.store.delete(k_b_hash)
return r
def get(self,k,prefix=''):
k_b=self.package_key(k,prefix=prefix)
k_b_hash = self.hash(k_b)

@ -42,12 +42,14 @@ class Komrade(Caller):
return self.register()
def exists_locally(self):
return bool(self.pubkey)
def exists_locally_as_contact(self):
return self.pubkey and not self.privkey
return bool(self.pubkey) and not bool(self.privkey)
def exists_locally_as_account(self):
return self.pubkey and self.privkey_encr
return bool(self.pubkey) and bool(self.privkey_encr)
def exists_on_server(self):
answer = self.phone.ring_ring({
@ -69,6 +71,16 @@ class Komrade(Caller):
if not name and self.name: name=self.name
# if not name and not self.name: name=''
# print('got name',name)
# already have it?
if self.exists_locally_as_account():
self.log('You have already created this account.')
return
if self.exists_locally_as_contact():
self.log('This is already a contact of yours')
return
## 1) Have name?
tolog=''
@ -121,9 +133,13 @@ class Komrade(Caller):
self.log('My keychain now looks like:',dict_format(self.keychain()))
## 6) More narration?
if SHOW_STATUS:
self.cli.status_keymaker_part3(privkey,privkey_decr,privkey_encr,passphrase)
# More narration?
if SHOW_STATUS: self.cli.status_keymaker_part3(privkey,privkey_decr,privkey_encr,passphrase)
# 6) Save for now on client -- will delete if fails on server
self.crypt_keys.set(name, pubkey.data, prefix='/pubkey/')
self.crypt_keys.set(pubkey.data_b64, name, prefix='/name/')
self.crypt_keys.set(pubkey.data_b64, privkey_encr_obj.data, prefix='/privkey_encr/')
## 7) Save data to server
data = {
@ -145,6 +161,10 @@ class Komrade(Caller):
)
if not resp_msg_d.get('success'):
self.log(f'Registration failed. Message from operator was:\n\n{dict_format(resp_msg_d)}')
self.crypt_keys.delete(name,prefix='/pubkey/')
self.crypt_keys.delete(pubkey.data_b64,prefix='/name/')
self.crypt_keys.delete(pubkey.data_b64,prefix='/privkey_encr/')
return
# otherwise, save things on our end
@ -152,36 +172,19 @@ class Komrade(Caller):
self.name=resp_msg_d.get('name')
pubkey_b = resp_msg_d.get('pubkey')
assert pubkey_b == pubkey.data
sec_login = resp_msg_d.get('secret_login')
pubkey=self._keychain['pubkey']=KomradeAsymmetricPublicKey(pubkey_b)
uri_id = b64enc(pubkey_b)
self.crypt_keys.set(
self.name,
pubkey_b,
prefix='/pubkey/')
self.crypt_keys.set(
uri_id,
self.name,
prefix='/name/')
self.crypt_keys.set(
uri_id,
sec_login,
prefix='/secret_login/'
)
self.crypt_keys.set(
uri_id,
privkey_encr_obj.data,
prefix='/privkey_encr/'
)
self.log(f'''Now saving name and public key on local device:''')
self.crypt_keys.set(uri_id,sec_login,prefix='/secret_login/')
# save qr too:
uri_id = b64enc(pubkey_b)
qr_str=self.qr_str(uri_id)
fnfn=self.save_uri_as_qrcode(uri_id)
self.save_uri_as_qrcode(uri_id)
# self.log(f'saved public key as QR code to:\n {fnfn}\n\n{qr_str}')
return resp_msg_d

Loading…
Cancel
Save