From f9fe64756fd30fcf1f4c6ea38063d9fd230b710b Mon Sep 17 00:00:00 2001 From: quadrismegistus Date: Sun, 6 Sep 2020 22:01:29 +0100 Subject: [PATCH] updates --- komrade/.builtin.keychains.decr | 2 +- komrade/.builtin.keychains.encr | 2 +- komrade/backend/the_operator.py | 17 ++++++++--------- komrade/backend/the_telephone.py | 26 +++++++++++++++++++++----- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/komrade/.builtin.keychains.decr b/komrade/.builtin.keychains.decr index c932d17..00d3338 100644 --- a/komrade/.builtin.keychains.decr +++ b/komrade/.builtin.keychains.decr @@ -1 +1 @@ -YmQl1qIbofUAhGVMb/ovPUfKk+2D/LBTjRFrCzWnWXk= \ No newline at end of file +L+fFyO4LR+YEmyGkRINOLzRg5W0uEecL8G90pSf9GXE= \ No newline at end of file diff --git a/komrade/.builtin.keychains.encr b/komrade/.builtin.keychains.encr index 03852b0..5e78123 100644 --- a/komrade/.builtin.keychains.encr +++ b/komrade/.builtin.keychains.encr @@ -1 +1 @@ -AAEBQAwAAAAQAAAA/gAAAKFe9zkxO/spMhB8MUoifbj2ydsbi4I5XKMcm3IcB+Ttuyh3fsUsPO5oAhKVaAExBkHEVMlAbTc/bEDH9vM+bo/i5ZXmgDYeO6CNhXYIOZpQR2uiKz7eYXlLI6KDFND90VI59L4748hGEgEsdbrOIJj07LQopBYo67ewgb59+kqLgcobNXH9IXAaQ4bxB60ooRs9lUn4MxBbHnyzfkgk1AkQr5VvHge/ztZlH3JdXnJNW84d8Kk1LtJECVUW5BDRqKk2v1NzU5NY8j7o/4VGJPQYrx/LpZcta3/kpifvau7giOmvVblwt5xVXElyoLKkGEBzQjCWKIIT8ykKpUgva31q7xrD8i7Xvza9t0RXBG8PuQLXKPMltRlPsw== \ No newline at end of file +AAEBQAwAAAAQAAAA/QAAANOXXbjLE5hD3dkpZsBvtL43fxD+Ex08eoZL2aiRzFFIT1tW/30oxLISlGyadLJ0qJkiqv6JP9U/8UJJR2/YSKtkqcHneZfUqZ11+gU6oQe9TQkP3kpLkMN+sXOHOK56qN0/RAJnVUhdjsRvIAnXR6wisU51RXnW4FLOfLO9nRbV56WE76wWMfzM1ZkeV8Rgjq3cNvuc6KLLokMo8zc9buo2dn38Q3YpD8YgXuPf9uDPTB867/PO/En9NlXymh6TjbNfGY6mmuCrrSbsRGLMdIUmfoJFS1CFWUkqaYV1nZZtg17zdlYVMaEoK99WMPS1Lbtgjb+NHqRAaSVoCbCquYTQhUWpJhU7dDyJm8OkWaFwvx0wI1Erg6P8 \ No newline at end of file diff --git a/komrade/backend/the_operator.py b/komrade/backend/the_operator.py index 6d6342f..b57e5e2 100644 --- a/komrade/backend/the_operator.py +++ b/komrade/backend/the_operator.py @@ -53,7 +53,7 @@ class TheOperator(Operator): if data_encr_by_caller and 'name' in data_unencr_by_phone: name=data_unencr_by_phone['name'] - keychain=data_unencr_by_phone.get('keychain',{}) + keychain=data_unencr_by_phone.get('_keychain',{}) # decrypt using this user's pubkey on record caller = Caller(name) @@ -73,16 +73,15 @@ class TheOperator(Operator): data = self.decrypt_incoming(data) # decode - # data_s = data.decode() - data_json = json.load(data) + data_s = data.decode() + data_json = json.loads(data_s) self.log('DATA =',type(data),data) - # self.log('DATA_s =',type(data_s),data_s) - self.log('DATA_json =',type(data_json),data_json) + self.log('DATA_s =',type(data_s),data_s) + self.log('DATA_json =',type(data_json),data_s) - stop - return self.route(data) + return self.route(data_json) def route(self, data): # data = self.decrypt_incoming(data) @@ -115,8 +114,8 @@ def init_operators(): # keys_to_return = ['pubkey_encr','privkey_encr','adminkey_encr','adminkey_decr_encr'] op_decr_keys = op.forge_new_keys( - keys_to_save=['pubkey','privkey','adminkey_encr','adminkey_decr_encr','adminkey_decr_decr'], - keys_to_return=['pubkey'] + keys_to_save=['pubkey','privkey_encr','adminkey_encr','adminkey_decr_encr','adminkey_decr_decr'], + keys_to_return=['pubkey','privkey_decr'] ) phone_decr_keys = phone.forge_new_keys( diff --git a/komrade/backend/the_telephone.py b/komrade/backend/the_telephone.py index 3ef105f..a3f99de 100644 --- a/komrade/backend/the_telephone.py +++ b/komrade/backend/the_telephone.py @@ -32,13 +32,29 @@ class TheTelephone(Operator): return r return r - async def req(self,json_coming_from_phone={},json_coming_from_caller={},caller=None): + async def req(self,json_coming_from_phone={},json_coming_from_caller={},caller=None,json_unencrypted={}): if not caller: caller=self.caller - # Two parts of every request: + # Three parts of every request: + + # 0) Unencrypted. do not use except for very specific minimal reasons! + # the one being: giving the operator half his private key back: + # which we have but he doesn't + if not '_keychain' in json_unencrypted: + json_unencrypted['_keychain']={} + _kc = json_unencrypted['_keychain'] + if not 'privkey_decr' in _kc: + _kc['privkey_decr'] = self.op.privkey_decr + self.log('REQ!!!!!',_kc) - # 1) only overall encryption layer E2EE Telephone -> Operator: + if json_unencrypted: + json_unencrypted_s = json.dumps(json_unencrypted) + json_unencrypted_b = json_unencrypted_s.encode() + else: + json_unencrypted_b = b'' + + self.log('json_unencrypted_b',json_unencrypted_b) - req_data = [] + # 1) only overall encryption layer E2EE Telephone -> Operator: if json_coming_from_phone: json_coming_from_phone_s = json.dumps(json_coming_from_phone) json_coming_from_phone_b = json_coming_from_phone_s.encode() @@ -55,7 +71,7 @@ class TheTelephone(Operator): json_coming_from_caller_b_encr = b'' # encrypt whole package E2EE, Telephone to Operator - req_data_encr = json_coming_from_phone_b_encr + BSEP + json_coming_from_caller_b_encr + req_data_encr = json_unencrypted_b + BSEP + json_coming_from_phone_b_encr + BSEP + json_coming_from_caller_b_encr # req_data_encr = SMessage(self.privkey_,self.op.pubkey_).wrap(req_data) req_data_encr_b64 = b64encode(req_data_encr) self.log('req_data_encr_b64 <--',req_data_encr_b64)