From a92652f4ad4722fb249bf24c45d70a9a0b391694 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Thu, 24 Nov 2016 10:11:46 -0500 Subject: [PATCH 1/3] add ifname4 and ifname6 options --- Config.cpp | 6 ++++-- RouterContext.cpp | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Config.cpp b/Config.cpp index d8dd6a27..6f4014ba 100644 --- a/Config.cpp +++ b/Config.cpp @@ -41,6 +41,8 @@ namespace config { ("datadir", value()->default_value(""), "Path to storage of i2pd data (RI, keys, peer profiles, ...)") ("host", value()->default_value("0.0.0.0"), "External IP") ("ifname", value()->default_value(""), "Network interface to bind to") + ("ifname4", value()->default_value(""), "Network interface to bind to for ipv4") + ("ifname6", value()->default_value(""), "Network interface to bind to for ipv6") ("nat", value()->zero_tokens()->default_value(true), "Should we assume we are behind NAT?") ("port", value()->default_value(0), "Port to listen for incoming connections (default: auto)") ("ipv4", value()->zero_tokens()->default_value(true), "Enable communication through ipv4") @@ -59,7 +61,7 @@ namespace config { ("close", value()->default_value("ask"), "Action on close: minimize, exit, ask") // TODO: add custom validator or something #endif ; - + options_description limits("Limits options"); limits.add_options() ("limits.coresize", value()->default_value(0), "Maximum size of corefile in Kb (0 - use system limit)") @@ -192,7 +194,7 @@ namespace config { ("trust.family", value()->default_value(""), "Router Familiy to trust for first hops") ("trust.routers", value()->default_value(""), "Only Connect to these routers") ("trust.hidden", value()->default_value(false), "Should we hide our router from other routers?"); - + options_description websocket("Websocket Options"); websocket.add_options() ("websockets.enabled", value()->default_value(false), "enable websocket server") diff --git a/RouterContext.cpp b/RouterContext.cpp index 7847bef7..c1341a62 100644 --- a/RouterContext.cpp +++ b/RouterContext.cpp @@ -74,6 +74,22 @@ namespace i2p routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash ()); routerInfo.AddNTCPAddress (host.c_str(), port); } + + std::string ifname4; i2p::config::GetOption("ifname4", ifname4); + if(ifname4.size()) + { + std::string host = i2p::util::net::GetInterfaceAddress(ifname4, false).to_string(); + routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash()); + routerInfo.AddNTCPAddress (host.c_str(), port); + } + std::string ifname6; i2p::config::GetOption("ifname6", ifname6); + if (ifname6.size()) + { + std::string host = i2p::util::net::GetInterfaceAddress(ifname6, true).to_string(); + routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash()); + routerInfo.AddNTCPAddress (host.c_str(), port); + } + routerInfo.SetCaps (i2p::data::RouterInfo::eReachable | i2p::data::RouterInfo::eSSUTesting | i2p::data::RouterInfo::eSSUIntroducer); // LR, BC routerInfo.SetProperty ("netId", std::to_string (m_NetID)); From 50f0099645b043277426b2fb4eca119826f81760 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Thu, 24 Nov 2016 13:56:37 -0500 Subject: [PATCH 2/3] don't add multiple router addresses --- RouterContext.cpp | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/RouterContext.cpp b/RouterContext.cpp index c1341a62..3c37e88c 100644 --- a/RouterContext.cpp +++ b/RouterContext.cpp @@ -53,6 +53,8 @@ namespace i2p bool ipv6; i2p::config::GetOption("ipv6", ipv6); bool nat; i2p::config::GetOption("nat", nat); std::string ifname; i2p::config::GetOption("ifname", ifname); + std::string ifname4; i2p::config::GetOption("ifname4", ifname4); + std::string ifname6; i2p::config::GetOption("ifname6", ifname6); if (ipv4) { std::string host = "127.0.0.1"; @@ -61,6 +63,10 @@ namespace i2p else if (!nat && !ifname.empty()) /* bind to interface, we have no NAT so set external address too */ host = i2p::util::net::GetInterfaceAddress(ifname, false).to_string(); // v4 + + if(ifname4.size()) + host = i2p::util::net::GetInterfaceAddress(ifname4, false).to_string(); + routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash ()); routerInfo.AddNTCPAddress (host.c_str(), port); } @@ -71,24 +77,13 @@ namespace i2p i2p::config::GetOption("host", host); else if (!ifname.empty()) host = i2p::util::net::GetInterfaceAddress(ifname, true).to_string(); // v6 + + if(ifname6.size()) + host = i2p::util::net::GetInterfaceAddress(ifname6, true).to_string(); + routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash ()); routerInfo.AddNTCPAddress (host.c_str(), port); } - - std::string ifname4; i2p::config::GetOption("ifname4", ifname4); - if(ifname4.size()) - { - std::string host = i2p::util::net::GetInterfaceAddress(ifname4, false).to_string(); - routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash()); - routerInfo.AddNTCPAddress (host.c_str(), port); - } - std::string ifname6; i2p::config::GetOption("ifname6", ifname6); - if (ifname6.size()) - { - std::string host = i2p::util::net::GetInterfaceAddress(ifname6, true).to_string(); - routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash()); - routerInfo.AddNTCPAddress (host.c_str(), port); - } routerInfo.SetCaps (i2p::data::RouterInfo::eReachable | i2p::data::RouterInfo::eSSUTesting | i2p::data::RouterInfo::eSSUIntroducer); // LR, BC From d092b21da7c4a63b44b59a4ddd24e7ded7f6de63 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 24 Nov 2016 16:02:14 -0500 Subject: [PATCH 3/3] assume ElGamal data size as 222 bytes --- Crypto.cpp | 4 ++-- Crypto.h | 2 +- Garlic.cpp | 2 +- TunnelConfig.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Crypto.cpp b/Crypto.cpp index 54180677..91b0ad08 100644 --- a/Crypto.cpp +++ b/Crypto.cpp @@ -308,12 +308,12 @@ namespace crypto BN_free (b1); } - void ElGamalEncryption::Encrypt (const uint8_t * data, int len, uint8_t * encrypted, bool zeroPadding) const + void ElGamalEncryption::Encrypt (const uint8_t * data, uint8_t * encrypted, bool zeroPadding) const { // create m uint8_t m[255]; m[0] = 0xFF; - memcpy (m+33, data, len); + memcpy (m+33, data, 222); SHA256 (m+33, 222, m+1); // calculate b = b1*m mod p BIGNUM * b = BN_new (); diff --git a/Crypto.h b/Crypto.h index ee5f49ca..a04a93da 100644 --- a/Crypto.h +++ b/Crypto.h @@ -54,7 +54,7 @@ namespace crypto ElGamalEncryption (const uint8_t * key); ~ElGamalEncryption (); - void Encrypt (const uint8_t * data, int len, uint8_t * encrypted, bool zeroPadding = false) const; + void Encrypt (const uint8_t * data, uint8_t * encrypted, bool zeroPadding = false) const; private: diff --git a/Garlic.cpp b/Garlic.cpp index 94ca82eb..306ac816 100644 --- a/Garlic.cpp +++ b/Garlic.cpp @@ -188,7 +188,7 @@ namespace garlic RAND_bytes (elGamal.preIV, 32); // Pre-IV uint8_t iv[32]; // IV is first 16 bytes SHA256(elGamal.preIV, 32, iv); - m_ElGamalEncryption->Encrypt ((uint8_t *)&elGamal, sizeof(elGamal), buf, true); + m_ElGamalEncryption->Encrypt ((uint8_t *)&elGamal, buf, true); m_Encryption.SetIV (iv); buf += 514; len += 514; diff --git a/TunnelConfig.h b/TunnelConfig.h index 23417ed9..cb31243f 100644 --- a/TunnelConfig.h +++ b/TunnelConfig.h @@ -102,7 +102,7 @@ namespace tunnel htobe32buf (clearText + BUILD_REQUEST_RECORD_SEND_MSG_ID_OFFSET, replyMsgID); RAND_bytes (clearText + BUILD_REQUEST_RECORD_PADDING_OFFSET, BUILD_REQUEST_RECORD_CLEAR_TEXT_SIZE - BUILD_REQUEST_RECORD_PADDING_OFFSET); i2p::crypto::ElGamalEncryption elGamalEncryption (ident->GetEncryptionPublicKey ()); - elGamalEncryption.Encrypt (clearText, BUILD_REQUEST_RECORD_CLEAR_TEXT_SIZE, record + BUILD_REQUEST_RECORD_ENCRYPTED_OFFSET); + elGamalEncryption.Encrypt (clearText, record + BUILD_REQUEST_RECORD_ENCRYPTED_OFFSET); memcpy (record + BUILD_REQUEST_RECORD_TO_PEER_OFFSET, (const uint8_t *)ident->GetIdentHash (), 16); } };