From 28307a64bf3d02167b5d8a61bddb9e22fe49648c Mon Sep 17 00:00:00 2001 From: quadrismegistus Date: Wed, 9 Sep 2020 20:41:14 +0100 Subject: [PATCH] updates --- komrade/backend/messages.py | 149 ++++++++++++------------------------ 1 file changed, 48 insertions(+), 101 deletions(-) diff --git a/komrade/backend/messages.py b/komrade/backend/messages.py index 154931d..d07329f 100644 --- a/komrade/backend/messages.py +++ b/komrade/backend/messages.py @@ -103,16 +103,21 @@ class Message(Logger): return False return True - def decrypt(self,recursive=False): + def decrypt(self,recursive=True): # get callers - caller,callee = self.get_callers() - self.log(f'attempting to decrypt msg {self.msg} from {caller} to {callee}') + self.log(f'attempting to decrypt msg',self.msg) # {self.msg} from {caller} to {callee}') + # decrypt msg - decr_msg = self.decrypt_from_send( - msg_encr=self.msg, - from_pubkey=caller.pubkey, - to_privkey=callee.privkey - ) + decr_msg_b = SMessage( + self.callee.privkey, + self.caller.pubkey + ).unwrap(self.msg) + + self.log('Am I decrypted?',decr_msg_b) + + decr_msg = pickle.loads(decr_msg_b) + self.log('unpickled:',decr_msg) + self.msg_encr = self.msg self.msg = decr_msg self.msg_d['_msg'] = decr_msg @@ -127,106 +132,48 @@ class Message(Logger): return decr_msg - def encrypt(self,recursive=False): - """ - Assuming that a recursive message looks like this: - - self.msg_d={'_from_pub': b'UEC2\x00\x00\x00-\x10\xdcu\xc7\x03:\xb6}\xd2\x88\x93E\x88\x00\xed\xda&\x8f\xd0\x1ae\xe1\xa3\x1b=\xd6\xadBB~M\x86\xda\xd57\x8e\xb5', '_from_name': 'TheTelephone', '_to_pub': b'UEC2\x00\x00\x00-W\xbe\xc4\xa2\x02Sm\xe0\xfc\xde\x1c\xbb\xa2E\x8fy \xc7~+\xff\xd7p\xc6s\xab\xe5\xb29M/\xf24\x92\x91n0', '_to_name': 'TheOperator', '_msg': b' \'\x04&h\x00\x00\x00\x00\x01\x01@\x0c\x00\x00\x00\x10\x00\x00\x004\x00\x00\x00\x90\x1a\x88\x89\x93-\x10\xfb\x14\x10\x08M\xc0\xf2_i\x842\xa8k\xcc\xff"c\x0e"x\\"\xaf\x9c\x91>\x87\x9f|~PP\xb5\x02\x91q\\X\xd2\xbdQu\xcc\xd0A\x0b7zL)\x80\x94[\xe7+I\xf1m\x0f\xb4\x80\xc7;\x8fO7\x99\x90d_\xb2y\xc4'} - self.to_name=TheOperator - self.to_pubkey=b'UEC2\x00\x00\x00-W\xbe\xc4\xa2\x02Sm\xe0\xfc\xde\x1c\xbb\xa2E\x8fy \xc7~+\xff\xd7p\xc6s\xab\xe5\xb29M/\xf24\x92\x91n0' - self.from_name=Caller - self.from_pubkey=b'UEC2\x00\x00\x00-\x10\xdcu\xc7\x03:\xb6}\xd2\x88\x93E\x88\x00\xed\xda&\x8f\xd0\x1ae\xe1\xa3\x1b=\xd6\xadBB~M\x86\xda\xd57\x8e\xb5' - self.msg= - - self.msg_d={'_from_pub': b'UEC2\x00\x00\x00-\x10\xdcu\xc7\x03:\xb6}\xd2\x88\x93E\x88\x00\xed\xda&\x8f\xd0\x1ae\xe1\xa3\x1b=\xd6\xadBB~M\x86\xda\xd57\x8e\xb5', '_from_name': 'TheTelephone', '_to_pub': b'UEC2\x00\x00\x00-W\xbe\xc4\xa2\x02Sm\xe0\xfc\xde\x1c\xbb\xa2E\x8fy \xc7~+\xff\xd7p\xc6s\xab\xe5\xb29M/\xf24\x92\x91n0', '_to_name': 'TheOperator', '_msg': b' \'\x04&h\x00\x00\x00\x00\x01\x01@\x0c\x00\x00\x00\x10\x00\x00\x004\x00\x00\x00\x90\x1a\x88\x89\x93-\x10\xfb\x14\x10\x08M\xc0\xf2_i\x842\xa8k\xcc\xff"c\x0e"x\\"\xaf\x9c\x91>\x87\x9f|~PP\xb5\x02\x91q\\X\xd2\xbdQu\xcc\xd0A\x0b7zL)\x80\x94[\xe7+I\xf1m\x0f\xb4\x80\xc7;\x8fO7\x99\x90d_\xb2y\xc4'} - self.to_name=TheOperator - self.to_pubkey=b'UEC2\x00\x00\x00-W\xbe\xc4\xa2\x02Sm\xe0\xfc\xde\x1c\xbb\xa2E\x8fy \xc7~+\xff\xd7p\xc6s\xab\xe5\xb29M/\xf24\x92\x91n0' - self.from_name=TheTelephone - self.from_pubkey=b'UEC2\x00\x00\x00-\x10\xdcu\xc7\x03:\xb6}\xd2\x88\x93E\x88\x00\xed\xda&\x8f\xd0\x1ae\xe1\xa3\x1b=\xd6\xadBB~M\x86\xda\xd57\x8e\xb5' - self.msg=b' \'\x04&h\x00\x00\x00\x00\x01\x01@\x0c\x00\x00\x00\x10\x00\x00\x004\x00\x00\x00\x90\x1a\x88\x89\x93-\x10\xfb\x14\x10\x08M\xc0\xf2_i\x842\xa8k\xcc\xff"c\x0e"x\\"\xaf\x9c\x91>\x87\x9f|~PP\xb5\x02\x91q\\X\xd2\xbdQu\xcc\xd0A\x0b7zL)\x80\x94[\xe7+I\xf1m\x0f\xb4\x80\xc7;\x8fO7\x99\x90d_\xb2y\xc4' - self._route=None - self.caller= - self.callee= - self.messenger=None - - self._route=None - self.caller= - self.callee= - self.messenger=None - - """ + def encrypt(self): # each child message should already be encrypted before coming to its parent message ,recursive=False): if self.is_encrypted: return # self.log(f'attempting to encrypt msg {self.msg} from {self.caller} to {self.callee}') - self.log(f'I now look like v1: {self}') - - if not self.has_embedded_msg: - msg_to_encrypt = self.msg - elif recursive: - # first encrypt that message - self.msg.encrypt() - # then encrypt *that* msg's entire msg_d - msg_to_encrypt = self.msg.msg_d + self.log(f'About to encrypt self.msg! I now look like v1: {self}') - # in both cases, overwrite msg - encr_msg = self.encrypt_to_send( - self.msg, + # binarize msg + msg_b = pickle.dumps(self.msg) + self.log('msg_b = ',msg_b) + + # encrypt it! + msg_encr = SMessage( self.caller.privkey, - self.callee.pubkey - ) - # self.log('created an encrypted msg:',encr_msg) + self.callee.pubkey, + ).wrap(msg_b) + self.msg_decr = self.msg self.msg = encr_msg self.msg_d['_msg'] = encr_msg - self.log(f'I now look like v2: {self}') - self.is_encrypted = False - - - - - - ## creating/encrypting/rolling up messages - def encrypt_to_send(self,msg_json,from_privkey,to_pubkey): - if not msg_json or not from_privkey or not to_pubkey: - raise KomradeException(f'not enough info!') - - # self.log('packing for transmission: msg_json',type(msg_json),msg_json) - msg_b = package_for_transmission(msg_json) - # self.log('packing for transmission: msg_b',type(msg_b),msg_b) - # try: - # self.log('from privkey =',from_privkey) - # self.log('to pubkey =',to_pubkey) - - msg_encr = SMessage( - from_privkey, - to_pubkey, - ).wrap(msg_b) - # self.log('msg_encr',msg_encr) - # stop - return msg_encr - # except ThemisError as e: - # self.log('unable to encrypt to send!',e) - # return b'' - - - def decrypt_from_send(self,msg_encr,from_pubkey,to_privkey): - if not msg_encr or not from_pubkey or not to_privkey: - self.log('not enough info!',msg_encr,from_pubkey,to_privkey) - return {} - try: - # decrypt - msg_b = SMessage( - to_privkey, - from_pubkey, - ).unwrap(msg_encr) - # decode - self.log('msg_b??',msg_b) - msg_json = unpackage_from_transmission(msg_b) - self.log('msg_json??',msg_json) - # return - return msg_json - except ThemisError as e: - self.log('unable to decrypt from send!',e) - return {} + self.log(f'Encrypted! I now look like v2: {self}') + self.is_encrypted = True + + + + # def decrypt_from_send(self,msg_encr,from_pubkey,to_privkey): + # if not msg_encr or not from_pubkey or not to_privkey: + # self.log('not enough info!',msg_encr,from_pubkey,to_privkey) + # return {} + # try: + # # decrypt + # msg_b = SMessage( + # to_privkey, + # from_pubkey, + # ).unwrap(msg_encr) + # # decode + # self.log('msg_b??',msg_b) + # msg_json = unpackage_from_transmission(msg_b) + # self.log('msg_json??',msg_json) + # # return + # return msg_json + # except ThemisError as e: + # self.log('unable to decrypt from send!',e) + # return {}