forked from wolfSSL/wolfssl
Merge pull request #5743 from SparkiDev/tls_perf_fix_forcezero
TLS performance fix: ForceZero minimization
This commit is contained in:
@ -9784,11 +9784,6 @@ retry:
|
|||||||
void ShrinkOutputBuffer(WOLFSSL* ssl)
|
void ShrinkOutputBuffer(WOLFSSL* ssl)
|
||||||
{
|
{
|
||||||
WOLFSSL_MSG("Shrinking output buffer");
|
WOLFSSL_MSG("Shrinking output buffer");
|
||||||
if (IsEncryptionOn(ssl, 0)) {
|
|
||||||
ForceZero(ssl->buffers.outputBuffer.buffer -
|
|
||||||
ssl->buffers.outputBuffer.offset,
|
|
||||||
ssl->buffers.outputBuffer.bufferSize);
|
|
||||||
}
|
|
||||||
XFREE(ssl->buffers.outputBuffer.buffer - ssl->buffers.outputBuffer.offset,
|
XFREE(ssl->buffers.outputBuffer.buffer - ssl->buffers.outputBuffer.offset,
|
||||||
ssl->heap, DYNAMIC_TYPE_OUT_BUFFER);
|
ssl->heap, DYNAMIC_TYPE_OUT_BUFFER);
|
||||||
ssl->buffers.outputBuffer.buffer = ssl->buffers.outputBuffer.staticBuffer;
|
ssl->buffers.outputBuffer.buffer = ssl->buffers.outputBuffer.staticBuffer;
|
||||||
@ -9819,11 +9814,9 @@ void ShrinkInputBuffer(WOLFSSL* ssl, int forcedFree)
|
|||||||
usedLength);
|
usedLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsEncryptionOn(ssl, 1) || forcedFree) {
|
ForceZero(ssl->buffers.inputBuffer.buffer -
|
||||||
ForceZero(ssl->buffers.inputBuffer.buffer -
|
ssl->buffers.inputBuffer.offset,
|
||||||
ssl->buffers.inputBuffer.offset,
|
ssl->buffers.inputBuffer.bufferSize);
|
||||||
ssl->buffers.inputBuffer.bufferSize);
|
|
||||||
}
|
|
||||||
XFREE(ssl->buffers.inputBuffer.buffer - ssl->buffers.inputBuffer.offset,
|
XFREE(ssl->buffers.inputBuffer.buffer - ssl->buffers.inputBuffer.offset,
|
||||||
ssl->heap, DYNAMIC_TYPE_IN_BUFFER);
|
ssl->heap, DYNAMIC_TYPE_IN_BUFFER);
|
||||||
ssl->buffers.inputBuffer.buffer = ssl->buffers.inputBuffer.staticBuffer;
|
ssl->buffers.inputBuffer.buffer = ssl->buffers.inputBuffer.staticBuffer;
|
||||||
@ -9968,11 +9961,6 @@ static WC_INLINE int GrowOutputBuffer(WOLFSSL* ssl, int size)
|
|||||||
ssl->buffers.outputBuffer.length);
|
ssl->buffers.outputBuffer.length);
|
||||||
|
|
||||||
if (ssl->buffers.outputBuffer.dynamicFlag) {
|
if (ssl->buffers.outputBuffer.dynamicFlag) {
|
||||||
if (IsEncryptionOn(ssl, 0)) {
|
|
||||||
ForceZero(ssl->buffers.outputBuffer.buffer -
|
|
||||||
ssl->buffers.outputBuffer.offset,
|
|
||||||
ssl->buffers.outputBuffer.bufferSize);
|
|
||||||
}
|
|
||||||
XFREE(ssl->buffers.outputBuffer.buffer -
|
XFREE(ssl->buffers.outputBuffer.buffer -
|
||||||
ssl->buffers.outputBuffer.offset, ssl->heap,
|
ssl->buffers.outputBuffer.offset, ssl->heap,
|
||||||
DYNAMIC_TYPE_OUT_BUFFER);
|
DYNAMIC_TYPE_OUT_BUFFER);
|
||||||
@ -20819,8 +20807,17 @@ int BuildMessage(WOLFSSL* ssl, byte* output, int outSz, const byte* input,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0) {
|
||||||
|
#ifdef WOLFSSL_ASYNC_CRYPT
|
||||||
|
if (ret != WC_PENDING_E)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
/* Zeroize plaintext. */
|
||||||
|
ForceZero(output + args->headerSz,
|
||||||
|
(word16)(args->size - args->digestSz));
|
||||||
|
}
|
||||||
goto exit_buildmsg;
|
goto exit_buildmsg;
|
||||||
|
}
|
||||||
ssl->options.buildMsgState = BUILD_MSG_ENCRYPTED_VERIFY_MAC;
|
ssl->options.buildMsgState = BUILD_MSG_ENCRYPTED_VERIFY_MAC;
|
||||||
}
|
}
|
||||||
FALL_THROUGH;
|
FALL_THROUGH;
|
||||||
|
@ -3008,6 +3008,15 @@ int BuildTls13Message(WOLFSSL* ssl, byte* output, int outSz, const byte* input,
|
|||||||
output += args->headerSz;
|
output += args->headerSz;
|
||||||
ret = EncryptTls13(ssl, output, output, args->size, aad,
|
ret = EncryptTls13(ssl, output, output, args->size, aad,
|
||||||
(word16)args->headerSz, asyncOkay);
|
(word16)args->headerSz, asyncOkay);
|
||||||
|
if (ret != 0) {
|
||||||
|
#ifdef WOLFSSL_ASYNC_CRYPT
|
||||||
|
if (ret != WC_PENDING_E)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
/* Zeroize plaintext. */
|
||||||
|
ForceZero(output, args->size);
|
||||||
|
}
|
||||||
|
}
|
||||||
#ifdef WOLFSSL_DTLS13
|
#ifdef WOLFSSL_DTLS13
|
||||||
if (ret == 0 && ssl->options.dtls) {
|
if (ret == 0 && ssl->options.dtls) {
|
||||||
/* AAD points to the header. Reuse the variable */
|
/* AAD points to the header. Reuse the variable */
|
||||||
|
@ -1161,6 +1161,8 @@ static int GeneratePrivateDh186(DhKey* key, WC_RNG* rng, byte* priv,
|
|||||||
ForceZero(cBuf, cSz);
|
ForceZero(cBuf, cSz);
|
||||||
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
XFREE(cBuf, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(cBuf, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#elif defined(WOLFSSL_CHECK_MEM_ZERO)
|
||||||
|
wc_MemZero_Check(cBuf, cSz);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* tmpQ: M = min(2^N,q) - 1 */
|
/* tmpQ: M = min(2^N,q) - 1 */
|
||||||
|
@ -4687,7 +4687,7 @@ void sp_forcezero(sp_int* a)
|
|||||||
{
|
{
|
||||||
if (a != NULL) {
|
if (a != NULL) {
|
||||||
/* Ensure all data zeroized - data not zeroed when used decreases. */
|
/* Ensure all data zeroized - data not zeroed when used decreases. */
|
||||||
ForceZero(a->dp, a->used * sizeof(sp_int_digit));
|
ForceZero(a->dp, a->size * sizeof(sp_int_digit));
|
||||||
_sp_zero(a);
|
_sp_zero(a);
|
||||||
#ifdef HAVE_WOLF_BIGINT
|
#ifdef HAVE_WOLF_BIGINT
|
||||||
wc_bigint_zero(&a->raw);
|
wc_bigint_zero(&a->raw);
|
||||||
|
Reference in New Issue
Block a user