def coerce_addr_to_hex(x): if isinstance(x, (int, long)): return zpad(int_to_big_endian(x), 20).encode('hex') elif len(x) == 40 or len(x) == 0: return x else: return zpad(x, 20)[-20:].encode('hex')
def coerce_to_bytes(x): if isinstance(x, (int, long)): return int_to_big_endian(x) elif len(x) == 40: return x.decode('hex') else: return x
def test_split(): node = random_node() routing = kademlia.RoutingTable(node) assert len(routing.buckets) == 1 # create very close node for i in range(kademlia.k_bucket_size): node = kademlia.Node(int_to_big_endian(node.id + 1)) assert routing.buckets[0].in_range(node) routing.add_node(node) assert len(routing.buckets) == 1 assert len(routing.buckets[0]) == kademlia.k_bucket_size node = kademlia.Node(int_to_big_endian(node.id + 1)) assert routing.buckets[0].in_range(node) routing.add_node(node) assert len(routing.buckets[0]) <= kademlia.k_bucket_size assert len(routing.buckets) <= 512
def recursive_int_to_big_endian(item): ''' convert all int to int_to_big_endian recursively ''' if isinstance(item, (int, long)): return int_to_big_endian(item) elif isinstance(item, (list, tuple)): res = [] for item in item: res.append(recursive_int_to_big_endian(item)) return res return item
def send_find_node(self, node, target_node_id): """ ### Find Node (type 0x03) Find Node packets are sent to locate nodes close to a given target ID. The receiver should reply with a Neighbors packet containing the `k` nodes closest to target that it knows about. FindNode packet-type: 0x03 struct FindNode { NodeId target; unsigned expiration; }; """ assert isinstance(target_node_id, long) target_node_id = rlp.int_to_big_endian(target_node_id) assert len(target_node_id) == kademlia.k_id_size / 8 log.debug('>>> find_node', remoteid=node) message = self.pack(self.cmd_id_map['find_node'], [target_node_id]) self.send(node, message)
def random_pubkey(): pk = int_to_big_endian(random.getrandbits(kademlia.k_id_size)) return '\x00' * (kademlia.k_id_size / 8 - len(pk)) + pk
def encode_int64(v): return zpad(int_to_big_endian(v), 64)
def encode_int(v): '''encodes an integer into serialization''' if not isinstance(v, (int, long)) or v < 0 or v >= TT256: raise Exception("Integer invalid or out of range") return int_to_big_endian(v)
def encode_int(v): '''encodes an integer into serialization''' if not isinstance(v, (int, long)) or v < 0 or v >= 2 ** 256: raise Exception("Integer invalid or out of range") return int_to_big_endian(v)