fix issue between certificate fragmentation and secure renegotiation

This commit is contained in:
John Safranek
2015-08-18 21:00:17 -07:00
parent c1d663f22d
commit b0d90918f9

View File

@@ -7523,12 +7523,14 @@ int SendCertificate(WOLFSSL* ssl)
if (ssl->fragOffset == 0) { if (ssl->fragOffset == 0) {
if (!ssl->options.dtls) { if (!ssl->options.dtls) {
AddFragHeaders(output, fragSz, 0, payloadSz, certificate, ssl); AddFragHeaders(output, fragSz, 0, payloadSz, certificate, ssl);
if (!ssl->keys.encryptionOn)
HashOutputRaw(ssl, output + RECORD_HEADER_SZ, HashOutputRaw(ssl, output + RECORD_HEADER_SZ,
HANDSHAKE_HEADER_SZ); HANDSHAKE_HEADER_SZ);
} }
else { else {
#ifdef WOLFSSL_DTLS #ifdef WOLFSSL_DTLS
AddHeaders(output, payloadSz, certificate, ssl); AddHeaders(output, payloadSz, certificate, ssl);
if (!ssl->keys.encryptionOn)
HashOutputRaw(ssl, HashOutputRaw(ssl,
output + RECORD_HEADER_SZ + DTLS_RECORD_EXTRA, output + RECORD_HEADER_SZ + DTLS_RECORD_EXTRA,
HANDSHAKE_HEADER_SZ + DTLS_HANDSHAKE_EXTRA); HANDSHAKE_HEADER_SZ + DTLS_HANDSHAKE_EXTRA);
@@ -7543,21 +7545,24 @@ int SendCertificate(WOLFSSL* ssl)
/* list total */ /* list total */
c32to24(listSz, output + i); c32to24(listSz, output + i);
if (!ssl->keys.encryptionOn)
HashOutputRaw(ssl, output + i, CERT_HEADER_SZ); HashOutputRaw(ssl, output + i, CERT_HEADER_SZ);
i += CERT_HEADER_SZ; i += CERT_HEADER_SZ;
length -= CERT_HEADER_SZ; length -= CERT_HEADER_SZ;
fragSz -= CERT_HEADER_SZ; fragSz -= CERT_HEADER_SZ;
if (certSz) { if (certSz) {
c32to24(certSz, output + i); c32to24(certSz, output + i);
if (!ssl->keys.encryptionOn)
HashOutputRaw(ssl, output + i, CERT_HEADER_SZ); HashOutputRaw(ssl, output + i, CERT_HEADER_SZ);
i += CERT_HEADER_SZ; i += CERT_HEADER_SZ;
length -= CERT_HEADER_SZ; length -= CERT_HEADER_SZ;
fragSz -= CERT_HEADER_SZ; fragSz -= CERT_HEADER_SZ;
if (!ssl->keys.encryptionOn) {
HashOutputRaw(ssl, ssl->buffers.certificate.buffer, certSz); HashOutputRaw(ssl, ssl->buffers.certificate.buffer, certSz);
if (certChainSz) { if (certChainSz)
HashOutputRaw(ssl, HashOutputRaw(ssl, ssl->buffers.certChain.buffer,
ssl->buffers.certChain.buffer, certChainSz); certChainSz);
} }
} }
} }