Я пытаюсь лучше понять метрику расстояния XOR Kademlia, поэтому я написал небольшую фиктивную программу, чтобы попытаться лучше понять. Я также не использую здесь 160-битное число в качестве ключа, а скорее хэш sha256 некоторого идентификатора пользователя.
Вот моя функция расстояния xor. Это более-менее правильно? Я выполняю XOR над каждым байтом, добавляя его к буферу rawBytes
и преобразовывая этот байтовый буфер в целое число.
func XorDistance(node string, otherNode string) uint64 {
var rawBytes [32]byte
for i := 0; i < 32; i++ {
rawBytes[i] = node[i] ^ otherNode[i]
}
distance, _ := binary.Uvarint(rawBytes[:])
return distance
}