fix observing final msg

This commit is contained in:
Youngjoon Lee 2024-06-10 20:51:45 +09:00
parent c16ed046ba
commit 425a3e2684
No known key found for this signature in database
GPG Key ID: 09B750B5BD6F08A2
2 changed files with 12 additions and 9 deletions

View File

@ -33,14 +33,9 @@ class Adversary:
def inspect_message_size(self, msg: SphinxPacket | bytes):
self.message_sizes.append(len(msg))
def observe_receiving_node(self, sender: "Node", receiver: "Node", msg: SphinxPacket | bytes):
cur_window = len(self.msg_pools_per_window) - 1
self.msg_pools_per_window[cur_window][receiver].append(self.env.now)
self.msgs_received_per_window[cur_window][receiver].add(sender)
origin_id = receiver.inspect_message(msg)
if origin_id is not None:
self.final_msgs_received[receiver][cur_window].append((sender, origin_id))
def observe_receiving_node(self, sender: "Node", receiver: "Node"):
self.msg_pools_per_window[-1][receiver].append(self.env.now)
self.msgs_received_per_window[-1][receiver].add(sender)
# if node not in self.node_states[self.env.now]:
# self.node_states[self.env.now][node] = NodeState.RECEIVING
@ -53,6 +48,12 @@ class Adversary:
self.senders_around_interval.update({sender})
# self.node_states[self.env.now][node] = NodeState.SENDING
def observe_if_final_msg(self, sender: "Node", receiver: "Node", msg: SphinxPacket | bytes):
origin_id = receiver.inspect_message(msg)
if origin_id is not None:
cur_window = len(self.msgs_received_per_window) - 1
self.final_msgs_received[receiver][cur_window].append((sender, origin_id))
def is_around_message_interval(self, time: SimTime):
return time % self.config.mixnet.message_interval <= self.config.mixnet.max_message_prep_time

View File

@ -52,7 +52,7 @@ class P2P(ABC):
yield self.env.timeout(self.config.p2p.random_network_latency())
self.measurement.measure_ingress(receiver, msg)
self.adversary.observe_receiving_node(sender, receiver, msg)
self.adversary.observe_receiving_node(sender, receiver)
self.receive(msg, hops_traveled + 1, sender, receiver)
@abstractmethod
@ -80,6 +80,7 @@ class NaiveBroadcastP2P(P2P):
def receive(self, msg: SphinxPacket | bytes, hops_traveled: int, sender: "Node", receiver: "Node"):
msg_hash = hashlib.sha256(bytes(msg)).digest()
self.measurement.update_message_hops(msg_hash, hops_traveled)
self.adversary.observe_if_final_msg(sender, receiver, msg)
self.env.process(receiver.receive_message(msg))
@ -134,6 +135,7 @@ class GossipP2P(P2P):
if msg_hash not in self.message_cache[receiver]:
self.message_cache[receiver][msg_hash] = sender
self.measurement.update_message_hops(msg_hash, hops_traveled)
self.adversary.observe_if_final_msg(sender, receiver, msg)
# Receive and gossip
self.env.process(receiver.receive_message(msg))