|
|
@ -42,10 +42,11 @@ namespace tunnel |
|
|
|
void Tunnel::Build (uint32_t replyMsgID, std::shared_ptr<OutboundTunnel> outboundTunnel) |
|
|
|
void Tunnel::Build (uint32_t replyMsgID, std::shared_ptr<OutboundTunnel> outboundTunnel) |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto numHops = m_Config->GetNumHops (); |
|
|
|
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 (); |
|
|
|
auto msg = numRecords <= STANDARD_NUM_RECORDS ? NewI2NPShortMessage () : NewI2NPMessage (); |
|
|
|
*msg->GetPayload () = numRecords; |
|
|
|
*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
|
|
|
|
// shuffle records
|
|
|
|
std::vector<int> recordIndicies; |
|
|
|
std::vector<int> recordIndicies; |
|
|
|
for (int i = 0; i < numRecords; i++) recordIndicies.push_back(i); |
|
|
|
for (int i = 0; i < numRecords; i++) recordIndicies.push_back(i); |
|
|
@ -70,7 +71,7 @@ namespace tunnel |
|
|
|
for (int i = numHops; i < numRecords; i++) |
|
|
|
for (int i = numHops; i < numRecords; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int idx = recordIndicies[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
|
|
|
|
// decrypt real records
|
|
|
|