forked from wolfSSL/wolfssl
fix issue between certificate fragmentation and secure renegotiation
This commit is contained in:
@ -7523,15 +7523,17 @@ 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);
|
||||||
HashOutputRaw(ssl, output + RECORD_HEADER_SZ,
|
if (!ssl->keys.encryptionOn)
|
||||||
HANDSHAKE_HEADER_SZ);
|
HashOutputRaw(ssl, output + RECORD_HEADER_SZ,
|
||||||
|
HANDSHAKE_HEADER_SZ);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#ifdef WOLFSSL_DTLS
|
#ifdef WOLFSSL_DTLS
|
||||||
AddHeaders(output, payloadSz, certificate, ssl);
|
AddHeaders(output, payloadSz, certificate, ssl);
|
||||||
HashOutputRaw(ssl,
|
if (!ssl->keys.encryptionOn)
|
||||||
output + RECORD_HEADER_SZ + DTLS_RECORD_EXTRA,
|
HashOutputRaw(ssl,
|
||||||
HANDSHAKE_HEADER_SZ + DTLS_HANDSHAKE_EXTRA);
|
output + RECORD_HEADER_SZ + DTLS_RECORD_EXTRA,
|
||||||
|
HANDSHAKE_HEADER_SZ + DTLS_HANDSHAKE_EXTRA);
|
||||||
/* Adding the headers increments these, decrement them for
|
/* Adding the headers increments these, decrement them for
|
||||||
* actual message header. */
|
* actual message header. */
|
||||||
ssl->keys.dtls_sequence_number--;
|
ssl->keys.dtls_sequence_number--;
|
||||||
@ -7543,21 +7545,24 @@ int SendCertificate(WOLFSSL* ssl)
|
|||||||
|
|
||||||
/* list total */
|
/* list total */
|
||||||
c32to24(listSz, output + i);
|
c32to24(listSz, output + i);
|
||||||
HashOutputRaw(ssl, output + i, CERT_HEADER_SZ);
|
if (!ssl->keys.encryptionOn)
|
||||||
|
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);
|
||||||
HashOutputRaw(ssl, output + i, CERT_HEADER_SZ);
|
if (!ssl->keys.encryptionOn)
|
||||||
|
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;
|
||||||
|
|
||||||
HashOutputRaw(ssl, ssl->buffers.certificate.buffer, certSz);
|
if (!ssl->keys.encryptionOn) {
|
||||||
if (certChainSz) {
|
HashOutputRaw(ssl, ssl->buffers.certificate.buffer, certSz);
|
||||||
HashOutputRaw(ssl,
|
if (certChainSz)
|
||||||
ssl->buffers.certChain.buffer, certChainSz);
|
HashOutputRaw(ssl, ssl->buffers.certChain.buffer,
|
||||||
|
certChainSz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user