mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-01-27 05:22:20 +01:00
Merge branch 'master' of https://github.com/wolfSSL/wolfssl into zd20378
This commit is contained in:
@@ -504,11 +504,6 @@ typedef struct KeyShareInfo {
|
||||
int curve_id;
|
||||
} KeyShareInfo;
|
||||
|
||||
/* maximum previous acks to capture */
|
||||
#ifndef WC_SNIFFER_HS_ACK_HIST_MAX
|
||||
#define WC_SNIFFER_HS_ACK_HIST_MAX 10
|
||||
#endif
|
||||
|
||||
/* Sniffer Session holds info for each client/server SSL/TLS session */
|
||||
typedef struct SnifferSession {
|
||||
SnifferServer* context; /* server context */
|
||||
@@ -520,10 +515,10 @@ typedef struct SnifferSession {
|
||||
word16 cliPort; /* client port */
|
||||
word32 cliSeqStart; /* client start sequence */
|
||||
word32 srvSeqStart; /* server start sequence */
|
||||
word32 cliSeqLast; /* client last sequence */
|
||||
word32 srvSeqLast; /* server last sequence */
|
||||
word32 cliExpected; /* client expected sequence (relative) */
|
||||
word32 srvExpected; /* server expected sequence (relative) */
|
||||
word32 cliAcks[WC_SNIFFER_HS_ACK_HIST_MAX]; /* history of acks during handshake */
|
||||
word32 srvAcks[WC_SNIFFER_HS_ACK_HIST_MAX]; /* history of acks during handshake */
|
||||
FinCapture finCapture; /* retain out of order FIN s */
|
||||
Flags flags; /* session flags */
|
||||
time_t lastUsed; /* last used ticks */
|
||||
@@ -5638,47 +5633,6 @@ static int AddFinCapture(SnifferSession* session, word32 sequence)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int FindPrevAck(SnifferSession* session, word32 realAck)
|
||||
{
|
||||
int i;
|
||||
word32* acks = (session->flags.side == WOLFSSL_SERVER_END) ?
|
||||
session->cliAcks : session->srvAcks;
|
||||
/* if previous ack found return 1, otherwise 0 */
|
||||
for (i=0; i<WC_SNIFFER_HS_ACK_HIST_MAX; i++) {
|
||||
if (acks[i] == realAck) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static void AddAck(SnifferSession* session, word32 realAck)
|
||||
{
|
||||
int i;
|
||||
word32* acks = (session->flags.side == WOLFSSL_SERVER_END) ?
|
||||
session->cliAcks : session->srvAcks;
|
||||
/* find first empty ack slot */
|
||||
for (i=0; i<WC_SNIFFER_HS_ACK_HIST_MAX; i++) {
|
||||
if (acks[i] == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* if out of slots, find oldest */
|
||||
if (i == WC_SNIFFER_HS_ACK_HIST_MAX) {
|
||||
int idx = 0;
|
||||
word32 lastAck = realAck;
|
||||
for (i=0; i<WC_SNIFFER_HS_ACK_HIST_MAX; i++) {
|
||||
if (acks[i] < lastAck) {
|
||||
idx = i;
|
||||
lastAck = acks[i];
|
||||
}
|
||||
}
|
||||
i = idx;
|
||||
}
|
||||
|
||||
acks[i] = realAck;
|
||||
}
|
||||
|
||||
/* Adjust incoming sequence based on side */
|
||||
/* returns 0 on success (continue), -1 on error, 1 on success (end) */
|
||||
static int AdjustSequence(TcpInfo* tcpInfo, SnifferSession* session,
|
||||
@@ -5686,7 +5640,9 @@ static int AdjustSequence(TcpInfo* tcpInfo, SnifferSession* session,
|
||||
{
|
||||
int ret = 0;
|
||||
word32 seqStart = (session->flags.side == WOLFSSL_SERVER_END) ?
|
||||
session->cliSeqStart :session->srvSeqStart;
|
||||
session->cliSeqStart : session->srvSeqStart;
|
||||
word32* seqLast = (session->flags.side == WOLFSSL_SERVER_END) ?
|
||||
&session->cliSeqLast : &session->srvSeqLast;
|
||||
word32 real = tcpInfo->sequence - seqStart;
|
||||
word32* expected = (session->flags.side == WOLFSSL_SERVER_END) ?
|
||||
&session->cliExpected : &session->srvExpected;
|
||||
@@ -5747,15 +5703,21 @@ static int AdjustSequence(TcpInfo* tcpInfo, SnifferSession* session,
|
||||
}
|
||||
}
|
||||
else if (*sslBytes > 0) {
|
||||
if (overlap < *sslBytes) {
|
||||
/* adjust to remove partial overlap */
|
||||
*sslFrame += overlap;
|
||||
if (real + *sslBytes - 1 > *seqLast) {
|
||||
/* fix segment overlap */
|
||||
#ifdef DEBUG_SNIFFER
|
||||
WOLFSSL* ssl = (session->flags.side == WOLFSSL_SERVER_END) ?
|
||||
session->sslServer : session->sslClient;
|
||||
printf("\tSegment %d overlap (%d -> %d)\n",
|
||||
*sslBytes,
|
||||
ssl->buffers.inputBuffer.length - overlap,
|
||||
ssl->buffers.inputBuffer.length + *sslBytes - overlap - 1);
|
||||
#endif
|
||||
*sslBytes -= overlap;
|
||||
}
|
||||
else {
|
||||
/* DUP overlap, allow */
|
||||
*sslFrame += overlap;
|
||||
}
|
||||
|
||||
/* DUP overlap, allow */
|
||||
skipPartial = 0; /* do not reset sslBytes */
|
||||
}
|
||||
ret = 0;
|
||||
@@ -5765,13 +5727,13 @@ static int AdjustSequence(TcpInfo* tcpInfo, SnifferSession* session,
|
||||
* possible spurious retransmission. */
|
||||
if (*sslBytes > 0) {
|
||||
/* If packet has data attempt to process packet, if hasn't
|
||||
* already been ack'd during handshake */
|
||||
* already been received */
|
||||
if (
|
||||
#ifdef WOLFSSL_ASYNC_CRYPT
|
||||
session->sslServer->error != WC_NO_ERR_TRACE(WC_PENDING_E) &&
|
||||
session->pendSeq != tcpInfo->sequence &&
|
||||
#endif
|
||||
FindPrevAck(session, real)) {
|
||||
real + *sslBytes -1 <= *seqLast) {
|
||||
Trace(DUPLICATE_STR);
|
||||
ret = 1;
|
||||
}
|
||||
@@ -5843,7 +5805,7 @@ static int AdjustSequence(TcpInfo* tcpInfo, SnifferSession* session,
|
||||
*expected += 1;
|
||||
}
|
||||
if (*sslBytes > 0) {
|
||||
AddAck(session, real);
|
||||
*seqLast = real + *sslBytes - 1;
|
||||
}
|
||||
if (*sslBytes > 0 && skipPartial) {
|
||||
*sslBytes = 0;
|
||||
|
||||
@@ -20844,9 +20844,9 @@ static int DecodeBasicCaConstraintInternal(const byte* input, int sz,
|
||||
return ret;
|
||||
|
||||
cert->isCA = isCa ? 1 : 0;
|
||||
cert->pathLengthSet = pathLengthSet ? 1 : 0;
|
||||
if (pathLengthSet) {
|
||||
cert->pathLength = pathLength;
|
||||
cert->pathLengthSet = pathLengthSet ? 1 : 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -121,17 +121,6 @@
|
||||
/* #define DEBUG_YMM */
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_BYTEREVERSE64) && \
|
||||
!defined(HAVE_INTEL_AVX1) && !defined(HAVE_INTEL_AVX2)
|
||||
#define ByteReverseWords64(out, in, size) ByteReverseWords64_1(out, size)
|
||||
#define ByteReverseWords64_1(buf, size) \
|
||||
{ unsigned int i ;\
|
||||
for(i=0; i< size/sizeof(word64); i++){\
|
||||
__asm__ volatile("bswapq %0":"+r"(buf[i])::) ;\
|
||||
}\
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(WOLFSSL_IMX6_CAAM) && !defined(NO_IMX6_CAAM_HASH) && \
|
||||
!defined(WOLFSSL_QNX_CAAM)
|
||||
/* functions defined in wolfcrypt/src/port/caam/caam_sha.c */
|
||||
@@ -1400,17 +1389,23 @@ static WC_INLINE int Sha512Final(wc_Sha512* sha512)
|
||||
#elif defined(STM32_HASH_SHA512)
|
||||
#else
|
||||
|
||||
static int Sha512FinalRaw(wc_Sha512* sha512, byte* hash, size_t digestSz)
|
||||
static int Sha512FinalRaw(wc_Sha512* sha512, byte* hash, word32 digestSz)
|
||||
{
|
||||
if (sha512 == NULL || hash == NULL) {
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
#ifdef LITTLE_ENDIAN_ORDER
|
||||
ByteReverseWords64(sha512->digest, sha512->digest, WC_SHA512_DIGEST_SIZE);
|
||||
#endif
|
||||
|
||||
if ((digestSz & 0x7) == 0)
|
||||
ByteReverseWords64((word64 *)hash, sha512->digest, digestSz);
|
||||
else {
|
||||
ByteReverseWords64(sha512->digest, sha512->digest,
|
||||
WC_SHA512_DIGEST_SIZE);
|
||||
XMEMCPY(hash, sha512->digest, digestSz);
|
||||
}
|
||||
#else
|
||||
XMEMCPY(hash, sha512->digest, digestSz);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1807,10 +1802,10 @@ int wc_Sha384FinalRaw(wc_Sha384* sha384, byte* hash)
|
||||
}
|
||||
|
||||
#ifdef LITTLE_ENDIAN_ORDER
|
||||
ByteReverseWords64(sha384->digest, sha384->digest, WC_SHA384_DIGEST_SIZE);
|
||||
#endif
|
||||
|
||||
ByteReverseWords64((word64 *)hash, sha384->digest, WC_SHA384_DIGEST_SIZE);
|
||||
#else
|
||||
XMEMCPY(hash, sha384->digest, WC_SHA384_DIGEST_SIZE);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user