@@ -17609,7 +17609,9 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1760917609 if (ssl->msgsReceived.got_certificate_status ||
1761017610 ssl->msgsReceived.got_server_key_exchange ||
1761117611 ssl->msgsReceived.got_certificate_request ||
17612- ssl->msgsReceived.got_server_hello_done) {
17612+ ssl->msgsReceived.got_server_hello_done ||
17613+ ssl->msgsReceived.got_change_cipher ||
17614+ ssl->msgsReceived.got_finished) {
1761317615 WOLFSSL_MSG("Cert received in wrong order");
1761417616 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1761517617 return OUT_OF_ORDER_E;
@@ -17650,19 +17652,21 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1765017652 return DUPLICATE_MSG_E;
1765117653 }
1765217654
17653- if (ssl->msgsReceived.got_certificate == 0 ) {
17655+ if (! ssl->msgsReceived.got_certificate) {
1765417656 WOLFSSL_MSG("No Certificate before CertificateStatus");
1765517657 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1765617658 return OUT_OF_ORDER_E;
1765717659 }
17658- if (ssl->msgsReceived.got_server_key_exchange != 0 ) {
17660+ if (ssl->msgsReceived.got_server_key_exchange) {
1765917661 WOLFSSL_MSG("CertificateStatus after ServerKeyExchange");
1766017662 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1766117663 return OUT_OF_ORDER_E;
1766217664 }
1766317665 if (ssl->msgsReceived.got_server_key_exchange ||
1766417666 ssl->msgsReceived.got_certificate_request ||
17665- ssl->msgsReceived.got_server_hello_done) {
17667+ ssl->msgsReceived.got_server_hello_done ||
17668+ ssl->msgsReceived.got_change_cipher ||
17669+ ssl->msgsReceived.got_finished) {
1766617670 WOLFSSL_MSG("CertificateStatus received in wrong order");
1766717671 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1766817672 return OUT_OF_ORDER_E;
@@ -17686,13 +17690,25 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1768617690 WOLFSSL_ERROR_VERBOSE(DUPLICATE_MSG_E);
1768717691 return DUPLICATE_MSG_E;
1768817692 }
17689- if (ssl->msgsReceived.got_server_hello == 0 ) {
17693+ if (! ssl->msgsReceived.got_server_hello) {
1769017694 WOLFSSL_MSG("No ServerHello before ServerKeyExchange");
1769117695 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1769217696 return OUT_OF_ORDER_E;
1769317697 }
17698+ if (!ssl->msgsReceived.got_certificate) {
17699+ if (ssl->specs.kea != psk_kea &&
17700+ ssl->specs.kea != dhe_psk_kea &&
17701+ ssl->specs.kea != ecdhe_psk_kea &&
17702+ !ssl->options.usingAnon_cipher) {
17703+ WOLFSSL_MSG("No Certificate before ServerKeyExchange");
17704+ WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17705+ return OUT_OF_ORDER_E;
17706+ }
17707+ }
1769417708 if (ssl->msgsReceived.got_certificate_request ||
17695- ssl->msgsReceived.got_server_hello_done) {
17709+ ssl->msgsReceived.got_server_hello_done ||
17710+ ssl->msgsReceived.got_change_cipher ||
17711+ ssl->msgsReceived.got_finished) {
1769617712 WOLFSSL_MSG("ServerKeyExchange received in wrong order");
1769717713 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1769817714 return OUT_OF_ORDER_E;
@@ -17716,11 +17732,16 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1771617732 WOLFSSL_ERROR_VERBOSE(DUPLICATE_MSG_E);
1771717733 return DUPLICATE_MSG_E;
1771817734 }
17719- if (ssl->msgsReceived.got_server_hello == 0 ) {
17735+ if (! ssl->msgsReceived.got_server_hello) {
1772017736 WOLFSSL_MSG("No ServerHello before CertificateRequest");
1772117737 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1772217738 return OUT_OF_ORDER_E;
1772317739 }
17740+ if (!ssl->msgsReceived.got_certificate) {
17741+ WOLFSSL_MSG("No Certificate before CertificateRequest");
17742+ WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17743+ return OUT_OF_ORDER_E;
17744+ }
1772417745 if (!ssl->options.resuming && ssl->specs.kea != rsa_kea &&
1772517746 (ssl->specs.kea != ecc_diffie_hellman_kea ||
1772617747 !ssl->specs.static_ecdh) &&
@@ -17730,12 +17751,9 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1773017751 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1773117752 return OUT_OF_ORDER_E;
1773217753 }
17733- if (!ssl->msgsReceived.got_certificate) {
17734- WOLFSSL_MSG("No Certificate before CertificateRequest");
17735- WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17736- return OUT_OF_ORDER_E;
17737- }
17738- if (ssl->msgsReceived.got_server_hello_done) {
17754+ if (ssl->msgsReceived.got_server_hello_done ||
17755+ ssl->msgsReceived.got_change_cipher ||
17756+ ssl->msgsReceived.got_finished) {
1773917757 WOLFSSL_MSG("CertificateRequest received in wrong order");
1774017758 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1774117759 return OUT_OF_ORDER_E;
@@ -17761,7 +17779,7 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1776117779 }
1776217780 ssl->msgsReceived.got_server_hello_done = 1;
1776317781
17764- if (ssl->msgsReceived.got_certificate == 0 ) {
17782+ if (! ssl->msgsReceived.got_certificate) {
1776517783 if (ssl->specs.kea == psk_kea ||
1776617784 ssl->specs.kea == dhe_psk_kea ||
1776717785 ssl->specs.kea == ecdhe_psk_kea ||
@@ -17774,7 +17792,7 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1777417792 return OUT_OF_ORDER_E;
1777517793 }
1777617794 }
17777- if (ssl->msgsReceived.got_server_key_exchange == 0 ) {
17795+ if (! ssl->msgsReceived.got_server_key_exchange) {
1777817796 int pskNoServerHint = 0; /* not required in this case */
1777917797
1778017798 #ifndef NO_PSK
@@ -17796,7 +17814,7 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1779617814 }
1779717815#if defined(HAVE_CERTIFICATE_STATUS_REQUEST) || \
1779817816 defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2)
17799- if (ssl->msgsReceived.got_certificate_status == 0 ) {
17817+ if (! ssl->msgsReceived.got_certificate_status) {
1780017818 int csrRet = 0;
1780117819#ifdef HAVE_CERTIFICATE_STATUS_REQUEST
1780217820 if (csrRet == 0 && ssl->status_request) {
@@ -17842,6 +17860,12 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1784217860 }
1784317861 }
1784417862#endif
17863+ if (ssl->msgsReceived.got_change_cipher ||
17864+ ssl->msgsReceived.got_finished) {
17865+ WOLFSSL_MSG("ServerHelloDone received in wrong order");
17866+ WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17867+ return OUT_OF_ORDER_E;
17868+ }
1784517869 break;
1784617870#endif
1784717871
@@ -17859,7 +17883,12 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1785917883 WOLFSSL_ERROR_VERBOSE(DUPLICATE_MSG_E);
1786017884 return DUPLICATE_MSG_E;
1786117885 }
17862- if ( ssl->msgsReceived.got_certificate == 0) {
17886+ if (!ssl->msgsReceived.got_client_key_exchange) {
17887+ WOLFSSL_MSG("No ClientKeyExchange before CertVerify");
17888+ WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17889+ return OUT_OF_ORDER_E;
17890+ }
17891+ if (!ssl->msgsReceived.got_certificate) {
1786317892 WOLFSSL_MSG("No Cert before CertVerify");
1786417893 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1786517894 return OUT_OF_ORDER_E;
@@ -17888,7 +17917,7 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1788817917 WOLFSSL_ERROR_VERBOSE(DUPLICATE_MSG_E);
1788917918 return DUPLICATE_MSG_E;
1789017919 }
17891- if (ssl->msgsReceived.got_client_hello == 0 ) {
17920+ if (! ssl->msgsReceived.got_client_hello) {
1789217921 WOLFSSL_MSG("No ClientHello before ClientKeyExchange");
1789317922 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1789417923 return OUT_OF_ORDER_E;
@@ -17919,7 +17948,7 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1791917948 }
1792017949 }
1792117950#endif
17922- if (ssl->msgsReceived.got_change_cipher == 0 ) {
17951+ if (! ssl->msgsReceived.got_change_cipher) {
1792317952 WOLFSSL_MSG("Finished received before ChangeCipher");
1792417953 WOLFSSL_ERROR_VERBOSE(NO_CHANGE_CIPHER_E);
1792517954 return NO_CHANGE_CIPHER_E;
@@ -17940,62 +17969,63 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
1794017969
1794117970#ifndef NO_WOLFSSL_CLIENT
1794217971 if (ssl->options.side == WOLFSSL_CLIENT_END) {
17972+ if (!ssl->msgsReceived.got_server_hello) {
17973+ WOLFSSL_MSG("ChangeCipherSpec received in wrong order");
17974+ WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17975+ return OUT_OF_ORDER_E;
17976+ }
1794317977 if (!ssl->options.resuming) {
17944- if (ssl->msgsReceived.got_server_hello_done == 0 ) {
17978+ if (! ssl->msgsReceived.got_server_hello_done) {
1794517979 WOLFSSL_MSG("No ServerHelloDone before ChangeCipher");
1794617980 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1794717981 return OUT_OF_ORDER_E;
1794817982 }
1794917983 }
17950- else {
17951- if (ssl->msgsReceived.got_server_hello == 0) {
17952- WOLFSSL_MSG("No ServerHello before ChangeCipher on "
17953- "Resume");
17954- WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17955- return OUT_OF_ORDER_E;
17956- }
17984+ #ifdef HAVE_SESSION_TICKET
17985+ if (ssl->expect_session_ticket) {
17986+ WOLFSSL_MSG("Expected session ticket missing");
17987+ #ifdef WOLFSSL_DTLS
17988+ if (ssl->options.dtls) {
17989+ WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17990+ return OUT_OF_ORDER_E;
17991+ }
17992+ #endif
17993+ WOLFSSL_ERROR_VERBOSE(SESSION_TICKET_EXPECT_E);
17994+ return SESSION_TICKET_EXPECT_E;
1795717995 }
17958- #ifdef HAVE_SESSION_TICKET
17959- if (ssl->expect_session_ticket) {
17960- WOLFSSL_MSG("Expected session ticket missing");
17961- #ifdef WOLFSSL_DTLS
17962- if (ssl->options.dtls) {
17963- WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17964- return OUT_OF_ORDER_E;
17965- }
17966- #endif
17967- WOLFSSL_ERROR_VERBOSE(SESSION_TICKET_EXPECT_E);
17968- return SESSION_TICKET_EXPECT_E;
17969- }
17970- #endif
17996+ #endif
1797117997 }
1797217998#endif
1797317999#ifndef NO_WOLFSSL_SERVER
1797418000 if (ssl->options.side == WOLFSSL_SERVER_END) {
18001+ if (!ssl->msgsReceived.got_client_hello) {
18002+ WOLFSSL_MSG("ChangeCipherSpec received in wrong order");
18003+ WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
18004+ return OUT_OF_ORDER_E;
18005+ }
1797518006 if (!ssl->options.resuming &&
17976- ssl->msgsReceived.got_client_key_exchange == 0 ) {
18007+ ! ssl->msgsReceived.got_client_key_exchange) {
1797718008 WOLFSSL_MSG("No ClientKeyExchange before ChangeCipher");
1797818009 WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
1797918010 return OUT_OF_ORDER_E;
1798018011 }
17981- #ifndef NO_CERTS
17982- if (ssl->options.verifyPeer &&
18012+ #ifndef NO_CERTS
18013+ if (ssl->options.verifyPeer &&
1798318014 ssl->options.havePeerCert) {
17984-
17985- if (!ssl->options.havePeerVerify ||
17986- !ssl->msgsReceived.got_certificate_verify) {
17987- WOLFSSL_MSG("client didn't send cert verify");
17988- #ifdef WOLFSSL_DTLS
17989- if (ssl->options.dtls) {
17990- WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
17991- return OUT_OF_ORDER_E;
17992- }
17993- #endif
17994- WOLFSSL_ERROR_VERBOSE(NO_PEER_VERIFY);
17995- return NO_PEER_VERIFY;
17996- }
18015+ if (!ssl->options.havePeerVerify ||
18016+ !ssl->msgsReceived.got_certificate_verify) {
18017+ WOLFSSL_MSG("client didn't send cert verify");
18018+ #ifdef WOLFSSL_DTLS
18019+ if (ssl->options.dtls) {
18020+ WOLFSSL_ERROR_VERBOSE(OUT_OF_ORDER_E);
18021+ return OUT_OF_ORDER_E;
18022+ }
18023+ #endif
18024+ WOLFSSL_ERROR_VERBOSE(NO_PEER_VERIFY);
18025+ return NO_PEER_VERIFY;
1799718026 }
17998- #endif
18027+ }
18028+ #endif
1799918029 }
1800018030#endif /* !NO_WOLFSSL_SERVER */
1800118031 if (ssl->options.dtls)
0 commit comments