different tunnel build record size

pull/1677/head
orignal 3 years ago
parent 59dd60f5cb
commit d47bf1bada

@ -42,10 +42,11 @@ namespace tunnel
void Tunnel::Build (uint32_t replyMsgID, std::shared_ptr<OutboundTunnel> outboundTunnel)
{
auto numHops = m_Config->GetNumHops ();
int numRecords = numHops <= STANDARD_NUM_RECORDS ? STANDARD_NUM_RECORDS : MAX_NUM_RECORDS;
const int numRecords = numHops <= STANDARD_NUM_RECORDS ? STANDARD_NUM_RECORDS : MAX_NUM_RECORDS;
auto msg = numRecords <= STANDARD_NUM_RECORDS ? NewI2NPShortMessage () : NewI2NPMessage ();
*msg->GetPayload () = numRecords;
msg->len += numRecords*TUNNEL_BUILD_RECORD_SIZE + 1;
const size_t recordSize = m_Config->IsShort () ? SHORT_TUNNEL_BUILD_RECORD_SIZE : TUNNEL_BUILD_RECORD_SIZE;
msg->len += numRecords*recordSize + 1;
// shuffle records
std::vector<int> recordIndicies;
for (int i = 0; i < numRecords; i++) recordIndicies.push_back(i);
@ -70,7 +71,7 @@ namespace tunnel
for (int i = numHops; i < numRecords; i++)
{
int idx = recordIndicies[i];
RAND_bytes (records + idx*TUNNEL_BUILD_RECORD_SIZE, TUNNEL_BUILD_RECORD_SIZE);
RAND_bytes (records + idx*recordSize, recordSize);
}
// decrypt real records

@ -115,6 +115,8 @@ namespace tunnel
}
}
bool IsShort () const { return m_IsShort; }
TunnelHopConfig * GetFirstHop () const
{
return m_FirstHop;
@ -193,10 +195,15 @@ namespace tunnel
for (const auto& it: peers)
{
TunnelHopConfig * hop;
if (it->GetCryptoKeyType () == i2p::data::CRYPTO_KEY_TYPE_ECIES_X25519_AEAD)
hop = new LongECIESTunnelHopConfig (it);
if (m_IsShort)
hop = new ShortECIESTunnelHopConfig (it);
else
hop = new ElGamalTunnelHopConfig (it);
{
if (it->GetCryptoKeyType () == i2p::data::CRYPTO_KEY_TYPE_ECIES_X25519_AEAD)
hop = new LongECIESTunnelHopConfig (it);
else
hop = new ElGamalTunnelHopConfig (it);
}
if (prev)
prev->SetNext (hop);
else
@ -209,6 +216,7 @@ namespace tunnel
private:
TunnelHopConfig * m_FirstHop, * m_LastHop;
bool m_IsShort = false;
};
class ZeroHopsTunnelConfig: public TunnelConfig

Loading…
Cancel
Save