transcribe: more refactoring, speed polling to 2Hz
This commit is contained in:
		
							parent
							
								
									d4233f44df
								
							
						
					
					
						commit
						04ef43f872
					
				| 
						 | 
					@ -31,6 +31,42 @@ class Common:
 | 
				
			||||||
            msgs = r.json()["messages"]
 | 
					            msgs = r.json()["messages"]
 | 
				
			||||||
        return msgs
 | 
					        return msgs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _allocate(self):
 | 
				
			||||||
 | 
					        r = requests.post(self.relay + "allocate")
 | 
				
			||||||
 | 
					        r.raise_for_status()
 | 
				
			||||||
 | 
					        channel_id = r.json()["channel-id"]
 | 
				
			||||||
 | 
					        return channel_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _post_pake(self):
 | 
				
			||||||
 | 
					        msg = self.sp.start()
 | 
				
			||||||
 | 
					        post_data = {"message": hexlify(msg).decode("ascii")}
 | 
				
			||||||
 | 
					        r = requests.post(self.url("pake/post"), data=json.dumps(post_data))
 | 
				
			||||||
 | 
					        r.raise_for_status()
 | 
				
			||||||
 | 
					        other_msgs = r.json()["messages"]
 | 
				
			||||||
 | 
					        return other_msgs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _poll_pake(self, other_msgs):
 | 
				
			||||||
 | 
					        msgs = self.poll(other_msgs, "pake/poll")
 | 
				
			||||||
 | 
					        pake_msg = unhexlify(msgs[0].encode("ascii"))
 | 
				
			||||||
 | 
					        key = self.sp.finish(pake_msg)
 | 
				
			||||||
 | 
					        return key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _post_data(self):
 | 
				
			||||||
 | 
					        post_data = json.dumps({"message": hexlify(self.data).decode("ascii")})
 | 
				
			||||||
 | 
					        r = requests.post(self.url("data/post"), data=post_data)
 | 
				
			||||||
 | 
					        r.raise_for_status()
 | 
				
			||||||
 | 
					        other_msgs = r.json()["messages"]
 | 
				
			||||||
 | 
					        return other_msgs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _poll_data(self, other_msgs):
 | 
				
			||||||
 | 
					        msgs = self.poll(other_msgs, "data/poll")
 | 
				
			||||||
 | 
					        data = unhexlify(msgs[0].encode("ascii"))
 | 
				
			||||||
 | 
					        return data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _deallocate(self):
 | 
				
			||||||
 | 
					        r = requests.post(self.url("deallocate"))
 | 
				
			||||||
 | 
					        r.raise_for_status()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Initiator(Common):
 | 
					class Initiator(Common):
 | 
				
			||||||
    def __init__(self, appid, data, relay=RELAY):
 | 
					    def __init__(self, appid, data, relay=RELAY):
 | 
				
			||||||
        self.appid = appid
 | 
					        self.appid = appid
 | 
				
			||||||
| 
						 | 
					@ -38,45 +74,26 @@ class Initiator(Common):
 | 
				
			||||||
        assert relay.endswith("/")
 | 
					        assert relay.endswith("/")
 | 
				
			||||||
        self.relay = relay
 | 
					        self.relay = relay
 | 
				
			||||||
        self.started = time.time()
 | 
					        self.started = time.time()
 | 
				
			||||||
        self.wait = 2*SECOND
 | 
					        self.wait = 0.5*SECOND
 | 
				
			||||||
        self.timeout = 3*MINUTE
 | 
					        self.timeout = 3*MINUTE
 | 
				
			||||||
        self.side = "initiator"
 | 
					        self.side = "initiator"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_code(self):
 | 
					    def get_code(self):
 | 
				
			||||||
        # allocate channel
 | 
					        self.channel_id = self._allocate() # allocate channel
 | 
				
			||||||
        r = requests.post(self.relay + "allocate")
 | 
					 | 
				
			||||||
        r.raise_for_status()
 | 
					 | 
				
			||||||
        self.channel_id = r.json()["channel-id"]
 | 
					 | 
				
			||||||
        self.code = make_code(self.channel_id)
 | 
					        self.code = make_code(self.channel_id)
 | 
				
			||||||
        self.sp = SPAKE2_A(self.code.encode("ascii"),
 | 
					        self.sp = SPAKE2_A(self.code.encode("ascii"),
 | 
				
			||||||
                           idA=self.appid+":Initiator",
 | 
					                           idA=self.appid+":Initiator",
 | 
				
			||||||
                           idB=self.appid+":Receiver")
 | 
					                           idB=self.appid+":Receiver")
 | 
				
			||||||
        msg = self.sp.start()
 | 
					        self._post_pake()
 | 
				
			||||||
        post_data = {"message": hexlify(msg).decode("ascii")}
 | 
					 | 
				
			||||||
        r = requests.post(self.url("pake/post"), data=json.dumps(post_data))
 | 
					 | 
				
			||||||
        r.raise_for_status()
 | 
					 | 
				
			||||||
        return self.code
 | 
					        return self.code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_data(self):
 | 
					    def get_data(self):
 | 
				
			||||||
        # poll for PAKE response
 | 
					        self.key = self._poll_pake([])
 | 
				
			||||||
        msgs = self.poll([], "pake/poll")
 | 
					 | 
				
			||||||
        pake_msg = unhexlify(msgs[0].encode("ascii"))
 | 
					 | 
				
			||||||
        self.key = self.sp.finish(pake_msg)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # post encrypted data
 | 
					        other_msgs = self._post_data()
 | 
				
			||||||
        post_data = json.dumps({"message": hexlify(self.data).decode("ascii")})
 | 
					        data = self._poll_data(other_msgs)
 | 
				
			||||||
        r = requests.post(self.url("data/post"), data=post_data)
 | 
					 | 
				
			||||||
        r.raise_for_status()
 | 
					 | 
				
			||||||
        other_msgs = r.json()["messages"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # poll for data message
 | 
					 | 
				
			||||||
        msgs = self.poll(other_msgs, "data/poll")
 | 
					 | 
				
			||||||
        data = unhexlify(msgs[0].encode("ascii"))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # deallocate channel
 | 
					 | 
				
			||||||
        r = requests.post(self.url("deallocate"))
 | 
					 | 
				
			||||||
        r.raise_for_status()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._deallocate()
 | 
				
			||||||
        return data
 | 
					        return data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Receiver(Common):
 | 
					class Receiver(Common):
 | 
				
			||||||
| 
						 | 
					@ -88,7 +105,7 @@ class Receiver(Common):
 | 
				
			||||||
        self.relay = relay
 | 
					        self.relay = relay
 | 
				
			||||||
        assert relay.endswith("/")
 | 
					        assert relay.endswith("/")
 | 
				
			||||||
        self.started = time.time()
 | 
					        self.started = time.time()
 | 
				
			||||||
        self.wait = 2*SECOND
 | 
					        self.wait = 0.5*SECOND
 | 
				
			||||||
        self.timeout = 3*MINUTE
 | 
					        self.timeout = 3*MINUTE
 | 
				
			||||||
        self.side = "receiver"
 | 
					        self.side = "receiver"
 | 
				
			||||||
        self.sp = SPAKE2_B(code.encode("ascii"),
 | 
					        self.sp = SPAKE2_B(code.encode("ascii"),
 | 
				
			||||||
| 
						 | 
					@ -96,30 +113,11 @@ class Receiver(Common):
 | 
				
			||||||
                           idB=self.appid+":Receiver")
 | 
					                           idB=self.appid+":Receiver")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_data(self):
 | 
					    def get_data(self):
 | 
				
			||||||
        # post PAKE message
 | 
					        other_msgs = self._post_pake()
 | 
				
			||||||
        msg = self.sp.start()
 | 
					        self.key = self._poll_pake(other_msgs)
 | 
				
			||||||
        post_data = {"message": hexlify(msg).decode("ascii")}
 | 
					 | 
				
			||||||
        r = requests.post(self.url("pake/post"), data=json.dumps(post_data))
 | 
					 | 
				
			||||||
        r.raise_for_status()
 | 
					 | 
				
			||||||
        other_msgs = r.json()["messages"]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # poll for PAKE response
 | 
					        other_msgs = self._post_data()
 | 
				
			||||||
        msgs = self.poll(other_msgs, "pake/poll")
 | 
					        data = self._poll_data(other_msgs)
 | 
				
			||||||
        pake_msg = unhexlify(msgs[0].encode("ascii"))
 | 
					 | 
				
			||||||
        self.key = self.sp.finish(pake_msg)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # post data message
 | 
					 | 
				
			||||||
        post_data = json.dumps({"message": hexlify(self.data).decode("ascii")})
 | 
					 | 
				
			||||||
        r = requests.post(self.url("data/post"), data=post_data)
 | 
					 | 
				
			||||||
        r.raise_for_status()
 | 
					 | 
				
			||||||
        other_msgs = r.json()["messages"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # poll for data message
 | 
					 | 
				
			||||||
        msgs = self.poll(other_msgs, "data/poll")
 | 
					 | 
				
			||||||
        data = unhexlify(msgs[0].encode("ascii"))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # deallocate channel
 | 
					 | 
				
			||||||
        r = requests.post(self.url("deallocate"))
 | 
					 | 
				
			||||||
        r.raise_for_status()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._deallocate()
 | 
				
			||||||
        return data
 | 
					        return data
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user