|
|
package kademlia
import ( "bytes" "crypto/rand" "encoding/hex" )
type ID [B]byte
func NewID() (ID, error) { b := make([]byte, 32) _, err := rand.Read(b) if err != nil { return ID{}, err } var id ID copy(id[:], b[:B]) return id, nil }
func (id ID) String() string { return hex.EncodeToString(id[:]) }
func IDFromString(s string) (ID, error) { b, err := hex.DecodeString(s) if err != nil { return ID{}, err } var id ID copy(id[:], b[:B]) return id, nil }
func (idA ID) Equal(idB ID) bool { return bytes.Equal(idA[:], idB[:]) }
// Cmp returns true if idA > idB
func (idA ID) Cmp(idB ID) bool { for i := 0; i < len(idA); i++ { if idA[i] != idB[i] { return idA[i] > idB[i] } } return false }
func (idA ID) Distance(idB ID) ID { var d ID for i := 0; i < B; i++ { d[i] = idA[i] ^ idB[i] } return d }
|