diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 960db401..ee20aed6 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -31,7 +31,7 @@ namespace data m_Buffer = new uint8_t[MAX_RI_BUFFER_SIZE]; memcpy (m_Buffer, buf, len); m_BufferLen = len; - ReadFromBuffer (); + ReadFromBuffer (true); } RouterInfo::~RouterInfo () @@ -51,7 +51,7 @@ namespace data m_Properties.clear (); memcpy (m_Buffer, buf, len); m_BufferLen = len; - ReadFromBuffer (); + ReadFromBuffer (true); // don't delete buffer until save to file } @@ -90,21 +90,24 @@ namespace data void RouterInfo::ReadFromFile () { if (LoadFile ()) - ReadFromBuffer (); + ReadFromBuffer (false); } - void RouterInfo::ReadFromBuffer () + void RouterInfo::ReadFromBuffer (bool verifySignature) { std::stringstream str (std::string ((char *)m_Buffer, m_BufferLen)); ReadFromStream (str); - // verify signature - CryptoPP::DSA::PublicKey pubKey; - pubKey.Initialize (i2p::crypto::dsap, i2p::crypto::dsaq, i2p::crypto::dsag, CryptoPP::Integer (m_RouterIdentity.signingKey, 128)); - CryptoPP::DSA::Verifier verifier (pubKey); - int l = m_BufferLen - 40; - if (!verifier.VerifyMessage ((uint8_t *)m_Buffer, l, (uint8_t *)m_Buffer + l, 40)) + if (verifySignature) { - LogPrint ("signature verification failed"); + // verify signature + CryptoPP::DSA::PublicKey pubKey; + pubKey.Initialize (i2p::crypto::dsap, i2p::crypto::dsaq, i2p::crypto::dsag, CryptoPP::Integer (m_RouterIdentity.signingKey, 128)); + CryptoPP::DSA::Verifier verifier (pubKey); + int l = m_BufferLen - 40; + if (!verifier.VerifyMessage ((uint8_t *)m_Buffer, l, (uint8_t *)m_Buffer + l, 40)) + { + LogPrint ("signature verification failed"); + } } } diff --git a/RouterInfo.h b/RouterInfo.h index d5d775b1..0ea62342 100644 --- a/RouterInfo.h +++ b/RouterInfo.h @@ -147,7 +147,7 @@ namespace data bool LoadFile (); void ReadFromFile (); void ReadFromStream (std::istream& s); - void ReadFromBuffer (); + void ReadFromBuffer (bool verifySignature); void WriteToStream (std::ostream& s); size_t ReadString (char * str, std::istream& s); void WriteString (const std::string& str, std::ostream& s);