@@ -2318,3 +2318,140 @@ int test_tls13_hrr_different_cs(void)
23182318#endif
23192319 return EXPECT_RESULT ();
23202320}
2321+
2322+ #if defined(WOLFSSL_TLS13 ) && !defined(NO_RSA ) && !defined(NO_WOLFSSL_SERVER )
2323+ /* Called when writing. */
2324+ static int MbSend (WOLFSSL * ssl , char * buf , int sz , void * ctx )
2325+ {
2326+ (void )ssl ;
2327+ (void )buf ;
2328+ (void )ctx ;
2329+
2330+ return sz ;
2331+ }
2332+ /* Called when reading. */
2333+ static int MbRecv (WOLFSSL * ssl , char * buf , int sz , void * ctx )
2334+ {
2335+ WOLFSSL_BUFFER_INFO * msg = (WOLFSSL_BUFFER_INFO * )ctx ;
2336+ int len = (int )msg -> length ;
2337+
2338+ (void )ssl ;
2339+ (void )sz ;
2340+
2341+ /* Pass back as much of message as will fit in buffer. */
2342+ if (len > sz )
2343+ len = sz ;
2344+ XMEMCPY (buf , msg -> buffer , len );
2345+ /* Move over returned data. */
2346+ msg -> buffer += len ;
2347+ msg -> length -= len ;
2348+
2349+ /* Amount actually copied. */
2350+ return len ;
2351+ }
2352+ #endif
2353+
2354+ int test_tls13_plaintext_alert (void )
2355+ {
2356+ EXPECT_DECLS ;
2357+ #if defined(WOLFSSL_TLS13 ) && !defined(NO_RSA ) && !defined(NO_WOLFSSL_SERVER )
2358+ byte clientMsgs [] = {
2359+ /* Client Hello */
2360+ 0x16 , 0x03 , 0x03 , 0x01 , 0x9b , 0x01 , 0x00 , 0x01 ,
2361+ 0x97 , 0x03 , 0x03 , 0xf4 , 0x65 , 0xbd , 0x22 , 0xfe ,
2362+ 0x6e , 0xab , 0x66 , 0xdd , 0xcf , 0xe9 , 0x65 , 0x55 ,
2363+ 0xe8 , 0xdf , 0xc3 , 0x8e , 0x4b , 0x00 , 0xbc , 0xf8 ,
2364+ 0x23 , 0x57 , 0x1b , 0xa0 , 0xc8 , 0xa9 , 0xe2 , 0x8c ,
2365+ 0x91 , 0x6e , 0xf9 , 0x20 , 0xf7 , 0x5c , 0xc5 , 0x5b ,
2366+ 0x75 , 0x8c , 0x47 , 0x0a , 0x0e , 0xc4 , 0x1a , 0xda ,
2367+ 0xef , 0x75 , 0xe5 , 0x21 , 0x00 , 0x00 , 0x00 , 0x00 ,
2368+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
2369+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x13 , 0x01 ,
2370+ 0x13 , 0x02 , 0x01 , 0x00 , 0x01 , 0x4a , 0x00 , 0x2d ,
2371+ 0x00 , 0x03 , 0x02 , 0x00 , 0x01 , 0x00 , 0x33 , 0x00 ,
2372+ 0x47 , 0x00 , 0x45 , 0x00 , 0x17 , 0x00 , 0x41 , 0x04 ,
2373+ 0x90 , 0xfc , 0xe2 , 0x97 , 0x05 , 0x7c , 0xb5 , 0x23 ,
2374+ 0x5d , 0x5f , 0x5b , 0xcd , 0x0c , 0x1e , 0xe0 , 0xe9 ,
2375+ 0xab , 0x38 , 0x6b , 0x1e , 0x20 , 0x5c , 0x1c , 0x90 ,
2376+ 0x2a , 0x9e , 0x68 , 0x8e , 0x70 , 0x05 , 0x10 , 0xa8 ,
2377+ 0x02 , 0x1b , 0xf9 , 0x5c , 0xef , 0xc9 , 0xaf , 0xca ,
2378+ 0x1a , 0x3b , 0x16 , 0x8b , 0xe4 , 0x1b , 0x3c , 0x15 ,
2379+ 0xb8 , 0x0d , 0xbd , 0xaf , 0x62 , 0x8d , 0xa7 , 0x13 ,
2380+ 0xa0 , 0x7c , 0xe0 , 0x59 , 0x0c , 0x4f , 0x8a , 0x6d ,
2381+ 0x00 , 0x2b , 0x00 , 0x03 , 0x02 , 0x03 , 0x04 , 0x00 ,
2382+ 0x0d , 0x00 , 0x20 , 0x00 , 0x1e , 0x06 , 0x03 , 0x05 ,
2383+ 0x03 , 0x04 , 0x03 , 0x02 , 0x03 , 0x08 , 0x06 , 0x08 ,
2384+ 0x0b , 0x08 , 0x05 , 0x08 , 0x0a , 0x08 , 0x04 , 0x08 ,
2385+ 0x09 , 0x06 , 0x01 , 0x05 , 0x01 , 0x04 , 0x01 , 0x03 ,
2386+ 0x01 , 0x02 , 0x01 , 0x00 , 0x0a , 0x00 , 0x04 , 0x00 ,
2387+ 0x02 , 0x00 , 0x17 , 0x00 , 0x16 , 0x00 , 0x00 , 0x00 ,
2388+ 0x23 , 0x00 , 0x00 , 0x00 , 0x29 , 0x00 , 0xb9 , 0x00 ,
2389+ 0x94 , 0x00 , 0x8e , 0x0f , 0x12 , 0xfa , 0x84 , 0x1f ,
2390+ 0x76 , 0x94 , 0xd7 , 0x09 , 0x5e , 0xad , 0x08 , 0x51 ,
2391+ 0xb6 , 0x80 , 0x28 , 0x31 , 0x8b , 0xfd , 0xc6 , 0xbd ,
2392+ 0x9e , 0xf5 , 0x3b , 0x4d , 0x02 , 0xbe , 0x1d , 0x73 ,
2393+ 0xea , 0x13 , 0x68 , 0x00 , 0x4c , 0xfd , 0x3d , 0x48 ,
2394+ 0x51 , 0xf9 , 0x06 , 0xbb , 0x92 , 0xed , 0x42 , 0x9f ,
2395+ 0x7f , 0x2c , 0x73 , 0x9f , 0xd9 , 0xb4 , 0xef , 0x05 ,
2396+ 0x26 , 0x5b , 0x60 , 0x5c , 0x0a , 0xfc , 0xa3 , 0xbd ,
2397+ 0x2d , 0x2d , 0x8b , 0xf9 , 0xaa , 0x5c , 0x96 , 0x3a ,
2398+ 0xf2 , 0xec , 0xfa , 0xe5 , 0x57 , 0x2e , 0x87 , 0xbe ,
2399+ 0x27 , 0xc5 , 0x3d , 0x4f , 0x5d , 0xdd , 0xde , 0x1c ,
2400+ 0x1b , 0xb3 , 0xcc , 0x27 , 0x27 , 0x57 , 0x5a , 0xd9 ,
2401+ 0xea , 0x99 , 0x27 , 0x23 , 0xa6 , 0x0e , 0xea , 0x9c ,
2402+ 0x0d , 0x85 , 0xcb , 0x72 , 0xeb , 0xd7 , 0x93 , 0xe3 ,
2403+ 0xfe , 0xf7 , 0x5c , 0xc5 , 0x5b , 0x75 , 0x8c , 0x47 ,
2404+ 0x0a , 0x0e , 0xc4 , 0x1a , 0xda , 0xef , 0x75 , 0xe5 ,
2405+ 0x21 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
2406+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
2407+ 0x00 , 0xfb , 0x92 , 0xce , 0xaa , 0x00 , 0x21 , 0x20 ,
2408+ 0xcb , 0x73 , 0x25 , 0x80 , 0x46 , 0x78 , 0x4f , 0xe5 ,
2409+ 0x34 , 0xf6 , 0x91 , 0x13 , 0x7f , 0xc8 , 0x8d , 0xdc ,
2410+ 0x81 , 0x04 , 0xb7 , 0x0d , 0x49 , 0x85 , 0x2e , 0x12 ,
2411+ 0x7a , 0x07 , 0x23 , 0xe9 , 0x13 , 0xa4 , 0x6d , 0x8c ,
2412+ /* Plaintext alert - not allowed once encryption is started. */
2413+ 0x15 , 0x03 , 0x03 , 0x00 , 0x02 , 0x01 , 0x00 ,
2414+ 0x15 , 0x03 , 0x03 , 0x00 , 0x02 , 0x02 , 0x0a ,
2415+ 0x15 , 0x03 , 0x03 , 0x00 , 0x02 , 0x01 , 0x00 ,
2416+ 0x15 , 0x03 , 0x03 , 0x00 , 0x02 , 0x02 , 0x00 ,
2417+ 0x15 , 0x03 , 0x03 , 0x00 , 0x02 , 0x01 , 0x00
2418+ };
2419+
2420+ WOLFSSL_CTX * ctx = NULL ;
2421+ WOLFSSL * ssl = NULL ;
2422+ WOLFSSL_BUFFER_INFO msg ;
2423+
2424+ /* Set up wolfSSL context. */
2425+ ExpectNotNull (ctx = wolfSSL_CTX_new (wolfTLSv1_3_server_method ()));
2426+ ExpectTrue (wolfSSL_CTX_use_certificate_file (ctx , svrCertFile ,
2427+ CERT_FILETYPE ));
2428+ ExpectTrue (wolfSSL_CTX_use_PrivateKey_file (ctx , svrKeyFile ,
2429+ CERT_FILETYPE ));
2430+ if (EXPECT_SUCCESS ()) {
2431+ wolfSSL_CTX_set_verify (ctx , WOLFSSL_VERIFY_NONE , NULL );
2432+ }
2433+ /* Read from 'msg'. */
2434+ wolfSSL_SetIORecv (ctx , MbRecv );
2435+ /* No where to send to - dummy sender. */
2436+ wolfSSL_SetIOSend (ctx , MbSend );
2437+
2438+ ExpectNotNull (ssl = wolfSSL_new (ctx ));
2439+ msg .buffer = clientMsgs ;
2440+ msg .length = (unsigned int )sizeof (clientMsgs );
2441+ if (EXPECT_SUCCESS ()) {
2442+ wolfSSL_SetIOReadCtx (ssl , & msg );
2443+ }
2444+ /* Alert will be ignored until too many. */
2445+ /* Read all message include CertificateVerify with invalid signature
2446+ * algorithm. */
2447+ ExpectIntEQ (wolfSSL_accept (ssl ), WC_NO_ERR_TRACE (WOLFSSL_FATAL_ERROR ));
2448+ /* Expect an invalid parameter error. */
2449+ ExpectIntEQ (wolfSSL_get_error (ssl , WOLFSSL_FATAL_ERROR ),
2450+ WC_NO_ERR_TRACE (ALERT_COUNT_E ));
2451+
2452+ wolfSSL_free (ssl );
2453+ wolfSSL_CTX_free (ctx );
2454+ #endif
2455+ return EXPECT_RESULT ();
2456+ }
2457+
0 commit comments