mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 21:37:17 +01:00
RouterContext is always ECIES
This commit is contained in:
parent
76dca1b46b
commit
292fe94352
|
@ -528,11 +528,6 @@ namespace i2p
|
||||||
|
|
||||||
static void HandleShortTunnelBuildMsg (uint32_t replyMsgID, uint8_t * buf, size_t len)
|
static void HandleShortTunnelBuildMsg (uint32_t replyMsgID, uint8_t * buf, size_t len)
|
||||||
{
|
{
|
||||||
if (!i2p::context.IsECIES ())
|
|
||||||
{
|
|
||||||
LogPrint (eLogWarning, "I2NP: ShortTunnelBuild can be handled by ECIES router only");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int num = buf[0];
|
int num = buf[0];
|
||||||
LogPrint (eLogDebug, "I2NP: ShortTunnelBuild ", num, " records");
|
LogPrint (eLogDebug, "I2NP: ShortTunnelBuild ", num, " records");
|
||||||
if (len < num*SHORT_TUNNEL_BUILD_RECORD_SIZE + 1)
|
if (len < num*SHORT_TUNNEL_BUILD_RECORD_SIZE + 1)
|
||||||
|
|
|
@ -43,11 +43,8 @@ namespace i2p
|
||||||
m_Decryptor = m_Keys.CreateDecryptor (nullptr);
|
m_Decryptor = m_Keys.CreateDecryptor (nullptr);
|
||||||
m_TunnelDecryptor = m_Keys.CreateDecryptor (nullptr);
|
m_TunnelDecryptor = m_Keys.CreateDecryptor (nullptr);
|
||||||
UpdateRouterInfo ();
|
UpdateRouterInfo ();
|
||||||
if (IsECIES ())
|
i2p::crypto::InitNoiseNState (m_InitialNoiseState, GetIdentity ()->GetEncryptionPublicKey ());
|
||||||
{
|
m_ECIESSession = std::make_shared<i2p::garlic::RouterIncomingRatchetSession>(m_InitialNoiseState);
|
||||||
i2p::crypto::InitNoiseNState (m_InitialNoiseState, GetIdentity ()->GetEncryptionPublicKey ());
|
|
||||||
m_ECIESSession = std::make_shared<i2p::garlic::RouterIncomingRatchetSession>(m_InitialNoiseState);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterContext::CreateNewRouter ()
|
void RouterContext::CreateNewRouter ()
|
||||||
|
@ -833,27 +830,22 @@ namespace i2p
|
||||||
void RouterContext::ProcessGarlicMessage (std::shared_ptr<I2NPMessage> msg)
|
void RouterContext::ProcessGarlicMessage (std::shared_ptr<I2NPMessage> msg)
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_GarlicMutex);
|
std::unique_lock<std::mutex> l(m_GarlicMutex);
|
||||||
if (IsECIES ())
|
uint8_t * buf = msg->GetPayload ();
|
||||||
|
uint32_t len = bufbe32toh (buf);
|
||||||
|
if (len > msg->GetLength ())
|
||||||
{
|
{
|
||||||
uint8_t * buf = msg->GetPayload ();
|
LogPrint (eLogWarning, "Router: garlic message length ", len, " exceeds I2NP message length ", msg->GetLength ());
|
||||||
uint32_t len = bufbe32toh (buf);
|
return;
|
||||||
if (len > msg->GetLength ())
|
|
||||||
{
|
|
||||||
LogPrint (eLogWarning, "Router: garlic message length ", len, " exceeds I2NP message length ", msg->GetLength ());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
buf += 4;
|
|
||||||
if (!HandleECIESx25519TagMessage (buf, len)) // try tag first
|
|
||||||
{
|
|
||||||
// then Noise_N one-time decryption
|
|
||||||
if (m_ECIESSession)
|
|
||||||
m_ECIESSession->HandleNextMessage (buf, len);
|
|
||||||
else
|
|
||||||
LogPrint (eLogError, "Router: Session is not set for ECIES router");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
buf += 4;
|
||||||
i2p::garlic::GarlicDestination::ProcessGarlicMessage (msg);
|
if (!HandleECIESx25519TagMessage (buf, len)) // try tag first
|
||||||
|
{
|
||||||
|
// then Noise_N one-time decryption
|
||||||
|
if (m_ECIESSession)
|
||||||
|
m_ECIESSession->HandleNextMessage (buf, len);
|
||||||
|
else
|
||||||
|
LogPrint (eLogError, "Router: Session is not set for ECIES router");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterContext::ProcessDeliveryStatusMessage (std::shared_ptr<I2NPMessage> msg)
|
void RouterContext::ProcessDeliveryStatusMessage (std::shared_ptr<I2NPMessage> msg)
|
||||||
|
@ -885,13 +877,7 @@ namespace i2p
|
||||||
|
|
||||||
bool RouterContext::DecryptTunnelBuildRecord (const uint8_t * encrypted, uint8_t * data)
|
bool RouterContext::DecryptTunnelBuildRecord (const uint8_t * encrypted, uint8_t * data)
|
||||||
{
|
{
|
||||||
if (IsECIES ())
|
return DecryptECIESTunnelBuildRecord (encrypted, data, ECIES_BUILD_REQUEST_RECORD_CLEAR_TEXT_SIZE);
|
||||||
return DecryptECIESTunnelBuildRecord (encrypted, data, ECIES_BUILD_REQUEST_RECORD_CLEAR_TEXT_SIZE);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LogPrint (eLogError, "Router: Non-ECIES router is not longer supported");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RouterContext::DecryptECIESTunnelBuildRecord (const uint8_t * encrypted, uint8_t * data, size_t clearTextSize)
|
bool RouterContext::DecryptECIESTunnelBuildRecord (const uint8_t * encrypted, uint8_t * data, size_t clearTextSize)
|
||||||
|
@ -921,13 +907,7 @@ namespace i2p
|
||||||
|
|
||||||
bool RouterContext::DecryptTunnelShortRequestRecord (const uint8_t * encrypted, uint8_t * data)
|
bool RouterContext::DecryptTunnelShortRequestRecord (const uint8_t * encrypted, uint8_t * data)
|
||||||
{
|
{
|
||||||
if (IsECIES ())
|
return DecryptECIESTunnelBuildRecord (encrypted, data, SHORT_REQUEST_RECORD_CLEAR_TEXT_SIZE);
|
||||||
return DecryptECIESTunnelBuildRecord (encrypted, data, SHORT_REQUEST_RECORD_CLEAR_TEXT_SIZE);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LogPrint (eLogError, "Router: Can't decrypt short request record on non-ECIES router");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
i2p::crypto::X25519Keys& RouterContext::GetStaticKeys ()
|
i2p::crypto::X25519Keys& RouterContext::GetStaticKeys ()
|
||||||
|
|
|
@ -123,7 +123,6 @@ namespace garlic
|
||||||
void SetSupportsV6 (bool supportsV6);
|
void SetSupportsV6 (bool supportsV6);
|
||||||
void SetSupportsV4 (bool supportsV4);
|
void SetSupportsV4 (bool supportsV4);
|
||||||
void SetSupportsMesh (bool supportsmesh, const boost::asio::ip::address_v6& host);
|
void SetSupportsMesh (bool supportsmesh, const boost::asio::ip::address_v6& host);
|
||||||
bool IsECIES () const { return GetIdentity ()->GetCryptoKeyType () == i2p::data::CRYPTO_KEY_TYPE_ECIES_X25519_AEAD; };
|
|
||||||
i2p::crypto::NoiseSymmetricState& GetCurrentNoiseState () { return m_CurrentNoiseState; };
|
i2p::crypto::NoiseSymmetricState& GetCurrentNoiseState () { return m_CurrentNoiseState; };
|
||||||
|
|
||||||
void UpdateNTCP2V6Address (const boost::asio::ip::address& host); // called from Daemon. TODO: remove
|
void UpdateNTCP2V6Address (const boost::asio::ip::address& host); // called from Daemon. TODO: remove
|
||||||
|
|
Loading…
Reference in a new issue