From 46ee427ee33c8a727a9bb838b5d5961145d917c3 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 21 May 2020 21:54:00 -0400 Subject: [PATCH] common header for repliable datagrams --- libi2pd/Datagram.cpp | 23 +++++++++-------------- libi2pd/Datagram.h | 2 ++ 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/libi2pd/Datagram.cpp b/libi2pd/Datagram.cpp index 08cd86bf..6441b5e2 100644 --- a/libi2pd/Datagram.cpp +++ b/libi2pd/Datagram.cpp @@ -1,5 +1,4 @@ #include -#include #include "Crypto.h" #include "Log.h" #include "TunnelBase.h" @@ -14,6 +13,10 @@ namespace datagram DatagramDestination::DatagramDestination (std::shared_ptr owner, bool gzip): m_Owner (owner), m_Receiver (nullptr), m_RawReceiver (nullptr), m_Gzip (gzip) { + auto identityLen = m_Owner->GetIdentity ()->GetFullLen (); + m_From.resize (identityLen); + m_Owner->GetIdentity ()->ToBuffer (m_From.data (), identityLen); + m_Signature.resize (m_Owner->GetIdentity ()->GetSignatureLen ()); } DatagramDestination::~DatagramDestination () @@ -23,26 +26,18 @@ namespace datagram void DatagramDestination::SendDatagramTo(const uint8_t * payload, size_t len, const i2p::data::IdentHash & identity, uint16_t fromPort, uint16_t toPort) { - auto owner = m_Owner; - auto localIdentity = m_Owner->GetIdentity (); - auto identityLen = localIdentity->GetFullLen (); - auto signatureLen = localIdentity->GetSignatureLen (); - size_t headerLen = identityLen + signatureLen; - - std::vector header(headerLen); - localIdentity->ToBuffer (header.data (), identityLen); - uint8_t * signature = header.data () + identityLen; - if (localIdentity->GetSigningKeyType () == i2p::data::SIGNING_KEY_TYPE_DSA_SHA1) + if (m_Owner->GetIdentity ()->GetSigningKeyType () == i2p::data::SIGNING_KEY_TYPE_DSA_SHA1) { uint8_t hash[32]; SHA256(payload, len, hash); - owner->Sign (hash, 32, signature); + m_Owner->Sign (hash, 32, m_Signature.data ()); } else - owner->Sign (payload, len, signature); + m_Owner->Sign (payload, len, m_Signature.data ()); auto session = ObtainSession(identity); - auto msg = CreateDataMessage ({{header.data (), headerLen}, {payload, len}}, fromPort, toPort, false, !session->IsRatchets ()); // datagram + auto msg = CreateDataMessage ({{m_From.data (), m_From.size ()}, {m_Signature.data (), m_Signature.size ()}, {payload, len}}, + fromPort, toPort, false, !session->IsRatchets ()); // datagram session->SendMsg(msg); } diff --git a/libi2pd/Datagram.h b/libi2pd/Datagram.h index 5fcaec3a..ea2a4e13 100644 --- a/libi2pd/Datagram.h +++ b/libi2pd/Datagram.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "Base.h" #include "Identity.h" #include "LeaseSet.h" @@ -154,6 +155,7 @@ namespace datagram i2p::data::GzipInflator m_Inflator; i2p::data::GzipDeflator m_Deflator; + std::vector m_From, m_Signature; }; } }