From 7ebf2f010c463bcb3ccf30b3efa4d0846eead255 Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 19 May 2020 19:03:12 -0400 Subject: [PATCH] shorter padding for optimal packet length --- libi2pd/ECIESX25519AEADRatchetSession.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/libi2pd/ECIESX25519AEADRatchetSession.cpp b/libi2pd/ECIESX25519AEADRatchetSession.cpp index 9781a70a..7b386d92 100644 --- a/libi2pd/ECIESX25519AEADRatchetSession.cpp +++ b/libi2pd/ECIESX25519AEADRatchetSession.cpp @@ -716,12 +716,18 @@ namespace garlic uint8_t paddingSize = 0; if (payloadLen) { - // don't create padding if we are close to optimal size - if (first || payloadLen + 19 <= ECIESX25519_OPTIMAL_PAYLOAD_SIZE || payloadLen > ECIESX25519_OPTIMAL_PAYLOAD_SIZE) - { + int delta = (int)ECIESX25519_OPTIMAL_PAYLOAD_SIZE - (int)payloadLen; + if (delta < 0 || delta > 3) // don't create padding if we are close to optimal size + { RAND_bytes (&paddingSize, 1); - paddingSize &= 0x0F; paddingSize++; // 1 - 16 - payloadLen += paddingSize + 3; + paddingSize &= 0x0F; // 0 - 15 + if (delta > 3) + { + delta -= 3; + if (paddingSize >= delta) paddingSize %= delta; + } + paddingSize++; + payloadLen += paddingSize + 3; } } std::vector v(payloadLen);