mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 21:37:17 +01:00
moved transient encryption keys to LeaseSetDestination
This commit is contained in:
parent
fc25da37c5
commit
3d6c93cd6b
|
@ -130,6 +130,10 @@ namespace client
|
||||||
if (!m_IsRunning)
|
if (!m_IsRunning)
|
||||||
{
|
{
|
||||||
m_IsRunning = true;
|
m_IsRunning = true;
|
||||||
|
if (m_IsPublic)
|
||||||
|
PersistTemporaryKeys ();
|
||||||
|
else
|
||||||
|
i2p::crypto::GenerateElGamalKeyPair(m_EncryptionPrivateKey, m_EncryptionPublicKey);
|
||||||
m_Pool->SetLocalDestination (shared_from_this ());
|
m_Pool->SetLocalDestination (shared_from_this ());
|
||||||
m_Pool->SetActive (true);
|
m_Pool->SetActive (true);
|
||||||
m_Thread = new std::thread (std::bind (&LeaseSetDestination::Run, shared_from_this ()));
|
m_Thread = new std::thread (std::bind (&LeaseSetDestination::Run, shared_from_this ()));
|
||||||
|
@ -640,14 +644,34 @@ namespace client
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LeaseSetDestination::PersistTemporaryKeys ()
|
||||||
|
{
|
||||||
|
std::string ident = GetIdentHash().ToBase32();
|
||||||
|
std::string path = i2p::fs::DataDirPath("destinations", (ident + ".dat"));
|
||||||
|
std::ifstream f(path, std::ifstream::binary);
|
||||||
|
|
||||||
|
if (f) {
|
||||||
|
f.read ((char *)m_EncryptionPublicKey, 256);
|
||||||
|
f.read ((char *)m_EncryptionPrivateKey, 256);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LogPrint (eLogInfo, "Destination: Creating new temporary keys for address ", ident, ".b32.i2p");
|
||||||
|
i2p::crypto::GenerateElGamalKeyPair(m_EncryptionPrivateKey, m_EncryptionPublicKey);
|
||||||
|
|
||||||
|
std::ofstream f1 (path, std::ofstream::binary | std::ofstream::out);
|
||||||
|
if (f1) {
|
||||||
|
f1.write ((char *)m_EncryptionPublicKey, 256);
|
||||||
|
f1.write ((char *)m_EncryptionPrivateKey, 256);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
LogPrint(eLogError, "Destinations: Can't save keys to ", path);
|
||||||
|
}
|
||||||
|
|
||||||
ClientDestination::ClientDestination (const i2p::data::PrivateKeys& keys, bool isPublic, const std::map<std::string, std::string> * params):
|
ClientDestination::ClientDestination (const i2p::data::PrivateKeys& keys, bool isPublic, const std::map<std::string, std::string> * params):
|
||||||
LeaseSetDestination (isPublic, params),
|
LeaseSetDestination (isPublic, params),
|
||||||
m_Keys (keys), m_DatagramDestination (nullptr)
|
m_Keys (keys), m_DatagramDestination (nullptr)
|
||||||
{
|
{
|
||||||
if (isPublic)
|
|
||||||
PersistTemporaryKeys ();
|
|
||||||
else
|
|
||||||
i2p::crypto::GenerateElGamalKeyPair(m_EncryptionPrivateKey, m_EncryptionPublicKey);
|
|
||||||
if (isPublic)
|
if (isPublic)
|
||||||
LogPrint (eLogInfo, "Destination: Local address ", GetIdentHash().ToBase32 (), " created");
|
LogPrint (eLogInfo, "Destination: Local address ", GetIdentHash().ToBase32 (), " created");
|
||||||
}
|
}
|
||||||
|
@ -803,30 +827,6 @@ namespace client
|
||||||
return m_DatagramDestination;
|
return m_DatagramDestination;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientDestination::PersistTemporaryKeys ()
|
|
||||||
{
|
|
||||||
std::string ident = GetIdentHash().ToBase32();
|
|
||||||
std::string path = i2p::fs::DataDirPath("destinations", (ident + ".dat"));
|
|
||||||
std::ifstream f(path, std::ifstream::binary);
|
|
||||||
|
|
||||||
if (f) {
|
|
||||||
f.read ((char *)m_EncryptionPublicKey, 256);
|
|
||||||
f.read ((char *)m_EncryptionPrivateKey, 256);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LogPrint (eLogInfo, "Destination: Creating new temporary keys for address ", ident, ".b32.i2p");
|
|
||||||
i2p::crypto::GenerateElGamalKeyPair(m_EncryptionPrivateKey, m_EncryptionPublicKey);
|
|
||||||
|
|
||||||
std::ofstream f1 (path, std::ofstream::binary | std::ofstream::out);
|
|
||||||
if (f1) {
|
|
||||||
f1.write ((char *)m_EncryptionPublicKey, 256);
|
|
||||||
f1.write ((char *)m_EncryptionPrivateKey, 256);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
LogPrint(eLogError, "Destinations: Can't save keys to ", path);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<std::shared_ptr<const i2p::stream::Stream> > ClientDestination::GetAllStreams () const
|
std::vector<std::shared_ptr<const i2p::stream::Stream> > ClientDestination::GetAllStreams () const
|
||||||
{
|
{
|
||||||
std::vector<std::shared_ptr<const i2p::stream::Stream> > ret;
|
std::vector<std::shared_ptr<const i2p::stream::Stream> > ret;
|
||||||
|
|
|
@ -81,6 +81,10 @@ namespace client
|
||||||
bool RequestDestination (const i2p::data::IdentHash& dest, RequestComplete requestComplete = nullptr);
|
bool RequestDestination (const i2p::data::IdentHash& dest, RequestComplete requestComplete = nullptr);
|
||||||
void CancelDestinationRequest (const i2p::data::IdentHash& dest);
|
void CancelDestinationRequest (const i2p::data::IdentHash& dest);
|
||||||
|
|
||||||
|
// implements LocalDestination
|
||||||
|
const uint8_t * GetEncryptionPrivateKey () const { return m_EncryptionPrivateKey; };
|
||||||
|
const uint8_t * GetEncryptionPublicKey () const { return m_EncryptionPublicKey; };
|
||||||
|
|
||||||
// implements GarlicDestination
|
// implements GarlicDestination
|
||||||
std::shared_ptr<const i2p::data::LocalLeaseSet> GetLeaseSet ();
|
std::shared_ptr<const i2p::data::LocalLeaseSet> GetLeaseSet ();
|
||||||
std::shared_ptr<i2p::tunnel::TunnelPool> GetTunnelPool () const { return m_Pool; }
|
std::shared_ptr<i2p::tunnel::TunnelPool> GetTunnelPool () const { return m_Pool; }
|
||||||
|
@ -114,8 +118,12 @@ namespace client
|
||||||
void HandleCleanupTimer (const boost::system::error_code& ecode);
|
void HandleCleanupTimer (const boost::system::error_code& ecode);
|
||||||
void CleanupRemoteLeaseSets ();
|
void CleanupRemoteLeaseSets ();
|
||||||
|
|
||||||
|
void PersistTemporaryKeys ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
uint8_t m_EncryptionPublicKey[256], m_EncryptionPrivateKey[256];
|
||||||
|
|
||||||
volatile bool m_IsRunning;
|
volatile bool m_IsRunning;
|
||||||
std::thread * m_Thread;
|
std::thread * m_Thread;
|
||||||
boost::asio::io_service m_Service;
|
boost::asio::io_service m_Service;
|
||||||
|
@ -165,8 +173,6 @@ namespace client
|
||||||
|
|
||||||
// implements LocalDestination
|
// implements LocalDestination
|
||||||
std::shared_ptr<const i2p::data::IdentityEx> GetIdentity () const { return m_Keys.GetPublic (); };
|
std::shared_ptr<const i2p::data::IdentityEx> GetIdentity () const { return m_Keys.GetPublic (); };
|
||||||
const uint8_t * GetEncryptionPrivateKey () const { return m_EncryptionPrivateKey; };
|
|
||||||
const uint8_t * GetEncryptionPublicKey () const { return m_EncryptionPublicKey; };
|
|
||||||
void Sign (const uint8_t * buf, int len, uint8_t * signature) const { m_Keys.Sign (buf, len, signature); };
|
void Sign (const uint8_t * buf, int len, uint8_t * signature) const { m_Keys.Sign (buf, len, signature); };
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -176,14 +182,12 @@ namespace client
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void PersistTemporaryKeys ();
|
|
||||||
std::shared_ptr<ClientDestination> GetSharedFromThis ()
|
std::shared_ptr<ClientDestination> GetSharedFromThis ()
|
||||||
{ return std::static_pointer_cast<ClientDestination>(shared_from_this ()); }
|
{ return std::static_pointer_cast<ClientDestination>(shared_from_this ()); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
i2p::data::PrivateKeys m_Keys;
|
i2p::data::PrivateKeys m_Keys;
|
||||||
uint8_t m_EncryptionPublicKey[256], m_EncryptionPrivateKey[256];
|
|
||||||
|
|
||||||
std::shared_ptr<i2p::stream::StreamingDestination> m_StreamingDestination; // default
|
std::shared_ptr<i2p::stream::StreamingDestination> m_StreamingDestination; // default
|
||||||
std::map<uint16_t, std::shared_ptr<i2p::stream::StreamingDestination> > m_StreamingDestinationsByPorts;
|
std::map<uint16_t, std::shared_ptr<i2p::stream::StreamingDestination> > m_StreamingDestinationsByPorts;
|
||||||
|
|
Loading…
Reference in a new issue