From 40284b2b99583a04a4f915ece20119f8d2c02bb9 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Thu, 7 Jun 2012 16:29:20 +0000 Subject: [PATCH] update dht_sec definition --- docs/dht_sec.html | 18 +++++++++--------- docs/dht_sec.rst | 18 +++++++++--------- docs/ip_id_v4.png | Bin 4136 -> 5798 bytes docs/ip_id_v6.png | Bin 4414 -> 6389 bytes docs/ips.py | 22 ++++++++++++++-------- src/kademlia/node_id.cpp | 4 ++-- test/test_primitives.cpp | 10 +++++----- 7 files changed, 39 insertions(+), 33 deletions(-) diff --git a/docs/dht_sec.html b/docs/dht_sec.html index 65267d4b0..57d8dcdd1 100644 --- a/docs/dht_sec.html +++ b/docs/dht_sec.html @@ -109,11 +109,11 @@ of IPs, as well as allowing more than one node ID per external IP, the node ID can be restricted at each class level of the IP.

The expression to calculate a valid ID prefix (from an IPv4 address) is:

-sha1((ip & 0x30f3fff) .. r)
+sha1((ip & 0x01071f7f) .. r)
 

And for an IPv6 address (ip is the high 64 bits of the address):

-sha1((ip & 0x103070f1f3f7fff) ..  r)
+sha1((ip & 0x000103070f1f3f7f) ..  r)
 

r is a random number in the range [0, 7]. The resulting integer, representing the masked IP address is supposed to be big-endian before @@ -131,8 +131,8 @@ uint8_t* ip; // our external IPv4 or IPv6 address (network byte order) int num_octets; // the number of octets to consider in ip (4 or 8) uint8_t node_id[20]; // resulting node ID -uint8_t v4mask[] = { 0x03, 0x0f, 0x3f, 0xff }; -uint8_t v6mask[] = { 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; +uint8_t v4mask[] = { 0x01, 0x07, 0x1f, 0x7f }; +uint8_t v6mask[] = { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f }; uint8_t* mask = num_octets == 4 ? v4_mask : v8_mask; for (int i = 0; i < num_octets; ++i) @@ -152,11 +152,11 @@ node_id[19] = rand;

 IP           rand  example node ID
 ============ ===== ==========================================
-124.31.75.21   1   8a84ac4d 0c5d6a4ec8a88e4c6ab4c28b95eee4 01
-21.75.31.124  86   1167d8b9 4e7a08645677bbd1cfe7d8f956d532 56
-65.23.51.170  22   508e075d bc8f112a3d426c84764f8c2a1150e6 16
-84.124.73.14  65   095d76cb 1bb1fe518101ceef99462b947a01ff 41
-43.213.53.83  90   f62b5a2f 5b7c4be0237986d5243b87aa6d5130 5a
+124.31.75.21   1   f766f9f5 0c5d6a4ec8a88e4c6ab4c28b95eee4 01
+21.75.31.124  86   7ee04779 4e7a08645677bbd1cfe7d8f956d532 56
+65.23.51.170  22   76a626ff bc8f112a3d426c84764f8c2a1150e6 16
+84.124.73.14  65   beb4e619 1bb1fe518101ceef99462b947a01ff 41
+43.213.53.83  90   ace5613a 5b7c4be0237986d5243b87aa6d5130 5a
 

The bold parts of the node ID are the important parts. The rest are random numbers.

diff --git a/docs/dht_sec.rst b/docs/dht_sec.rst index 8e1176bc2..df5290dc5 100644 --- a/docs/dht_sec.rst +++ b/docs/dht_sec.rst @@ -65,11 +65,11 @@ ID can be restricted at each class level of the IP. The expression to calculate a valid ID prefix (from an IPv4 address) is:: - sha1((ip & 0x30f3fff) .. r) + sha1((ip & 0x01071f7f) .. r) And for an IPv6 address (``ip`` is the high 64 bits of the address):: - sha1((ip & 0x103070f1f3f7fff) .. r) + sha1((ip & 0x000103070f1f3f7f) .. r) ``r`` is a random number in the range [0, 7]. The resulting integer, representing the masked IP address is supposed to be big-endian before @@ -91,8 +91,8 @@ Example code code for calculating a valid node ID:: int num_octets; // the number of octets to consider in ip (4 or 8) uint8_t node_id[20]; // resulting node ID - uint8_t v4mask[] = { 0x03, 0x0f, 0x3f, 0xff }; - uint8_t v6mask[] = { 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; + uint8_t v4mask[] = { 0x01, 0x07, 0x1f, 0x7f }; + uint8_t v6mask[] = { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f }; uint8_t* mask = num_octets == 4 ? v4_mask : v8_mask; for (int i = 0; i < num_octets; ++i) @@ -114,11 +114,11 @@ test vectors: IP rand example node ID ============ ===== ========================================== - 124.31.75.21 1 **8a84ac4d** 0c5d6a4ec8a88e4c6ab4c28b95eee4 **01** - 21.75.31.124 86 **1167d8b9** 4e7a08645677bbd1cfe7d8f956d532 **56** - 65.23.51.170 22 **508e075d** bc8f112a3d426c84764f8c2a1150e6 **16** - 84.124.73.14 65 **095d76cb** 1bb1fe518101ceef99462b947a01ff **41** - 43.213.53.83 90 **f62b5a2f** 5b7c4be0237986d5243b87aa6d5130 **5a** + 124.31.75.21 1 **f766f9f5** 0c5d6a4ec8a88e4c6ab4c28b95eee4 **01** + 21.75.31.124 86 **7ee04779** 4e7a08645677bbd1cfe7d8f956d532 **56** + 65.23.51.170 22 **76a626ff** bc8f112a3d426c84764f8c2a1150e6 **16** + 84.124.73.14 65 **beb4e619** 1bb1fe518101ceef99462b947a01ff **41** + 43.213.53.83 90 **ace5613a** 5b7c4be0237986d5243b87aa6d5130 **5a** The bold parts of the node ID are the important parts. The rest are random numbers. diff --git a/docs/ip_id_v4.png b/docs/ip_id_v4.png index c3a209503d5a323b152e7b4d27ba1d94635d4bcf..7c17deb630d8021b97bab675378a9968375ee63e 100644 GIT binary patch delta 5525 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 delta 4130 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 Q;BUy$*3G8EDlqB40G(GNF8}}l diff --git a/docs/ips.py b/docs/ips.py index d2bf9d644..b633aede8 100644 --- a/docs/ips.py +++ b/docs/ips.py @@ -5,15 +5,21 @@ import sys def num_ids(bits, total_bits): - ret = 8; - modulus = 0x100 - mod_shift = 6 * 32 / total_bits - while bits >= 0: - ret *= min(1 << bits, 256) - ret = min(ret, modulus) + if total_bits == 32: + bit_dec = 2 + else: + bit_dec = 1 + + num_used = 7; + ret = 3 + + while bits > 0: + ret += min(num_used, bits) + num_used -= bit_dec + if num_used < 0: num_used = 0 bits -= 8 - modulus <<= mod_shift - return ret + + return 1 << ret f = open('ip_id_v4.dat', 'w+') for i in range(0, 33): diff --git a/src/kademlia/node_id.cpp b/src/kademlia/node_id.cpp index 602423d9a..1dee7840c 100644 --- a/src/kademlia/node_id.cpp +++ b/src/kademlia/node_id.cpp @@ -102,8 +102,8 @@ node_id generate_id_impl(address const& ip_, boost::uint32_t r) { boost::uint8_t* ip = 0; - const static boost::uint8_t v4mask[] = { 0x03, 0x0f, 0x3f, 0xff }; - const static boost::uint8_t v6mask[] = { 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; + const static boost::uint8_t v4mask[] = { 0x01, 0x07, 0x1f, 0x7f }; + const static boost::uint8_t v6mask[] = { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f }; boost::uint8_t const* mask = 0; int num_octets = 0; diff --git a/test/test_primitives.cpp b/test/test_primitives.cpp index f2fe53f93..d1f061118 100644 --- a/test/test_primitives.cpp +++ b/test/test_primitives.cpp @@ -1733,11 +1733,11 @@ int test_main() boost::uint8_t prefixes[][4] = { - {0x8a, 0x84, 0xac, 0x4d}, - {0x11, 0x67, 0xd8, 0xb9 }, - {0x50, 0x8e, 0x07, 0x5d }, - {0x09, 0x5d, 0x76, 0xcb }, - {0xf6, 0x2b, 0x5a, 0x2f }, + {0xf7, 0x66, 0xf9, 0xf5}, + {0x7e, 0xe0, 0x47, 0x79 }, + {0x76, 0xa6, 0x26, 0xff }, + {0xbe, 0xb4, 0xe6, 0x19 }, + {0xac, 0xe5, 0x61, 0x3a }, }; for (int i = 0; i < 5; ++i)