Skip to content

Commit 99aac47

Browse files
committed
sso
1 parent 633463f commit 99aac47

19 files changed

Lines changed: 1214 additions & 67 deletions

File tree

lib/tls/schannel/schannel-quic.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -535,13 +535,22 @@ lws_tls_quic_advance_handshake(struct lws *wsi, int level,
535535
* hands us the symmetric algorithm and key size directly;
536536
* it does not currently negotiate ChaCha20-Poly1305, but
537537
* map it too for completeness.
538+
*
539+
* SEC_TRAFFIC_SECRETS.KeySize is the symmetric key size
540+
* in BYTES (matching msquic's QuicParseTrafficSecrets,
541+
* which switches on 16 / 32), not bits. The field name
542+
* is fixed by the Windows SDK header; copy it into a
543+
* local whose name carries the units so the comparison
544+
* cannot be misread as bits again.
538545
*/
539546
if (!wcscmp(secrets->SymmetricAlgId, L"CHACHA20_POLY1305"))
540547
wsi->tls.quic_aead = LWS_TLS_QUIC_AEAD_CHACHA20_POLY1305;
541-
else if (!wcscmp(secrets->SymmetricAlgId, L"AES"))
542-
wsi->tls.quic_aead = secrets->KeySize == 256 ?
548+
else if (!wcscmp(secrets->SymmetricAlgId, L"AES")) {
549+
unsigned short key_size_bytes = secrets->KeySize;
550+
wsi->tls.quic_aead = key_size_bytes == 32 ?
543551
LWS_TLS_QUIC_AEAD_AES_256_GCM :
544552
LWS_TLS_QUIC_AEAD_AES_128_GCM;
553+
}
545554

546555
/* SChannel outputs `1` and `2` for BOTH Handshake and Application secrets. */
547556
if (type == 1 || type == 2) {

minimal-examples-lowlevel/api-tests/api-test-secure-streams/CMakeLists.txt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require_lws_config(USE_WOLFSSL 0 requirements)
1414
if (requirements)
1515

1616
add_executable(${PROJECT_NAME} main.c)
17-
17+
1818
if (LWS_CTEST_INTERNET_AVAILABLE)
1919
add_test(NAME api-test-secure-streams COMMAND ${PROJECT_NAME})
2020
set_tests_properties(api-test-secure-streams
@@ -23,6 +23,41 @@ if (requirements)
2323
TIMEOUT 90)
2424
endif()
2525

26+
#
27+
# Local-server variant: runs the same test logic against a local
28+
# lws-minimal-http-server-httpbin over TLS, so it does not need any
29+
# external network egress. Suitable for IPv6-only / no-egress CI.
30+
#
31+
32+
if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32 AND LWS_WITH_SERVER)
33+
lws_get_free_port(PORT_ATS_SRV_TLS)
34+
35+
configure_file(policy-local.json.in policy-local.json @ONLY)
36+
37+
add_test(NAME st_ats_hbin
38+
COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh
39+
ats_hbin $<TARGET_FILE:lws-minimal-http-server-httpbin>
40+
-s -p ${PORT_ATS_SRV_TLS})
41+
add_test(NAME ki_ats_hbin
42+
COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh
43+
ats_hbin $<TARGET_FILE_NAME:lws-minimal-http-server-httpbin>
44+
-p ${PORT_ATS_SRV_TLS})
45+
set_tests_properties(st_ats_hbin PROPERTIES
46+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples-lowlevel/http-server/minimal-http-server-tls
47+
FIXTURES_SETUP ats_hbin
48+
TIMEOUT 800
49+
ENVIRONMENT "SAI_LIST_PORT=${PORT_ATS_SRV_TLS}")
50+
set_tests_properties(ki_ats_hbin PROPERTIES FIXTURES_CLEANUP ats_hbin)
51+
52+
add_test(NAME api-test-secure-streams-local
53+
COMMAND ${PROJECT_NAME}
54+
-c ${CMAKE_CURRENT_BINARY_DIR}/policy-local.json)
55+
set_tests_properties(api-test-secure-streams-local PROPERTIES
56+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples-lowlevel/api-tests/api-test-secure-streams
57+
FIXTURES_REQUIRED "ats_hbin"
58+
TIMEOUT 90)
59+
endif()
60+
2661
if (websockets_shared)
2762
target_link_libraries(${PROJECT_NAME} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS})
2863
add_dependencies(${PROJECT_NAME} websockets_shared)

minimal-examples-lowlevel/api-tests/api-test-secure-streams/main.c

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ static int interrupted, bad = 1;
1717
static lws_state_notify_link_t nl;
1818
static struct lws_context *context;
1919

20+
enum {
21+
LWS_SW_C,
22+
LWS_SW_HELP,
23+
};
24+
25+
static const struct lws_switches switches[] = {
26+
[LWS_SW_C] = { "-c", "Policy JSON filepath" },
27+
[LWS_SW_HELP] = { "--help", "Show this help information" },
28+
};
29+
2030
static const char * const default_ss_policy =
2131
"{"
2232
"\"release\":" "\"01234567\","
@@ -397,8 +407,16 @@ sigint_handler(int sig)
397407
int main(int argc, const char **argv)
398408
{
399409
struct lws_context_creation_info info;
410+
const char *pp;
400411
int n = 0;
401412

413+
(void)switches;
414+
415+
if ((argc == 1) || lws_cmdline_option(argc, argv, switches[LWS_SW_HELP].sw)) {
416+
lws_switches_print_help(argv[0], switches, LWS_ARRAY_SIZE(switches));
417+
return 0;
418+
}
419+
402420
signal(SIGINT, sigint_handler);
403421

404422
lws_context_info_defaults(&info, NULL);lws_cmdline_option_handle_builtin(argc, argv, &info);
@@ -409,7 +427,17 @@ int main(int argc, const char **argv)
409427

410428
info.fd_limit_per_thread = 1 + 6 + 1;
411429
info.port = CONTEXT_PORT_NO_LISTEN;
412-
info.pss_policies_json = default_ss_policy;
430+
431+
/*
432+
* If we're given a policy JSON filepath, use it; otherwise fall back to
433+
* the built-in default policy (which reaches out to libwebsockets.org).
434+
*/
435+
436+
if ((pp = lws_cmdline_option(argc, argv, switches[LWS_SW_C].sw)))
437+
info.pss_policies_json = pp;
438+
else
439+
info.pss_policies_json = default_ss_policy;
440+
413441
info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS |
414442
LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT |
415443
LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW;
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
{
2+
"release": "01234567",
3+
"product": "myproduct",
4+
"schema-version": 1,
5+
"retry": [
6+
{
7+
"default": {
8+
"backoff": [ 1000, 2000, 3000, 5000, 10000 ],
9+
"conceal": 5,
10+
"jitterpc": 20,
11+
"svalidping": 30,
12+
"svalidhup": 35
13+
}
14+
}
15+
],
16+
"certs": [
17+
{
18+
"localhost_100y": "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"
19+
}
20+
],
21+
"trust_stores": [
22+
{
23+
"name": "local_test",
24+
"stack": [ "localhost_100y" ]
25+
}
26+
],
27+
"s": [
28+
{
29+
"httpbin_get": {
30+
"endpoint": "@LWS_CTEST_SERVER_RESOLVE@",
31+
"port": @PORT_ATS_SRV_TLS@,
32+
"protocol": "h1",
33+
"http_method": "GET",
34+
"http_url": "/httpbin/bytes/2000",
35+
"tls": true,
36+
"opportunistic": true,
37+
"retry": "default",
38+
"tls_trust_store": "local_test"
39+
}
40+
},
41+
{
42+
"httpbin_get404": {
43+
"endpoint": "@LWS_CTEST_SERVER_RESOLVE@",
44+
"port": @PORT_ATS_SRV_TLS@,
45+
"protocol": "h1",
46+
"http_method": "GET",
47+
"http_url": "/httpbin/status/403",
48+
"tls": true,
49+
"opportunistic": true,
50+
"retry": "default",
51+
"tls_trust_store": "local_test"
52+
}
53+
},
54+
{
55+
"httpbin_post": {
56+
"endpoint": "@LWS_CTEST_SERVER_RESOLVE@",
57+
"port": @PORT_ATS_SRV_TLS@,
58+
"protocol": "h1",
59+
"http_method": "POST",
60+
"http_url": "/httpbin/bytes/2000",
61+
"tls": true,
62+
"opportunistic": true,
63+
"retry": "default",
64+
"tls_trust_store": "local_test"
65+
}
66+
}
67+
]
68+
}

minimal-examples-lowlevel/secure-streams/minimal-secure-streams-stress/CMakeLists.txt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,43 @@ if (requirements)
5959
set_tests_properties(ssstress-warmcat PROPERTIES FIXTURES_REQUIRED "res_sspcmin")
6060
endif()
6161

62+
#
63+
# Local-server variant: runs against a local
64+
# lws-minimal-http-server-httpbin over TLS, so it does not need
65+
# any external network egress. Suitable for IPv6-only / no-egress CI.
66+
#
67+
68+
if (LWS_WITH_SERVER)
69+
lws_get_free_port(PORT_SS_SRV_TLS)
70+
71+
configure_file(policy-local.json.in policy-local.json @ONLY)
72+
73+
add_test(NAME st_ss_hbin
74+
COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh
75+
ss_hbin $<TARGET_FILE:lws-minimal-http-server-httpbin>
76+
-s -p ${PORT_SS_SRV_TLS})
77+
add_test(NAME ki_ss_hbin
78+
COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh
79+
ss_hbin $<TARGET_FILE_NAME:lws-minimal-http-server-httpbin>
80+
-p ${PORT_SS_SRV_TLS})
81+
set_tests_properties(st_ss_hbin PROPERTIES
82+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples-lowlevel/http-server/minimal-http-server-tls
83+
FIXTURES_SETUP ss_hbin
84+
TIMEOUT 800
85+
ENVIRONMENT "SAI_LIST_PORT=${PORT_SS_SRV_TLS}")
86+
set_tests_properties(ki_ss_hbin PROPERTIES FIXTURES_CLEANUP ss_hbin)
87+
88+
add_test(NAME ssstress-local
89+
COMMAND lws-minimal-secure-streams-stress
90+
--policy ${CMAKE_CURRENT_BINARY_DIR}/policy-local.json
91+
--cpd-bypass
92+
-c 2 --budget 3 --timeout_ms 50000)
93+
set_tests_properties(ssstress-local PROPERTIES
94+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples-lowlevel/secure-streams/minimal-secure-streams-stress
95+
FIXTURES_REQUIRED "ss_hbin"
96+
TIMEOUT 300)
97+
endif()
98+
6299
if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API)
63100

64101
#

minimal-examples-lowlevel/secure-streams/minimal-secure-streams-stress/minimal-secure-streams.c

Lines changed: 41 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -31,31 +31,33 @@ enum {
3131
LWS_SW_OTS,
3232
LWS_SW_PASS_LIMIT,
3333
LWS_SW_RESPMAP,
34-
LWS_SW_TIMEOUT_MS,
35-
LWS_SW_A,
36-
LWS_SW_C,
37-
LWS_SW_D,
38-
LWS_SW_I,
39-
LWS_SW_P,
40-
LWS_SW_HELP,
41-
};
42-
43-
static const struct lws_switches switches[] = {
44-
[LWS_SW_BUDGET] = { "--budget", "Enable --budget feature" },
45-
[LWS_SW_EXPECTED_EXIT] = { "--expected-exit", "Enable --expected-exit feature" },
46-
[LWS_SW_FORCE_NO_INTERNET] = { "--force-no-internet", "Enable --force-no-internet feature" },
47-
[LWS_SW_FORCE_PORTAL] = { "--force-portal", "Enable --force-portal feature" },
48-
[LWS_SW_OTS] = { "--ots", "Enable --ots feature" },
49-
[LWS_SW_PASS_LIMIT] = { "--pass-limit", "Enable --pass-limit feature" },
50-
[LWS_SW_RESPMAP] = { "--respmap", "Enable --respmap feature" },
51-
[LWS_SW_TIMEOUT_MS] = { "--timeout_ms", "Enable --timeout_ms feature" },
52-
[LWS_SW_A] = { "-a", "Enable -a feature" },
53-
[LWS_SW_C] = { "-c", "Client connections" },
54-
[LWS_SW_D] = { "-d", "Debug logs (e.g. -d 15)" },
55-
[LWS_SW_I] = { "-i", "Interface to bind to" },
56-
[LWS_SW_P] = { "-p", "Port number to listen or connect on" },
57-
[LWS_SW_HELP] = { "--help", "Show this help information" },
58-
};
34+
LWS_SW_TIMEOUT_MS,
35+
LWS_SW_A,
36+
LWS_SW_C,
37+
LWS_SW_D,
38+
LWS_SW_I,
39+
LWS_SW_P,
40+
LWS_SW_POLICY,
41+
LWS_SW_HELP,
42+
};
43+
44+
static const struct lws_switches switches[] = {
45+
[LWS_SW_BUDGET] = { "--budget", "Enable --budget feature" },
46+
[LWS_SW_EXPECTED_EXIT] = { "--expected-exit", "Enable --expected-exit feature" },
47+
[LWS_SW_FORCE_NO_INTERNET] = { "--force-no-internet", "Enable --force-no-internet feature" },
48+
[LWS_SW_FORCE_PORTAL] = { "--force-portal", "Enable --force-portal feature" },
49+
[LWS_SW_OTS] = { "--ots", "Enable --ots feature" },
50+
[LWS_SW_PASS_LIMIT] = { "--pass-limit", "Enable --pass-limit feature" },
51+
[LWS_SW_RESPMAP] = { "--respmap", "Enable --respmap feature" },
52+
[LWS_SW_TIMEOUT_MS] = { "--timeout_ms", "Enable --timeout_ms feature" },
53+
[LWS_SW_A] = { "-a", "Enable -a feature" },
54+
[LWS_SW_C] = { "-c", "Client connections" },
55+
[LWS_SW_D] = { "-d", "Debug logs (e.g. -d 15)" },
56+
[LWS_SW_I] = { "-i", "Interface to bind to" },
57+
[LWS_SW_P] = { "-p", "Port number to listen or connect on" },
58+
[LWS_SW_POLICY] = { "--policy", "Policy JSON filepath" },
59+
[LWS_SW_HELP] = { "--help", "Show this help information" },
60+
};
5961

6062
#include <string.h>
6163
#include <signal.h>
@@ -725,12 +727,20 @@ int main(int argc, const char **argv)
725727
if ((p = lws_cmdline_option(argc, argv, switches[LWS_SW_A].sw)))
726728
info.ss_proxy_address = p;
727729
}
728-
#else
729-
info.pss_policies_json = default_ss_policy;
730-
info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS |
731-
LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW |
732-
LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
733-
#endif
730+
#else
731+
/*
732+
* If --policy <file> is given, use that instead of the built-in
733+
* default policy, so the test can be pointed at a locally-generated
734+
* policy targeting a local test server instead of warmcat.com.
735+
*/
736+
if ((p = lws_cmdline_option(argc, argv, switches[LWS_SW_POLICY].sw)))
737+
info.pss_policies_json = p;
738+
else
739+
info.pss_policies_json = default_ss_policy;
740+
info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS |
741+
LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW |
742+
LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
743+
#endif
734744

735745
#if defined(LWS_WITH_MBEDTLS)
736746

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
{
2+
"release": "01234567",
3+
"product": "myproduct",
4+
"schema-version": 1,
5+
"retry": [
6+
{
7+
"default": {
8+
"backoff": [ 1000, 2000, 3000, 5000, 10000 ],
9+
"conceal": 5,
10+
"jitterpc": 20,
11+
"svalidping": 30,
12+
"svalidhup": 35
13+
}
14+
}
15+
],
16+
"certs": [
17+
{
18+
"localhost_100y": "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"
19+
}
20+
],
21+
"trust_stores": [
22+
{
23+
"name": "local_test",
24+
"stack": [ "localhost_100y" ]
25+
}
26+
],
27+
"s": [
28+
{
29+
"mintest": {
30+
"endpoint": "@LWS_CTEST_SERVER_RESOLVE@",
31+
"port": @PORT_SS_SRV_TLS@,
32+
"protocol": "h1",
33+
"http_method": "GET",
34+
"http_url": "/httpbin/bytes/2000",
35+
"metadata": [
36+
{ "uptag": "X-Upload-Tag:" },
37+
{ "xctype": "X-Content-Type:" },
38+
{ "ctype": "Content-Type:" }
39+
],
40+
"tls": true,
41+
"opportunistic": true,
42+
"retry": "default",
43+
"timeout_ms": 2000,
44+
"direct_proto_str": true,
45+
"tls_trust_store": "local_test"
46+
}
47+
},
48+
{
49+
"captive_portal_detect": {
50+
"endpoint": "@LWS_CTEST_SERVER_RESOLVE@",
51+
"port": @PORT_SS_SRV_TLS@,
52+
"protocol": "h1",
53+
"http_method": "GET",
54+
"http_url": "/httpbin/status/204",
55+
"tls": true,
56+
"opportunistic": true,
57+
"http_expect": 204,
58+
"http_fail_redirect": true,
59+
"tls_trust_store": "local_test"
60+
}
61+
}
62+
]
63+
}

0 commit comments

Comments
 (0)