From a8f8c850e686c9e0c902fa5d3fa36cab0c517514 Mon Sep 17 00:00:00 2001 From: quadrismegistus Date: Mon, 7 Sep 2020 09:13:08 +0100 Subject: [PATCH] finally! abolishing private key property --- komrade/backend/callers.py | 19 +++++++-- komrade/backend/keymaker.py | 77 +++++++++++++++++++++++++++++++------ 2 files changed, 82 insertions(+), 14 deletions(-) diff --git a/komrade/backend/callers.py b/komrade/backend/callers.py index 53131fe..8385bc8 100644 --- a/komrade/backend/callers.py +++ b/komrade/backend/callers.py @@ -45,6 +45,19 @@ class Caller(Operator): 'privkey_decr_encr', 'privkey_decr_decr', 'adminkey_decr_encr', 'adminkey_decr_decr'] - return self.phone.req(json_coming_from_phone = req_json, caller=self) - # return await self.phone.req(json_coming_from_phone = req_json, caller=self) - \ No newline at end of file + returned_keys = self.phone.req(json_coming_from_phone = req_json, caller=self) + self.log('got returnd keys from Op:',returned_keys) + + # better have the right keys + assert set(req_json['keys_to_return']) == set(returned_keys.keys()) + + # now save these keys! + saved_keys = self.save_keychain(returned_keys) + self.log('saved keys!',saved_keys) + + # better have the right keys + assert set(req_json['keys_to_return']) == set(saved_keys.keys()) + + # success! + self.log('yay!!!!') + return saved_keys diff --git a/komrade/backend/keymaker.py b/komrade/backend/keymaker.py index f087b4b..e6fc4a0 100644 --- a/komrade/backend/keymaker.py +++ b/komrade/backend/keymaker.py @@ -391,11 +391,34 @@ class Keymaker(Logger): key_types = dict([(k,key_types[k]) for k in keys_to_gen]) self.log('key_types =',key_types) + # get decryptor keys! keychain = self.gen_keys_from_types(key_types,passphrase=passphrase) self.log('keychain 1 =',keychain) + + # gen encrypted keys! keychain = self.gen_encr_keys(keychain,keys_to_gen,passphrase=passphrase) self.log('keychain 2 =',keychain) + # save keys! + keys_saved = self.save_keychain(keychain,keys_to_save) + self.log('keys_saved =',keys_saved) + + # return keys! + keys_returned = self.return_keychain(keychain,keys_to_return) + return keys_returned + + + def return_keychain(self,keychain,keys_to_return) + keychain_toreturn = {} + for key in keys_to_return: + if key in keychain: + keychain_toreturn[key]=keychain[key] + return keychain_toreturn + + + def save_keychain(self,keychain,keys_to_save): + + keys_saved = [] # filter for transfer for k,v in keychain.items(): @@ -410,66 +433,98 @@ class Keymaker(Logger): raise KomradeException('there is no private property in a socialist network! all keys must be split between komrades') else: if 'pubkey' in keys_to_save and 'pubkey' in keychain: + keys_saved+=['pubkey'] self.crypt_keys.set(name,keychain['pubkey'],prefix='/pubkey/') + if 'privkey' in keys_to_save and 'privkey' in keychain: + keys_saved+=['privkey'] self.crypt_keys.set(keychain['pubkey'],keychain['privkey'],prefix='/privkey/') + if 'adminkey' in keys_to_save and 'adminkey' in keychain: + keys_saved+=['adminkey'] self.crypt_keys.set(keychain['privkey'],keychain['adminkey'],prefix='/adminkey/') ### SAVE ENCRYPTED KEYS? if 'pubkey_encr' in keys_to_save and 'pubkey_encr' in keychain: + keys_saved+=['pubkey_encr'] self.crypt_keys.set(name,keychain['pubkey_encr'],prefix='/pubkey_encr/') + if 'privkey_encr' in keys_to_save and 'privkey_encr' in keychain: + keys_saved+=['privkey_encr'] self.crypt_keys.set(keychain['pubkey'],keychain['privkey_encr'],prefix='/privkey_encr/') + if 'adminkey_encr' in keys_to_save and 'adminkey_encr' in keychain: + keys_saved+=['adminkey_encr'] self.crypt_keys.set(keychain['privkey'],keychain['adminkey_encr'],prefix='/adminkey_encr/') # stop # save decrypted keys? if 'pubkey_decr' in keys_to_save and 'pubkey_decr' in keychain: + keys_saved+=['pubkey_decr'] self.crypt_keys.set(name,keychain['pubkey_decr'],prefix='/pubkey_decr/') + if 'privkey_decr' in keys_to_save and 'privkey_decr' in keychain: + keys_saved+=['privkey_decr'] self.crypt_keys.set(keychain['pubkey'],keychain['privkey_decr'],prefix='/privkey_decr/') + if 'adminkey_decr' in keys_to_save and 'adminkey_decr' in keychain: + keys_saved+=['adminkey_decr'] self.crypt_keys.set(keychain['privkey'],keychain['adminkey_decr'],prefix='/adminkey_decr/') - - - + if 'pubkey_encr_encr' in keys_to_save and 'pubkey_encr_encr' in keychain: + keys_saved+=['pubkey_encr_encr'] self.crypt_keys.set(name,keychain['pubkey_decr_encr'],prefix='/pubkey_decr_encr/') + if 'privkey_encr_encr' in keys_to_save and 'privkey_encr_encr' in keychain: + keys_saved+=['privkey_encr_encr'] self.crypt_keys.set(keychain['pubkey_decr'],keychain['privkey_decr_encr'],prefix='/privkey_decr_encr/') + if 'adminkey_encr_encr' in keys_to_save and 'adminkey_encr_encr' in keychain: + keys_saved+=['adminkey_encr_encr'] self.crypt_keys.set(keychain['privkey_decr'],keychain['adminkey_decr_encr'],prefix='/adminkey_decr_encr/') + if 'pubkey_decr_encr' in keys_to_save and 'pubkey_decr_encr' in keychain: + keys_saved+=['pubkey_decr_encr'] self.crypt_keys.set(name,keychain['pubkey_decr_encr'],prefix='/pubkey_decr_encr/') + if 'privkey_decr_encr' in keys_to_save and 'privkey_decr_encr' in keychain: + keys_saved+=['privkey_decr_encr'] self.crypt_keys.set(keychain['pubkey_decr'],keychain['privkey_decr_encr'],prefix='/privkey_decr_encr/') + if 'adminkey_decr_encr' in keys_to_save and 'adminkey_decr_encr' in keychain: + keys_saved+=['adminkey_decr_encr']v self.crypt_keys.set(keychain['privkey_decr'],keychain['adminkey_decr_encr'],prefix='/adminkey_decr_encr/') if 'pubkey_decr_decr' in keys_to_save and 'pubkey_decr_decr' in keychain: + keys_saved+=['pubkey_decr_decr'] self.crypt_keys.set(name,keychain['pubkey_decr_decr'],prefix='/pubkey_decr_decr/') + if 'privkey_decr_decr' in keys_to_save and 'privkey_decr_decr' in keychain: + keys_saved+=['privkey_encr_encr'] self.crypt_keys.set(keychain['pubkey_decr'],keychain['privkey_decr_decr'],prefix='/privkey_decr_decr/') + if 'adminkey_decr_decr' in keys_to_save and 'adminkey_decr_decr' in keychain: + keys_saved+=['adminkey_decr_decr'] self.crypt_keys.set(keychain['privkey_decr'],keychain['adminkey_decr_decr'],prefix='/adminkey_decr_decr/') + if 'pubkey_decr_decr' in keys_to_save and 'pubkey_decr_decr' in keychain: + keys_saved+=['pubkey_decr_decr'] self.crypt_keys.set(name,keychain['pubkey_decr_decr'],prefix='/pubkey_decr_decr/') + if 'privkey_decr_decr' in keys_to_save and 'privkey_decr_decr' in keychain: + keys_saved+=['privkey_encr_encr'] self.crypt_keys.set(keychain['pubkey_decr'],keychain['privkey_decr_decr'],prefix='/privkey_decr_decr/') + if 'adminkey_decr_decr' in keys_to_save and 'adminkey_decr_decr' in keychain: + keys_saved+=['adminkey_decr_decr'] self.crypt_keys.set(keychain['privkey_decr'],keychain['adminkey_decr_decr'],prefix='/adminkey_decr_decr/') - - - keychain_toreturn = {} - for key in keys_to_return: - if key in keychain: - keychain_toreturn[key]=keychain[key] - - return keychain_toreturn + # return in dict form + keys_saved_d = {} + for key_saved in keys_saved: + keys_saved_d[key_saved] = keychain[key_saved] + return key_saved_d def valid_keychain(self,keychain_b64_d):