@@ -3234,3 +3234,38 @@ int test_tls13_cert_req_sigalgs(void)
32343234 return EXPECT_RESULT ();
32353235}
32363236
3237+ int test_tls13_derive_keys_no_key (void )
3238+ {
3239+ EXPECT_DECLS ;
3240+ #if defined(WOLFSSL_TLS13 ) && defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES )
3241+ struct test_memio_ctx test_ctx ;
3242+ WOLFSSL_CTX * ctx_c = NULL ;
3243+ WOLFSSL_CTX * ctx_s = NULL ;
3244+ WOLFSSL * ssl_c = NULL ;
3245+ WOLFSSL * ssl_s = NULL ;
3246+
3247+ XMEMSET (& test_ctx , 0 , sizeof (test_ctx ));
3248+ ExpectIntEQ (test_memio_setup (& test_ctx , & ctx_c , & ctx_s , & ssl_c , & ssl_s ,
3249+ wolfTLSv1_3_client_method , wolfTLSv1_3_server_method ), 0 );
3250+
3251+ /* DeriveTls13Keys with no_key should succeed (skip secret derivation,
3252+ * only derive keys/IVs from existing secrets). This is used with early
3253+ * data to derive keys without re-deriving the secrets. */
3254+ ExpectIntEQ (DeriveTls13Keys (ssl_s , no_key , DECRYPT_SIDE_ONLY , 0 ), 0 );
3255+ ExpectIntEQ (DeriveTls13Keys (ssl_s , no_key , ENCRYPT_SIDE_ONLY , 0 ), 0 );
3256+ ExpectIntEQ (DeriveTls13Keys (ssl_c , no_key , ENCRYPT_AND_DECRYPT_SIDE , 0 ),
3257+ 0 );
3258+
3259+ /* Unknown secret type should return BAD_FUNC_ARG */
3260+ ExpectIntEQ (DeriveTls13Keys (ssl_c , -1 , ENCRYPT_SIDE_ONLY , 0 ),
3261+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
3262+
3263+ wolfSSL_free (ssl_c );
3264+ wolfSSL_free (ssl_s );
3265+ wolfSSL_CTX_free (ctx_c );
3266+ wolfSSL_CTX_free (ctx_s );
3267+ #endif
3268+
3269+ return EXPECT_RESULT ();
3270+ }
3271+
0 commit comments