mirror of
https://github.com/logos-blockchain/logos-blockchain-specs.git
synced 2026-02-24 15:13:27 +00:00
use mix_path_length to make Sphinx packets
This commit is contained in:
parent
0772bf1563
commit
adfed3a622
@ -22,7 +22,7 @@ class GlobalConfig:
|
||||
@dataclass
|
||||
class NodeConfig:
|
||||
private_key: X25519PrivateKey
|
||||
mix_path_length: int # TODO: use this when creating Sphinx packets
|
||||
mix_path_length: int
|
||||
gossip: GossipConfig
|
||||
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@ class Node:
|
||||
self.broadcast_channel = asyncio.Queue()
|
||||
|
||||
sample_packet, _ = PacketBuilder.build_real_packets(
|
||||
bytes(1), global_config.membership
|
||||
bytes(1), global_config.membership, self.global_config.max_mix_path_length
|
||||
)[0]
|
||||
self.packet_size = len(sample_packet.bytes())
|
||||
|
||||
@ -102,7 +102,9 @@ class Node:
|
||||
|
||||
async def send_message(self, msg: bytes):
|
||||
for packet, _ in PacketBuilder.build_real_packets(
|
||||
msg, self.global_config.membership
|
||||
msg,
|
||||
self.global_config.membership,
|
||||
self.config.mix_path_length,
|
||||
):
|
||||
await self.mixgossip_channel.gossip(
|
||||
Node.__build_msg(MsgType.REAL, packet.bytes())
|
||||
|
||||
@ -23,24 +23,27 @@ class MessageFlag(Enum):
|
||||
class PacketBuilder:
|
||||
@staticmethod
|
||||
def build_real_packets(
|
||||
message: bytes, membership: MixMembership
|
||||
message: bytes, membership: MixMembership, path_len: int
|
||||
) -> List[Tuple[SphinxPacket, List[NodeInfo]]]:
|
||||
return PacketBuilder.__build_packets(
|
||||
MessageFlag.MESSAGE_FLAG_REAL, message, membership
|
||||
MessageFlag.MESSAGE_FLAG_REAL, message, membership, path_len
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def build_drop_cover_packets(
|
||||
message: bytes, membership: MixMembership
|
||||
message: bytes, membership: MixMembership, path_len: int
|
||||
) -> List[Tuple[SphinxPacket, List[NodeInfo]]]:
|
||||
return PacketBuilder.__build_packets(
|
||||
MessageFlag.MESSAGE_FLAG_DROP_COVER, message, membership
|
||||
MessageFlag.MESSAGE_FLAG_DROP_COVER, message, membership, path_len
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def __build_packets(
|
||||
flag: MessageFlag, message: bytes, membership: MixMembership
|
||||
flag: MessageFlag, message: bytes, membership: MixMembership, path_len: int
|
||||
) -> List[Tuple[SphinxPacket, List[NodeInfo]]]:
|
||||
if path_len <= 0:
|
||||
raise ValueError("path_len must be greater than 0")
|
||||
|
||||
last_mix = membership.choose()
|
||||
|
||||
msg_with_flag = flag.bytes() + message
|
||||
@ -50,7 +53,7 @@ class PacketBuilder:
|
||||
|
||||
out = []
|
||||
for fragment in fragment_set.fragments:
|
||||
route = membership.generate_route(3, last_mix)
|
||||
route = membership.generate_route(path_len, last_mix)
|
||||
packet = SphinxPacket.build(
|
||||
fragment.bytes(),
|
||||
[mixnode.sphinx_node() for mixnode in route],
|
||||
|
||||
@ -19,7 +19,7 @@ class TestPacket(TestCase):
|
||||
global_config, _, key_map = init_mixnet_config(10)
|
||||
msg = self.random_bytes(3500)
|
||||
packets_and_routes = PacketBuilder.build_real_packets(
|
||||
msg, global_config.membership
|
||||
msg, global_config.membership, 3
|
||||
)
|
||||
self.assertEqual(4, len(packets_and_routes))
|
||||
|
||||
@ -60,7 +60,7 @@ class TestPacket(TestCase):
|
||||
global_config, _, key_map = init_mixnet_config(10)
|
||||
msg = b"cover"
|
||||
packets_and_routes = PacketBuilder.build_drop_cover_packets(
|
||||
msg, global_config.membership
|
||||
msg, global_config.membership, 3
|
||||
)
|
||||
self.assertEqual(1, len(packets_and_routes))
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user