diff --git a/examples/client/client.c b/examples/client/client.c index 632c89577..1212e5e0b 100644 --- a/examples/client/client.c +++ b/examples/client/client.c @@ -819,9 +819,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) int disableCRL = 0; int externalTest = 0; int ret; -#ifndef WOLFSSL_CALLBACKS int err = 0; -#endif int scr = 0; /* allow secure renegotiation */ int forceScr = 0; /* force client initiaed scr */ int useClientCert = 1; @@ -2007,8 +2005,8 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) ret = NonBlockingSSL_Connect(ssl); /* will keep retrying on timeout */ #endif if (ret != WOLFSSL_SUCCESS) { - printf("wolfSSL_connect error %d, %s\n", err, - wolfSSL_ERR_error_string(err, buffer)); + printf("wolfSSL_connect error %d, %s\n", ret, + wolfSSL_ERR_error_string(ret, buffer)); wolfSSL_free(ssl); wolfSSL_CTX_free(ctx); err_sys("wolfSSL_connect failed"); diff --git a/src/internal.c b/src/internal.c index eaa750c8f..d13dc0ca6 100644 --- a/src/internal.c +++ b/src/internal.c @@ -7886,7 +7886,7 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("Certificate", &ssl->handShakeInfo); + AddPacketName(ssl, "Certificate"); if (ssl->toInfoOn) AddLateName("Certificate", &ssl->timeoutInfo); #endif @@ -9286,7 +9286,7 @@ int DoFinished(WOLFSSL* ssl, const byte* input, word32* inOutIdx, word32 size, return BUFFER_E; #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("Finished", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "Finished"); if (ssl->toInfoOn) AddLateName("Finished", &ssl->timeoutInfo); #endif @@ -9671,13 +9671,15 @@ static int DoHandShakeMsgType(WOLFSSL* ssl, byte* input, word32* inOutIdx, return ret; } -#ifdef WOLFSSL_CALLBACKS +#if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) /* add name later, add on record and handshake header part back on */ if (ssl->toInfoOn) { int add = RECORD_HEADER_SZ + HANDSHAKE_HEADER_SZ; - AddPacketInfo(0, &ssl->timeoutInfo, input + *inOutIdx - add, - size + add, ssl->heap); + AddPacketInfo(ssl, 0, handshake, input + *inOutIdx - add, + size + add, READ_PROTO, ssl->heap); + #ifdef WOLFSSL_CALLBACKS AddLateRecordHeader(&ssl->curRL, &ssl->timeoutInfo); + #endif } #endif @@ -9774,7 +9776,7 @@ static int DoHandShakeMsgType(WOLFSSL* ssl, byte* input, word32* inOutIdx, WOLFSSL_MSG("processing server hello done"); #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("ServerHelloDone", &ssl->handShakeInfo); + AddPacketName(ssl, "ServerHelloDone"); if (ssl->toInfoOn) AddLateName("ServerHelloDone", &ssl->timeoutInfo); #endif @@ -11605,14 +11607,14 @@ static int DoAlert(WOLFSSL* ssl, byte* input, word32* inOutIdx, int* type, byte level; byte code; - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("Alert", &ssl->handShakeInfo); + AddPacketName(ssl, "Alert"); if (ssl->toInfoOn) /* add record header back on to info + alert bytes level/code */ - AddPacketInfo("Alert", &ssl->timeoutInfo, input + *inOutIdx - + AddPacketInfo(ssl, "Alert", alert, input + *inOutIdx - RECORD_HEADER_SZ, RECORD_HEADER_SZ + ALERT_SIZE, - ssl->heap); + READ_PROTO, ssl->heap); #endif if (++ssl->options.alertCount >= WOLFSSL_ALERT_COUNT_MAX) { @@ -12174,16 +12176,19 @@ int ProcessReply(WOLFSSL* ssl) case change_cipher_spec: WOLFSSL_MSG("got CHANGE CIPHER SPEC"); - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("ChangeCipher", &ssl->handShakeInfo); + AddPacketName(ssl, "ChangeCipher"); /* add record header back on info */ if (ssl->toInfoOn) { - AddPacketInfo("ChangeCipher", &ssl->timeoutInfo, + AddPacketInfo(ssl, "ChangeCipher", + change_cipher_spec, ssl->buffers.inputBuffer.buffer + ssl->buffers.inputBuffer.idx - RECORD_HEADER_SZ, - 1 + RECORD_HEADER_SZ, ssl->heap); + 1 + RECORD_HEADER_SZ, READ_PROTO, ssl->heap); + #ifdef WOLFSSL_CALLBACKS AddLateRecordHeader(&ssl->curRL, &ssl->timeoutInfo); + #endif } #endif @@ -12408,11 +12413,11 @@ int SendChangeCipher(WOLFSSL* ssl) return ret; } #endif - #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("ChangeCipher", &ssl->handShakeInfo); + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) + if (ssl->hsInfoOn) AddPacketName(ssl, "ChangeCipher"); if (ssl->toInfoOn) - AddPacketInfo("ChangeCipher", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "ChangeCipher", change_cipher_spec, output, + sendSz, WRITE_PROTO, ssl->heap); #endif ssl->buffers.outputBuffer.length += sendSz; @@ -13062,11 +13067,11 @@ int SendFinished(WOLFSSL* ssl) } } - #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("Finished", &ssl->handShakeInfo); + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) + if (ssl->hsInfoOn) AddPacketName(ssl, "Finished"); if (ssl->toInfoOn) - AddPacketInfo("Finished", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "Finished", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); #endif ssl->buffers.outputBuffer.length += sendSz; @@ -13294,12 +13299,12 @@ int SendCertificate(WOLFSSL* ssl) } #endif - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("Certificate", &ssl->handShakeInfo); + AddPacketName(ssl, "Certificate"); if (ssl->toInfoOn) - AddPacketInfo("Certificate", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "Certificate", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); #endif ssl->buffers.outputBuffer.length += sendSz; @@ -13429,12 +13434,12 @@ int SendCertificateRequest(WOLFSSL* ssl) if (ret != 0) return ret; - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("CertificateRequest", &ssl->handShakeInfo); + AddPacketName(ssl, "CertificateRequest"); if (ssl->toInfoOn) - AddPacketInfo("CertificateRequest", &ssl->timeoutInfo, output, - sendSz, ssl->heap); + AddPacketInfo(ssl, "CertificateRequest", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); #endif ssl->buffers.outputBuffer.length += sendSz; if (ssl->options.groupMessages) @@ -13527,12 +13532,12 @@ static int BuildCertificateStatus(WOLFSSL* ssl, byte type, buffer* status, ret = DtlsMsgPoolSave(ssl, output, sendSz); #endif - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ret == 0 && ssl->hsInfoOn) - AddPacketName("CertificateStatus", &ssl->handShakeInfo); + AddPacketName(ssl, "CertificateStatus"); if (ret == 0 && ssl->toInfoOn) - AddPacketInfo("CertificateStatus", &ssl->timeoutInfo, output, - sendSz, ssl->heap); + AddPacketInfo(ssl, "CertificateStatus", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); #endif if (ret == 0) { @@ -14241,11 +14246,12 @@ int SendAlert(WOLFSSL* ssl, int severity, int type) if (sendSz < 0) return BUILD_MSG_ERROR; - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("Alert", &ssl->handShakeInfo); + AddPacketName(ssl, "Alert"); if (ssl->toInfoOn) - AddPacketInfo("Alert", &ssl->timeoutInfo, output, sendSz,ssl->heap); + AddPacketInfo(ssl, "Alert", alert, output, sendSz, WRITE_PROTO, + ssl->heap); #endif ssl->buffers.outputBuffer.length += sendSz; @@ -16303,7 +16309,7 @@ void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, } #endif /* !defined(NO_WOLFSSL_SERVER) || !defined(NO_CERTS) */ -#ifdef WOLFSSL_CALLBACKS +#if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) /* Initialisze HandShakeInfo */ void InitHandShakeInfo(HandShakeInfo* info, WOLFSSL* ssl) @@ -16339,15 +16345,21 @@ void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, /* Add name to info packet names, increase packet name count */ - void AddPacketName(const char* name, HandShakeInfo* info) + void AddPacketName(WOLFSSL* ssl, const char* name) { + #ifdef WOLFSSL_CALLBACKS + HandShakeInfo* info = &ssl->handShakeInfo; if (info->numberPackets < MAX_PACKETS_HANDSHAKE) { XSTRNCPY(info->packetNames[info->numberPackets++], name, MAX_PACKETNAME_SZ); } + #endif + (void)ssl; + (void)name; } + #ifdef WOLFSSL_CALLBACKS /* Initialisze TimeoutInfo */ void InitTimeoutInfo(TimeoutInfo* info) { @@ -16382,11 +16394,51 @@ void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, } - - /* Add PacketInfo to TimeoutInfo */ - void AddPacketInfo(const char* name, TimeoutInfo* info, const byte* data, - int sz, void* heap) + /* Add packet name to previsouly added packet info */ + void AddLateName(const char* name, TimeoutInfo* info) { + /* make sure we have a valid previous one */ + if (info->numberPackets > 0 && info->numberPackets < + MAX_PACKETS_HANDSHAKE) { + XSTRNCPY(info->packets[info->numberPackets - 1].packetName, name, + MAX_PACKETNAME_SZ); + } + } + + /* Add record header to previsouly added packet info */ + void AddLateRecordHeader(const RecordLayerHeader* rl, TimeoutInfo* info) + { + /* make sure we have a valid previous one */ + if (info->numberPackets > 0 && info->numberPackets < + MAX_PACKETS_HANDSHAKE) { + if (info->packets[info->numberPackets - 1].bufferValue) + XMEMCPY(info->packets[info->numberPackets - 1].bufferValue, rl, + RECORD_HEADER_SZ); + else + XMEMCPY(info->packets[info->numberPackets - 1].value, rl, + RECORD_HEADER_SZ); + } + } + + #endif /* WOLFSSL_CALLBACKS */ + + + /* Add PacketInfo to TimeoutInfo + * + * ssl WOLFSSL structure sending or receiving packet + * name name of packet being sent + * type type of packet being sent + * data data bing sent with packet + * sz size of data buffer + * write 1 if this packet is being written to wire, 0 if being read + * heap custom heap to use for mallocs/frees + */ + void AddPacketInfo(WOLFSSL* ssl, const char* name, int type, + const byte* data, int sz, int write, void* heap) + { + #ifdef WOLFSSL_CALLBACKS + TimeoutInfo* info = &ssl->timeoutInfo; + if (info->numberPackets < (MAX_PACKETS_HANDSHAKE - 1)) { Timeval currTime; @@ -16416,6 +16468,7 @@ void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, currTime.tv_usec; info->numberPackets++; } + #endif /* WOLFSSL_CALLBACKS */ #ifdef OPENSSL_EXTRA if (ssl->protoMsgCb != NULL && sz > RECORD_HEADER_SZ) { /* version from hex to dec 16 is 16^1, 256 from 16^2 and @@ -16425,39 +16478,17 @@ void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, (ssl->version.major & 0X0F) * 256 + (ssl->version.major & 0xF0) * 4096; - ssl->protoMsgCb(written, version, type, + ssl->protoMsgCb(write, version, type, (const void *)(data + RECORD_HEADER_SZ), (size_t)(sz - RECORD_HEADER_SZ), ssl, ssl->protoMsgCtx); } #endif /* OPENSSL_EXTRA */ - } - - - /* Add packet name to previsouly added packet info */ - void AddLateName(const char* name, TimeoutInfo* info) - { - /* make sure we have a valid previous one */ - if (info->numberPackets > 0 && info->numberPackets < - MAX_PACKETS_HANDSHAKE) { - XSTRNCPY(info->packets[info->numberPackets - 1].packetName, name, - MAX_PACKETNAME_SZ); - } - } - - /* Add record header to previsouly added packet info */ - void AddLateRecordHeader(const RecordLayerHeader* rl, TimeoutInfo* info) - { - /* make sure we have a valid previous one */ - if (info->numberPackets > 0 && info->numberPackets < - MAX_PACKETS_HANDSHAKE) { - if (info->packets[info->numberPackets - 1].bufferValue) - XMEMCPY(info->packets[info->numberPackets - 1].bufferValue, rl, - RECORD_HEADER_SZ); - else - XMEMCPY(info->packets[info->numberPackets - 1].value, rl, - RECORD_HEADER_SZ); - } + (void)write; + (void)name; + (void)heap; + (void)type; + (void)ssl; } #endif /* WOLFSSL_CALLBACKS */ @@ -16680,11 +16711,11 @@ void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, ssl->options.clientState = CLIENT_HELLO_COMPLETE; -#ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("ClientHello", &ssl->handShakeInfo); +#if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) + if (ssl->hsInfoOn) AddPacketName(ssl, "ClientHello"); if (ssl->toInfoOn) - AddPacketInfo("ClientHello", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "ClientHello", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); #endif ssl->buffers.outputBuffer.length += sendSz; @@ -16701,8 +16732,7 @@ void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, word32 begin = *inOutIdx; #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("HelloVerifyRequest", - &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "HelloVerifyRequest"); if (ssl->toInfoOn) AddLateName("HelloVerifyRequest", &ssl->timeoutInfo); #endif @@ -16891,7 +16921,7 @@ void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, int ret; #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("ServerHello", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "ServerHello"); if (ssl->toInfoOn) AddLateName("ServerHello", &ssl->timeoutInfo); #endif @@ -17175,7 +17205,7 @@ void PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("CertificateRequest", &ssl->handShakeInfo); + AddPacketName(ssl, "CertificateRequest"); if (ssl->toInfoOn) AddLateName("CertificateRequest", &ssl->timeoutInfo); #endif @@ -17404,7 +17434,7 @@ static int DoServerKeyExchange(WOLFSSL* ssl, const byte* input, { #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("ServerKeyExchange", &ssl->handShakeInfo); + AddPacketName(ssl, "ServerKeyExchange"); if (ssl->toInfoOn) AddLateName("ServerKeyExchange", &ssl->timeoutInfo); #endif @@ -19659,12 +19689,12 @@ int SendClientKeyExchange(WOLFSSL* ssl) } #endif - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("ClientKeyExchange", &ssl->handShakeInfo); + AddPacketName(ssl, "ClientKeyExchange"); if (ssl->toInfoOn) - AddPacketInfo("ClientKeyExchange", &ssl->timeoutInfo, - args->output, args->sendSz, ssl->heap); + AddPacketInfo(ssl, "ClientKeyExchange", handshake, + args->output, args->sendSz, WRITE_PROTO, ssl->heap); #endif ssl->buffers.outputBuffer.length += args->sendSz; @@ -20252,12 +20282,12 @@ int SendCertificateVerify(WOLFSSL* ssl) #endif - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("CertificateVerify", &ssl->handShakeInfo); + AddPacketName(ssl, "CertificateVerify"); if (ssl->toInfoOn) - AddPacketInfo("CertificateVerify", &ssl->timeoutInfo, - args->output, args->sendSz, ssl->heap); + AddPacketInfo(ssl, "CertificateVerify", handshake, + args->output, args->sendSz, WRITE_PROTO, ssl->heap); #endif ssl->buffers.outputBuffer.length += args->sendSz; @@ -20561,13 +20591,12 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, if (ret != 0) return ret; - - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("ServerHello", &ssl->handShakeInfo); + AddPacketName(ssl, "ServerHello"); if (ssl->toInfoOn) - AddPacketInfo("ServerHello", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "ServerHello", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); #endif ssl->options.serverState = SERVER_HELLO_COMPLETE; @@ -22067,13 +22096,13 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, goto exit_sske; } - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) { - AddPacketName("ServerKeyExchange", &ssl->handShakeInfo); + AddPacketName(ssl, "ServerKeyExchange"); } if (ssl->toInfoOn) { - AddPacketInfo("ServerKeyExchange", &ssl->timeoutInfo, - args->output, args->sendSz, ssl->heap); + AddPacketInfo(ssl, "ServerKeyExchange", handshake, + args->output, args->sendSz, WRITE_PROTO, ssl->heap); } #endif @@ -22337,7 +22366,7 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, WOLFSSL_MSG("Got old format client hello"); #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("ClientHello", &ssl->handShakeInfo); + AddPacketName(ssl, "ClientHello"); if (ssl->toInfoOn) AddLateName("ClientHello", &ssl->timeoutInfo); #endif @@ -22538,7 +22567,7 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, #endif /* WOLFSSL_DTLS */ #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("ClientHello", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "ClientHello"); if (ssl->toInfoOn) AddLateName("ClientHello", &ssl->timeoutInfo); #endif @@ -23131,7 +23160,7 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, { #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("CertificateVerify", &ssl->handShakeInfo); + AddPacketName(ssl, "CertificateVerify"); if (ssl->toInfoOn) AddLateName("CertificateVerify", &ssl->timeoutInfo); #endif @@ -23433,12 +23462,12 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, if (ret != 0) return ret; - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("ServerHelloDone", &ssl->handShakeInfo); + AddPacketName(ssl, "ServerHelloDone"); if (ssl->toInfoOn) - AddPacketInfo("ServerHelloDone", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "ServerHelloDone", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); #endif ssl->options.serverState = SERVER_HELLODONE_COMPLETE; @@ -23753,12 +23782,12 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, XMEMCPY(output + idx, cookie, cookieSz); -#ifdef WOLFSSL_CALLBACKS +#if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) if (ssl->hsInfoOn) - AddPacketName("HelloVerifyRequest", &ssl->handShakeInfo); + AddPacketName(ssl, "HelloVerifyRequest"); if (ssl->toInfoOn) - AddPacketInfo("HelloVerifyRequest", &ssl->timeoutInfo, output, - sendSz, ssl->heap); + AddPacketInfo(ssl, "HelloVerifyRequest", handshake, output, + sendSz, WRITE_PROTO, ssl->heap); #endif ssl->buffers.outputBuffer.length += sendSz; @@ -23858,9 +23887,9 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, } #endif /* !NO_CERTS */ - #ifdef WOLFSSL_CALLBACKS + #if defined(WOLFSSL_CALLBACKS) if (ssl->hsInfoOn) { - AddPacketName("ClientKeyExchange", &ssl->handShakeInfo); + AddPacketName(ssl, "ClientKeyExchange"); } if (ssl->toInfoOn) { AddLateName("ClientKeyExchange", &ssl->timeoutInfo); diff --git a/src/ssl.c b/src/ssl.c index 8a3882f61..17a780c0d 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -24415,6 +24415,10 @@ int wolfSSL_HMAC_Final(WOLFSSL_HMAC_CTX* ctx, unsigned char* hash, *len = WC_MD5_DIGEST_SIZE; break; + case WC_SHA: + *len = WC_SHA_DIGEST_SIZE; + break; + case WC_SHA224: *len = WC_SHA224_DIGEST_SIZE; break; @@ -31616,22 +31620,29 @@ int wolfSSL_CTX_set_msg_callback(WOLFSSL_CTX *ctx, SSL_Msg_Cb cb) } #endif + +/* Sets a callback for when sending and receiving protocol messages. + * + * ssl WOLFSSL structure to set callback in + * cb callback to use + * + * return SSL_SUCCESS on success and SSL_FAILURE with error case + */ int wolfSSL_set_msg_callback(WOLFSSL *ssl, SSL_Msg_Cb cb) { - WOLFSSL_ENTER("wolfSSL_set_msg_callback"); + WOLFSSL_ENTER("wolfSSL_set_msg_callback"); - if (ssl == NULL) { - return SSL_FAILURE; - } + if (ssl == NULL) { + return SSL_FAILURE; + } - if (cb != NULL) { - ssl->toInfoOn = 1; - } + if (cb != NULL) { + ssl->toInfoOn = 1; + } - ssl->protoMsgCb = cb; - return SSL_SUCCESS; + ssl->protoMsgCb = cb; + return SSL_SUCCESS; } - #ifndef NO_WOLFSSL_STUB int wolfSSL_CTX_set_msg_callback_arg(WOLFSSL_CTX *ctx, void* arg) { diff --git a/src/tls13.c b/src/tls13.c index 1f671cdba..f4eb52312 100644 --- a/src/tls13.c +++ b/src/tls13.c @@ -2350,10 +2350,10 @@ int SendTls13ClientHello(WOLFSSL* ssl) ssl->options.clientState = CLIENT_HELLO_COMPLETE; #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("ClientHello", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "ClientHello"); if (ssl->toInfoOn) { - AddPacketInfo("ClientHello", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "ClientHello", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); } #endif @@ -2500,7 +2500,7 @@ static int DoTls13HelloRetryRequest(WOLFSSL* ssl, const byte* input, WOLFSSL_ENTER("DoTls13HelloRetryRequest"); #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("HelloRetryRequest", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "HelloRetryRequest"); if (ssl->toInfoOn) AddLateName("HelloRetryRequest", &ssl->timeoutInfo); #endif @@ -2582,7 +2582,7 @@ int DoTls13ServerHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx, WOLFSSL_ENTER("DoTls13ServerHello"); #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("ServerHello", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "ServerHello"); if (ssl->toInfoOn) AddLateName("ServerHello", &ssl->timeoutInfo); #endif @@ -2693,8 +2693,7 @@ static int DoTls13EncryptedExtensions(WOLFSSL* ssl, const byte* input, WOLFSSL_ENTER("DoTls13EncryptedExtensions"); #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("EncryptedExtensions", - &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "EncryptedExtensions"); if (ssl->toInfoOn) AddLateName("EncryptedExtensions", &ssl->timeoutInfo); #endif @@ -2757,7 +2756,7 @@ static int DoTls13CertificateRequest(WOLFSSL* ssl, const byte* input, WOLFSSL_ENTER("DoTls13CertificateRequest"); #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("CertificateRequest", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "CertificateRequest"); if (ssl->toInfoOn) AddLateName("CertificateRequest", &ssl->timeoutInfo); #endif @@ -3297,7 +3296,7 @@ int DoTls13ClientHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx, WOLFSSL_ENTER("DoTls13ClientHello"); #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("ClientHello", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "ClientHello"); if (ssl->toInfoOn) AddLateName("ClientHello", &ssl->timeoutInfo); #endif @@ -3528,10 +3527,10 @@ int SendTls13HelloRetryRequest(WOLFSSL* ssl) #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("HelloRetryRequest", &ssl->handShakeInfo); + AddPacketName(ssl, "HelloRetryRequest"); if (ssl->toInfoOn) { - AddPacketInfo("HelloRetryRequest", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "HelloRetryRequest", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); } #endif @@ -3617,10 +3616,10 @@ static int SendTls13ServerHello(WOLFSSL* ssl) #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("ServerHello", &ssl->handShakeInfo); + AddPacketName(ssl, "ServerHello"); if (ssl->toInfoOn) { - AddPacketInfo("ServerHello", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "ServerHello", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); } #endif @@ -3697,10 +3696,10 @@ static int SendTls13EncryptedExtensions(WOLFSSL* ssl) #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("EncryptedExtensions", &ssl->handShakeInfo); + AddPacketName(ssl, "EncryptedExtensions"); if (ssl->toInfoOn) { - AddPacketInfo("EncryptedExtensions", &ssl->timeoutInfo, output, - sendSz, ssl->heap); + AddPacketInfo(ssl, "EncryptedExtensions", handshake, output, + sendSz, WRITE_PROTO, ssl->heap); } #endif @@ -3834,10 +3833,10 @@ static int SendTls13CertificateRequest(WOLFSSL* ssl, byte* reqCtx, #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("CertificateRequest", &ssl->handShakeInfo); + AddPacketName(ssl, "CertificateRequest"); if (ssl->toInfoOn) { - AddPacketInfo("CertificateRequest", &ssl->timeoutInfo, output, - sendSz, ssl->heap); + AddPacketInfo(ssl, "CertificateRequest", handshake, output, + sendSz, WRITE_PROTO, ssl->heap); } #endif @@ -4427,10 +4426,10 @@ static int SendTls13Certificate(WOLFSSL* ssl) #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("Certificate", &ssl->handShakeInfo); + AddPacketName(ssl, "Certificate"); if (ssl->toInfoOn) { - AddPacketInfo("Certificate", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "Certificate", handshake, output, + sendSz, WRITE_PROTO, ssl->heap); } #endif @@ -4767,10 +4766,10 @@ static int SendTls13CertificateVerify(WOLFSSL* ssl) #ifdef WOLFSSL_CALLBACKS if (ssl->hsInfoOn) - AddPacketName("CertificateVerify", &ssl->handShakeInfo); + AddPacketName(ssl, "CertificateVerify"); if (ssl->toInfoOn) { - AddPacketInfo("CertificateVerify", &ssl->timeoutInfo, - args->output, args->sendSz, ssl->heap); + AddPacketInfo(ssl, "CertificateVerify", handshake, + args->output, args->sendSz, WRITE_PROTO, ssl->heap); } #endif @@ -4917,8 +4916,7 @@ static int DoTls13CertificateVerify(WOLFSSL* ssl, byte* input, case TLS_ASYNC_BEGIN: { #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("CertificateVerify", - &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "CertificateVerify"); if (ssl->toInfoOn) AddLateName("CertificateVerify", &ssl->timeoutInfo); #endif @@ -5200,7 +5198,7 @@ static int DoTls13Finished(WOLFSSL* ssl, const byte* input, word32* inOutIdx, return BUFFER_ERROR; #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("Finished", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "Finished"); if (ssl->toInfoOn) AddLateName("Finished", &ssl->timeoutInfo); #endif @@ -5312,10 +5310,10 @@ static int SendTls13Finished(WOLFSSL* ssl) } #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("Finished", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "Finished"); if (ssl->toInfoOn) { - AddPacketInfo("Finished", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "Finished", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); } #endif @@ -5432,10 +5430,10 @@ static int SendTls13KeyUpdate(WOLFSSL* ssl) return BUILD_MSG_ERROR; #ifdef WOLFSSL_CALLBACKS - if (ssl->hsInfoOn) AddPacketName("KeyUpdate", &ssl->handShakeInfo); + if (ssl->hsInfoOn) AddPacketName(ssl, "KeyUpdate"); if (ssl->toInfoOn) { - AddPacketInfo("KeyUpdate", &ssl->timeoutInfo, output, sendSz, - ssl->heap); + AddPacketInfo(ssl, "KeyUpdate", handshake, output, sendSz, + WRITE_PROTO, ssl->heap); } #endif @@ -6139,8 +6137,8 @@ int DoTls13HandShakeMsgType(WOLFSSL* ssl, byte* input, word32* inOutIdx, /* add name later, add on record and handshake header part back on */ if (ssl->toInfoOn) { int add = RECORD_HEADER_SZ + HANDSHAKE_HEADER_SZ; - AddPacketInfo(0, &ssl->timeoutInfo, input + *inOutIdx - add, - size + add, ssl->heap); + AddPacketInfo(ssl, 0, handshake, input + *inOutIdx - add, + size + add, READ_PROTO, ssl->heap); AddLateRecordHeader(&ssl->curRL, &ssl->timeoutInfo); } #endif diff --git a/tests/api.c b/tests/api.c index 42102d1bd..92a7e4536 100644 --- a/tests/api.c +++ b/tests/api.c @@ -14299,7 +14299,7 @@ static void test_wolfSSL_ERR_peek_last_error_line(void) start_thread(test_server_nofail, &server_args, &serverThread); wait_tcp_ready(&server_args); - test_client_nofail(&client_args); + test_client_nofail(&client_args, NULL); join_thread(serverThread); FreeTcpReady(&ready); diff --git a/wolfssl/internal.h b/wolfssl/internal.h index 6a664adbb..ecd24fa46 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -108,8 +108,10 @@ #include -#ifdef WOLFSSL_CALLBACKS +#if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) #include +#endif +#ifdef WOLFSSL_CALLBACKS #include #endif @@ -1178,7 +1180,9 @@ enum Misc { PREV_ORDER = -1, /* Sequence number is in previous epoch. */ PEER_ORDER = 1, /* Peer sequence number for verify. */ - CUR_ORDER = 0 /* Current sequence number. */ + CUR_ORDER = 0, /* Current sequence number. */ + WRITE_PROTO = 1, /* writing a protocol message */ + READ_PROTO = 0 /* reading a protocol message */ }; @@ -3415,8 +3419,8 @@ struct WOLFSSL { #endif /* WOLFSSL_DTLS_DROP_STATS */ #endif /* WOLFSSL_DTLS */ #ifdef WOLFSSL_CALLBACKS - HandShakeInfo handShakeInfo; /* info saved during handshake */ TimeoutInfo timeoutInfo; /* info saved during handshake */ + HandShakeInfo handShakeInfo; /* info saved during handshake */ #endif #ifdef OPENSSL_EXTRA SSL_Msg_Cb protoMsgCb; /* inspect protocol message callback */ @@ -3589,20 +3593,21 @@ typedef struct EncryptedInfo { #endif -#ifdef WOLFSSL_CALLBACKS +#if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) WOLFSSL_LOCAL void InitHandShakeInfo(HandShakeInfo*, WOLFSSL*); WOLFSSL_LOCAL void FinishHandShakeInfo(HandShakeInfo*); WOLFSSL_LOCAL - void AddPacketName(const char*, HandShakeInfo*); + void AddPacketName(WOLFSSL* ssl, const char* name); WOLFSSL_LOCAL void InitTimeoutInfo(TimeoutInfo*); WOLFSSL_LOCAL void FreeTimeoutInfo(TimeoutInfo*, void*); WOLFSSL_LOCAL - void AddPacketInfo(const char*, TimeoutInfo*, const byte*, int, void*); + void AddPacketInfo(WOLFSSL* ssl, const char* name, int type, + const byte* data, int sz, int write, void* heap); WOLFSSL_LOCAL void AddLateName(const char*, TimeoutInfo*); WOLFSSL_LOCAL