diff --git a/pkgs/tools/networking/cjdns/builder.sh b/pkgs/tools/networking/cjdns/builder.sh
deleted file mode 100644
index c2e3701c0468..000000000000
--- a/pkgs/tools/networking/cjdns/builder.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-source $stdenv/setup
-
-unpackPhase
-cd git-export
-
-bash do
-
-mkdir -p $out/sbin
-cp cjdroute $out/sbin
diff --git a/pkgs/tools/networking/cjdns/default.nix b/pkgs/tools/networking/cjdns/default.nix
index 9f734f2f6d0f..4403018a3912 100644
--- a/pkgs/tools/networking/cjdns/default.nix
+++ b/pkgs/tools/networking/cjdns/default.nix
@@ -1,8 +1,8 @@
{ stdenv, fetchFromGitHub, nodejs, which, python27 }:
let
- date = "20140928";
- rev = "e2b673698e471dbc82b4e9dbc04cb9e16f1f06a6";
+ date = "20141023";
+ rev = "c7eed6b14688458e16fab368f68904e530651a30";
in
stdenv.mkDerivation {
name = "cjdns-${date}-${stdenv.lib.strings.substring 0 7 rev}";
@@ -11,11 +11,9 @@ stdenv.mkDerivation {
owner = "cjdelisle";
repo = "cjdns";
inherit rev;
- sha256 = "0ql51845rni6678dda03zr18ary7xlqcs3khva9x80x815h1sy8v";
+ sha256 = "11z8dk7byxh9pfv7mhfvnk465qln1g7z8c8f822623d59lwjpbs1";
};
- patches = [ ./rfc5952.patch ];
-
buildInputs = [ which python27 nodejs];
buildPhase = "bash do";
diff --git a/pkgs/tools/networking/cjdns/rfc5952.patch b/pkgs/tools/networking/cjdns/rfc5952.patch
deleted file mode 100644
index 2152d192b53a..000000000000
--- a/pkgs/tools/networking/cjdns/rfc5952.patch
+++ /dev/null
@@ -1,286 +0,0 @@
-diff --git a/admin/angel/cjdroute2.c b/admin/angel/cjdroute2.c
-index dfce6c6..77954a7 100644
---- a/admin/angel/cjdroute2.c
-+++ b/admin/angel/cjdroute2.c
-@@ -80,7 +80,7 @@ static int genAddress(uint8_t addressOut[40],
- if (AddressCalc_addressForPublicKey(address.ip6.bytes, address.key)) {
- Hex_encode(privateKeyHexOut, 65, privateKey, 32);
- Base32_encode(publicKeyBase32Out, 53, address.key, 32);
-- Address_printIp(addressOut, &address);
-+ Address_printShortIp(addressOut, &address);
- return 0;
- }
- }
-diff --git a/contrib/c/makekeys.c b/contrib/c/makekeys.c
-index 3727fff..29582f1 100644
---- a/contrib/c/makekeys.c
-+++ b/contrib/c/makekeys.c
-@@ -41,7 +41,7 @@ int main(int argc, char** argv)
- if (AddressCalc_addressForPublicKey(ip, publicKey)) {
- Hex_encode(hexPrivateKey, 65, privateKey, 32);
- Base32_encode(publicKeyBase32, 53, publicKey, 32);
-- AddrTools_printIp(printedIp, ip);
-+ AddrTools_printShortIp(printedIp, ip);
- printf("%s %s %s.k\n", hexPrivateKey, printedIp, publicKeyBase32);
- }
- }
-diff --git a/contrib/c/privatetopublic.c b/contrib/c/privatetopublic.c
-index 7f5f967..dc98f1c 100644
---- a/contrib/c/privatetopublic.c
-+++ b/contrib/c/privatetopublic.c
-@@ -73,7 +73,7 @@ int main(int argc, char** argv)
- AddressCalc_addressForPublicKey(address.ip6.bytes, address.key);
- if (address.ip6.bytes[0] == 0xFC) {
- Base32_encode(publicKeyBase32Out, 53, address.key, 32);
-- Address_printIp(addressOut, &address);
-+ Address_printShortIp(addressOut, &address);
- printf( "Input privkey: %s\n"
- "Matching pubkey: %s.k\n"
- "Resulting address: %s\n"
-diff --git a/contrib/c/publictoip6.c b/contrib/c/publictoip6.c
-index fc92f7e..99afc4c 100644
---- a/contrib/c/publictoip6.c
-+++ b/contrib/c/publictoip6.c
-@@ -48,7 +48,7 @@ int main(int argc, char** argv)
- }
-
- uint8_t output[40] = {0};
-- AddrTools_printIp(output, ip6Bytes);
-+ AddrTools_printShortIp(output, ip6Bytes);
- printf("%s\n", output);
- return 0;
- }
-diff --git a/dht/Address.c b/dht/Address.c
-index e4c2dba..ba77cad 100644
---- a/dht/Address.c
-+++ b/dht/Address.c
-@@ -102,6 +102,12 @@ void Address_printIp(uint8_t output[40], struct Address* addr)
- AddrTools_printIp(output, addr->ip6.bytes);
- }
-
-+void Address_printShortIp(uint8_t output[40], struct Address* addr)
-+{
-+ Address_getPrefix(addr);
-+ AddrTools_printShortIp(output, addr->ip6.bytes);
-+}
-+
- void Address_print(uint8_t output[60], struct Address* addr)
- {
- Address_printIp(output, addr);
-diff --git a/dht/Address.h b/dht/Address.h
-index 43c6f05..f200b40 100644
---- a/dht/Address.h
-+++ b/dht/Address.h
-@@ -94,6 +94,8 @@ void Address_forKey(struct Address* out, const uint8_t key[Address_KEY_SIZE]);
-
- void Address_printIp(uint8_t output[40], struct Address* addr);
-
-+void Address_printShortIp(uint8_t output[40], struct Address* addr);
-+
- void Address_print(uint8_t output[60], struct Address* addr);
-
- String* Address_toString(struct Address* addr, struct Allocator* alloc);
-diff --git a/net/Ducttape.c b/net/Ducttape.c
-index 84597d0..1813f3f 100644
---- a/net/Ducttape.c
-+++ b/net/Ducttape.c
-@@ -227,7 +227,7 @@ static inline bool isRouterTraffic(struct Message* message, struct Headers_IP6He
- #define debugHandles(logger, session, message, ...) \
- do { \
- uint8_t ip[40]; \
-- AddrTools_printIp(ip, session->ip6); \
-+ AddrTools_printIp(ip, session->ip6); \
- Log_debug(logger, "ver[%u] send[%d] recv[%u] ip[%s] " message, \
- session->version, \
- Endian_hostToBigEndian32(session->sendHandle_be), \
-@@ -271,10 +271,10 @@ static inline uint8_t incomingForMe(struct Message* message,
- if (Bits_memcmp(addr.ip6.bytes, dtHeader->ip6Header->sourceAddr, 16)) {
- #ifdef Log_DEBUG
- uint8_t keyAddr[40];
-- Address_printIp(keyAddr, &addr);
-+ Address_printShortIp(keyAddr, &addr);
- Bits_memcpyConst(addr.ip6.bytes, dtHeader->ip6Header->sourceAddr, 16);
- uint8_t srcAddr[40];
-- Address_printIp(srcAddr, &addr);
-+ Address_printShortIp(srcAddr, &addr);
- Log_debug(context->logger,
- "DROP packet because source address is not same as key.\n"
- " %s source addr\n"
-@@ -292,7 +292,7 @@ static inline uint8_t incomingForMe(struct Message* message,
- if (Checksum_udpIp6(dtHeader->ip6Header->sourceAddr, (uint8_t*)uh, message->length)) {
- #ifdef Log_DEBUG
- uint8_t keyAddr[40];
-- Address_printIp(keyAddr, &addr);
-+ Address_printShortIp(keyAddr, &addr);
- Log_debug(context->logger,
- "DROP Router packet with incorrect checksum, from [%s]", keyAddr);
- #endif
-@@ -708,7 +708,7 @@ static inline int core(struct Message* message,
- struct Address destination;
- Bits_memcpyConst(destination.ip6.bytes, ip6Header->destinationAddr, 16);
- uint8_t ipAddr[40];
-- Address_printIp(ipAddr, &destination);
-+ Address_printShortIp(ipAddr, &destination);
- Log_debug(context->logger, "Forwarding data to %s via %s\n", ipAddr, nhAddr);
- #endif */
- } else {
-@@ -723,7 +723,7 @@ static inline int core(struct Message* message,
- struct Address destination;
- Bits_memcpyConst(destination.ip6.bytes, ip6Header->destinationAddr, 16);
- uint8_t ipAddr[40];
-- Address_printIp(ipAddr, &destination);
-+ Address_printShortIp(ipAddr, &destination);
- Log_info(context->logger, "DROP message because this node is the closest known "
- "node to the destination %s.", ipAddr);
- #endif
-diff --git a/test/printIp_test.c b/test/printIp_test.c
-new file mode 100644
-index 0000000..75d7427
---- /dev/null
-+++ b/test/printIp_test.c
-@@ -0,0 +1,54 @@
-+/* vim: set expandtab ts=4 sw=4: */
-+/*
-+ * You may redistribute this program and/or modify it under the terms of
-+ * the GNU General Public License as published by the Free Software Foundation,
-+ * either version 3 of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program. If not, see .
-+ */
-+
-+#include "crypto/random/Random.h"
-+#include "memory/MallocAllocator.h"
-+#include "util/AddrTools.h"
-+#include "util/Assert.h"
-+
-+#include
-+
-+int main()
-+{
-+ struct Allocator* alloc = MallocAllocator_new(1<<22);
-+ struct Random* rand = Random_new(alloc, NULL, NULL);
-+
-+ uint8_t ip[16];
-+ uint8_t printedIp[40];
-+ uint8_t printedShortIp[40];
-+ uint8_t ipFromFull[16];
-+ uint8_t ipFromShort[16];
-+
-+ for (int i = 0; i < 1024; ++i) {
-+ Random_bytes(rand, ip, 16);
-+
-+ for (int j = 0; j < 16; j++) {
-+ // make the random result have lots of zeros since that's what we're looking for.
-+ ip[j] = (ip[j] % 2) ? 0 : ip[j];
-+ }
-+
-+ AddrTools_printIp(printedIp, ip);
-+ AddrTools_printShortIp(printedShortIp, ip);
-+ //printf("%s\n%s\n\n", printedIp, printedShortIp);
-+
-+ AddrTools_parseIp(ipFromFull, printedIp);
-+ AddrTools_parseIp(ipFromShort, printedShortIp);
-+
-+ Assert_true(0 == Bits_memcmp(ip, ipFromFull, 16));
-+ Assert_true(0 == Bits_memcmp(ipFromFull, ipFromShort, 16));
-+ }
-+
-+ return 0;
-+}
-diff --git a/util/AddrTools.h b/util/AddrTools.h
-index 858ced4..d59544d 100644
---- a/util/AddrTools.h
-+++ b/util/AddrTools.h
-@@ -143,6 +143,44 @@ static inline void AddrTools_printIp(uint8_t output[40], const uint8_t binIp[16]
- output[39] = '\0';
- }
-
-+static inline void AddrTools_printShortIp(uint8_t output[40], const uint8_t binIp[16])
-+{
-+ /* The chances of hitting :0:0: and breaking
-+ * RFC5952 are 1 in (1 / (2^16))^2 * 6.
-+ * E. Siler
-+ */
-+
-+ char *p = output;
-+ int i = 0;
-+ for (; i < 16;) {
-+ if ((size_t)p != (size_t)output) {
-+ *p++= ':';
-+ }
-+
-+ if (binIp[i] > 0x0F) {
-+ Hex_encode(p, 2, &binIp[i++], 1);
-+ p += 2;
-+ } else if (binIp[i] > 0x00) {
-+ *p++ = Hex_encodeLowNibble(binIp[i++]);
-+ } else {
-+ ++i;
-+ if (binIp[i] > 0x0F) {
-+ Hex_encode(p, 2, &binIp[i++], 1);
-+ p += 2;
-+ } else {
-+ *p++ = Hex_encodeLowNibble(binIp[i++]);
-+ }
-+ continue;
-+ }
-+ Hex_encode(p, 2, &binIp[i++], 1);
-+ p += 2;
-+ }
-+ *p = '\0';
-+
-+ Assert_true((size_t)p <= ((size_t)output + 40));
-+ Assert_true(i <= 16);
-+}
-+
- /**
- * Parse out an address.
- *
-diff --git a/util/Hex.c b/util/Hex.c
-index e3e3c4d..b9bce57 100644
---- a/util/Hex.c
-+++ b/util/Hex.c
-@@ -29,6 +29,8 @@ static const uint8_t numForAscii[] =
- 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
- };
-
-+static const char* hexEntities = "0123456789abcdef";
-+
- int Hex_encode(uint8_t* output,
- const uint32_t outputLength,
- const uint8_t* in,
-@@ -40,8 +42,6 @@ int Hex_encode(uint8_t* output,
- output[inputLength * 2] = '\0';
- }
-
-- static const char* hexEntities = "0123456789abcdef";
--
- for (uint32_t i = 0; i < inputLength; i++) {
- output[i * 2] = hexEntities[in[i] >> 4];
- output[i * 2 + 1] = hexEntities[in[i] & 15];
-@@ -88,3 +88,8 @@ int Hex_decode(uint8_t* output,
-
- return length / 2;
- }
-+
-+uint8_t Hex_encodeLowNibble(const uint8_t nibble)
-+{
-+ return hexEntities[nibble & 15];
-+}
-diff --git a/util/Hex.h b/util/Hex.h
-index 4570c3e..a12e402 100644
---- a/util/Hex.h
-+++ b/util/Hex.h
-@@ -41,4 +41,6 @@ bool Hex_isHexEntity(const uint8_t character);
-
- int Hex_decodeByte(const uint8_t highNibble, const uint8_t lowNibble);
-
-+uint8_t Hex_encodeLowNibble(const uint8_t nibble);
-+
- #endif