nothing-unencr
quadrismegistus 4 years ago
parent 6b5fa05ff7
commit 28307a64bf

@ -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:
<MESSAGE>
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=
<MESSAGE>
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=<komrade.backend.the_telephone.TheTelephone object at 0x7f0acfbf7e80>
self.callee=<komrade.backend.the_operator.TheOperator object at 0x7f0ac868a3c8>
self.messenger=None
</MESSAGE>
self._route=None
self.caller=<komrade.backend.the_telephone.TheTelephone object at 0x7f0acfbf7e80>
self.callee=<komrade.backend.the_operator.TheOperator object at 0x7f0ac868a3c8>
self.messenger=None
</MESSAGE>
"""
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 {}

Loading…
Cancel
Save