From 362d9bc43b73f243f21b159af5787e444009bc49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B2=81=E4=B8=80?= Date: Tue, 7 Nov 2023 16:26:40 +0800 Subject: [PATCH] [~] Fix key update error & add interop mode in demo_client --- demo/demo_client.c | 13 +++++++++++-- demo/demo_server.c | 1 + scripts/xquic_test.sh | 4 ++-- src/tls/xqc_crypto.c | 6 +++++- src/transport/xqc_conn.c | 4 ++-- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/demo/demo_client.c b/demo/demo_client.c index 64b59c2d8..3be283bbc 100644 --- a/demo/demo_client.c +++ b/demo/demo_client.c @@ -171,6 +171,9 @@ typedef struct xqc_demo_cli_quic_config_s { uint8_t mp_version; + /* support interop test */ + int is_interop_mode; + } xqc_demo_cli_quic_config_t; @@ -1575,6 +1578,7 @@ xqc_demo_cli_init_conneciton_settings(xqc_conn_settings_t* settings, settings->standby_path_probe_timeout = 1000; settings->multipath_version = args->quic_cfg.mp_version; settings->mp_ping_on = 1; + settings->is_interop_mode = args->quic_cfg.is_interop_mode; if (args->req_cfg.throttled_req != -1) { settings->enable_stream_rate_limit = 1; settings->recv_rate_bytes_per_sec = 0; @@ -1706,6 +1710,7 @@ xqc_demo_cli_usage(int argc, char *argv[]) " -u key update packet threshold\n" " -d do not save responses to files\n" " -M enable multipath\n" + " -o use interop mode\n" " -i interface to create a path. For instance, we can use '-i lo -i lo' to create two paths via lo.\n" " -w waiting N ms to start the first request.\n" " -P enable MPQUIC to return ACK_MPs on any paths.\n" @@ -1728,7 +1733,7 @@ void xqc_demo_cli_parse_args(int argc, char *argv[], xqc_demo_cli_client_args_t *args) { int ch = 0; - while ((ch = getopt(argc, argv, "a:p:c:Ct:S:0m:A:D:l:L:k:K:U:u:dMi:w:Ps:bZ:NQT:R:V:I:n:eE")) != -1) { + while ((ch = getopt(argc, argv, "a:p:c:Ct:S:0m:A:D:l:L:k:K:U:u:dMoi:w:Ps:bZ:NQT:R:V:I:n:eE")) != -1) { switch (ch) { /* server ip */ case 'a': @@ -1869,7 +1874,11 @@ xqc_demo_cli_parse_args(int argc, char *argv[], xqc_demo_cli_client_args_t *args printf("option multipath on\n"); args->net_cfg.multipath = 1; break; - + + case 'o': + printf("set interop mode\n"); + args->quic_cfg.is_interop_mode = 1; + break; case 'i': printf("option adding interface: %s\n", optarg); if (args->net_cfg.ifcnt < MAX_PATH_CNT) { diff --git a/demo/demo_server.c b/demo/demo_server.c index 1c685776b..0542a4de5 100644 --- a/demo/demo_server.c +++ b/demo/demo_server.c @@ -1301,6 +1301,7 @@ xqc_demo_svr_parse_args(int argc, char *argv[], xqc_demo_svr_args_t *args) case 'i': printf("set interop mode\n"); args->quic_cfg.is_interop_mode = 1; + break; case 'M': printf("option multipath enabled\n"); diff --git a/scripts/xquic_test.sh b/scripts/xquic_test.sh index 31df14314..34bb3f0b4 100644 --- a/scripts/xquic_test.sh +++ b/scripts/xquic_test.sh @@ -115,8 +115,8 @@ do_compile "XQC_OPENSSL_IS_BORINGSSL" run_test_case #run babassl -do_compile -run_test_case +# do_compile +# run_test_case run_gcov output_summary diff --git a/src/tls/xqc_crypto.c b/src/tls/xqc_crypto.c index 0429cf9fd..56e709a93 100644 --- a/src/tls/xqc_crypto.c +++ b/src/tls/xqc_crypto.c @@ -663,7 +663,11 @@ xqc_crypto_derive_updated_keys(xqc_crypto_t *crypto, xqc_key_type_t type) static uint8_t LABEL[] = "quic ku"; uint8_t dest_buf[XQC_MAX_KNP_LEN]; - ret = xqc_hkdf_expand_label(dest_buf, XQC_MAX_KNP_LEN, + if (current_ckm->secret.len > XQC_MAX_KNP_LEN) { + return -XQC_TLS_UPDATE_KEY_ERROR; + } + + ret = xqc_hkdf_expand_label(dest_buf, current_ckm->secret.len, current_ckm->secret.base, current_ckm->secret.len, LABEL, xqc_lengthof(LABEL), &crypto->md); if (ret != XQC_OK) { diff --git a/src/transport/xqc_conn.c b/src/transport/xqc_conn.c index 348a8ae37..66e12663e 100644 --- a/src/transport/xqc_conn.c +++ b/src/transport/xqc_conn.c @@ -325,8 +325,8 @@ xqc_conn_init_trans_settings(xqc_connection_t *conn) /* set local default setting values */ if (conn->conn_settings.is_interop_mode) { - ls->max_streams_bidi = 16; - ls->max_streams_uni = 16; + ls->max_streams_bidi = 128; + ls->max_streams_uni = 128; } else { ls->max_streams_bidi = 1024;