@@ -2483,3 +2483,83 @@ int test_tls13_ks_missing(void)
24832483#endif
24842484 return EXPECT_RESULT ();
24852485}
2486+
2487+ int test_key_share_mismatch (void )
2488+ {
2489+ EXPECT_DECLS ;
2490+ #if defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES ) && defined(WOLFSSL_TLS13 ) && \
2491+ defined(HAVE_SUPPORTED_CURVES ) && defined(HAVE_ECC ) && \
2492+ defined(BUILD_TLS_AES_128_GCM_SHA256 )
2493+ /* Taken from payload in https://github.com/wolfSSL/wolfssl/issues/9362 */
2494+ const byte ch1_bin [] = {
2495+ 0x16 , 0x03 , 0x03 , 0x00 , 0x96 , 0x01 , 0x00 , 0x00 , 0x92 , 0x03 , 0x03 , 0x01 ,
2496+ 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 ,
2497+ 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 ,
2498+ 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x20 , 0x03 , 0x03 , 0x03 , 0x03 ,
2499+ 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 ,
2500+ 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 ,
2501+ 0x03 , 0x03 , 0x03 , 0x03 , 0x00 , 0x02 , 0x13 , 0x01 , 0x01 , 0x00 , 0x00 , 0x47 ,
2502+ 0x00 , 0x0a , 0x00 , 0x08 , 0x00 , 0x06 , 0x00 , 0x18 , 0x00 , 0x17 , 0x00 , 0x1d ,
2503+ 0x00 , 0x0d , 0x00 , 0x06 , 0x00 , 0x04 , 0x04 , 0x01 , 0x08 , 0x04 , 0x00 , 0x33 ,
2504+ 0x00 , 0x26 , 0x00 , 0x24 , 0x00 , 0x1d , 0x00 , 0x20 , 0x07 , 0xaa , 0xff , 0x3e ,
2505+ 0x9f , 0xc1 , 0x67 , 0x27 , 0x55 , 0x44 , 0xf4 , 0xc3 , 0xa6 , 0xa1 , 0x7c , 0xd8 ,
2506+ 0x37 , 0xf2 , 0xec , 0x6e , 0x78 , 0xcd , 0x8a , 0x57 , 0xb1 , 0xe3 , 0xdf , 0xb3 ,
2507+ 0xcc , 0x03 , 0x5a , 0x76 , 0x00 , 0x2b , 0x00 , 0x03 , 0x02 , 0x03 , 0x04
2508+ };
2509+ const byte ch2_bin [] = {
2510+ 0x16 , 0x03 , 0x03 , 0x00 , 0xb7 , 0x01 , 0x00 , 0x00 , 0xb3 , 0x03 , 0x03 , 0x01 ,
2511+ 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 ,
2512+ 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 ,
2513+ 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x20 , 0x03 , 0x03 , 0x03 , 0x03 ,
2514+ 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 ,
2515+ 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 ,
2516+ 0x03 , 0x03 , 0x03 , 0x03 , 0x00 , 0x02 , 0x13 , 0x01 , 0x01 , 0x00 , 0x00 , 0x68 ,
2517+ 0x00 , 0x0a , 0x00 , 0x08 , 0x00 , 0x06 , 0x00 , 0x18 , 0x00 , 0x17 , 0x00 , 0x1d ,
2518+ 0x00 , 0x0d , 0x00 , 0x06 , 0x00 , 0x04 , 0x04 , 0x01 , 0x08 , 0x04 , 0x00 , 0x33 ,
2519+ 0x00 , 0x47 , 0x00 , 0x45 , 0x00 , 0x17 , 0x00 , 0x41 , 0x04 , 0x0c , 0x90 , 0x1d ,
2520+ 0x42 , 0x3c , 0x83 , 0x1c , 0xa8 , 0x5e , 0x27 , 0xc7 , 0x3c , 0x26 , 0x3b , 0xa1 ,
2521+ 0x32 , 0x72 , 0x1b , 0xb9 , 0xd7 , 0xa8 , 0x4c , 0x4f , 0x03 , 0x80 , 0xb2 , 0xa6 ,
2522+ 0x75 , 0x6f , 0xd6 , 0x01 , 0x33 , 0x1c , 0x88 , 0x70 , 0x23 , 0x4d , 0xec , 0x87 ,
2523+ 0x85 , 0x04 , 0xc1 , 0x74 , 0x14 , 0x4f , 0xa4 , 0xb1 , 0x4b , 0x66 , 0xa6 , 0x51 ,
2524+ 0x69 , 0x16 , 0x06 , 0xd8 , 0x17 , 0x3e , 0x55 , 0xbd , 0x37 , 0xe3 , 0x81 , 0x56 ,
2525+ 0x9e , 0x00 , 0x2b , 0x00 , 0x03 , 0x02 , 0x03 , 0x04
2526+ };
2527+ WOLFSSL_CTX * ctx_c = NULL , * ctx_s = NULL ;
2528+ WOLFSSL * ssl_c = NULL , * ssl_s = NULL ;
2529+ struct test_memio_ctx test_ctx ;
2530+ int client_group [] = {WOLFSSL_ECC_SECP521R1 };
2531+ int server_group [] = {WOLFSSL_ECC_SECP384R1 , WOLFSSL_ECC_SECP256R1 };
2532+
2533+ XMEMSET (& test_ctx , 0 , sizeof (test_ctx ));
2534+ ExpectIntEQ (test_memio_setup (& test_ctx , & ctx_c , & ctx_s , & ssl_c , & ssl_s ,
2535+ wolfTLSv1_3_client_method , wolfTLSv1_3_server_method ), 0 );
2536+ ExpectIntEQ (wolfSSL_set_groups (ssl_c ,
2537+ client_group , XELEM_CNT (client_group )), WOLFSSL_SUCCESS );
2538+ ExpectIntEQ (wolfSSL_set_groups (ssl_s ,
2539+ server_group , XELEM_CNT (server_group )), WOLFSSL_SUCCESS );
2540+ ExpectIntEQ (test_memio_do_handshake (ssl_c , ssl_s , 10 , NULL ), -1 );
2541+ ExpectIntEQ (wolfSSL_get_error (ssl_c , -1 ), BAD_KEY_SHARE_DATA );
2542+
2543+ wolfSSL_free (ssl_s );
2544+ ssl_s = NULL ;
2545+ XMEMSET (& test_ctx , 0 , sizeof (test_ctx ));
2546+ ExpectIntEQ (test_memio_setup (& test_ctx , NULL , & ctx_s , NULL , & ssl_s ,
2547+ NULL , wolfTLSv1_3_server_method ), 0 );
2548+ ExpectIntEQ (wolfSSL_set_groups (ssl_s ,
2549+ server_group , XELEM_CNT (server_group )), WOLFSSL_SUCCESS );
2550+ ExpectIntEQ (test_memio_inject_message (& test_ctx , 0 , (const char * )ch1_bin ,
2551+ sizeof (ch1_bin )), 0 );
2552+ ExpectIntEQ (wolfSSL_accept (ssl_s ), -1 );
2553+ ExpectIntEQ (wolfSSL_get_error (ssl_s , -1 ), WOLFSSL_ERROR_WANT_READ );
2554+ ExpectIntEQ (test_memio_inject_message (& test_ctx , 0 , (const char * )ch2_bin ,
2555+ sizeof (ch2_bin )), 0 );
2556+ ExpectIntEQ (wolfSSL_accept (ssl_s ), -1 );
2557+ ExpectIntEQ (wolfSSL_get_error (ssl_s , -1 ), BAD_KEY_SHARE_DATA );
2558+
2559+ wolfSSL_free (ssl_c );
2560+ wolfSSL_free (ssl_s );
2561+ wolfSSL_CTX_free (ctx_c );
2562+ wolfSSL_CTX_free (ctx_s );
2563+ #endif
2564+ return EXPECT_RESULT ();
2565+ }
0 commit comments