Skip to content

Reject second ClientHello that withdraws PSK offer - #3259

Merged
djc merged 1 commit into
rustls:mainfrom
oleksii-udovychenko:reject-psk-withdrawal-after-hrr
Sep 11, 2026
Merged

djc merged 1 commit into
rustls:mainfrom
oleksii-udovychenko:reject-psk-withdrawal-after-hrr

Conversation

@oleksii-udovychenko

@oleksii-udovychenko oleksii-udovychenko commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

RFC 8446 §4.1.2 lists exhaustively what a client may change in its second ClientHello after a HelloRetryRequest. A pre_shared_key extension may be updated there (recomputing the binders, adjusting the obfuscated ticket age, and optionally dropping PSKs incompatible with the server's chosen cipher suite), but withdrawing the extension altogether is not one of the permitted changes.

We accepted that anyway. ExpectClientHello kept no record of whether the first ClientHello carried a PSK offer, so a second hello that omitted the extension was handled as if the client had never offered a PSK at all.

This PR:

  • adds PeerMisbehaved::MissingPskExtensionInSecondClientHello, which maps to a missing_extension alert
  • records the first hello's offer in ExpectClientHello::offered_psk_before_retry when emitting the HelloRetryRequest, and rejects a second hello that drops it in client_hello::handle_client_hello
  • enables Resume-Server-OmitAllPSKsOnSecondClientHello, which was disabled with a TODO reason
  • adds a server unit test for the same case

@oleksii-udovychenko
oleksii-udovychenko force-pushed the reject-psk-withdrawal-after-hrr branch from fc2f24f to 10dca06 Compare September 10, 2026 01:51
@oleksii-udovychenko oleksii-udovychenko changed the title Reject second ClientHello that withdraws PSK offer reject a second ClientHello that drops pre_shared_key Sep 10, 2026
@codecov

codecov Bot commented Sep 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.36%. Comparing base (176833e) to head (f8273ac).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3259      +/-   ##
==========================================
+ Coverage   95.35%   95.36%   +0.01%     
==========================================
  Files          99       99              
  Lines       23570    23624      +54     
  Branches      677      679       +2     
==========================================
+ Hits        22474    22529      +55     
+ Misses        940      939       -1     
  Partials      156      156              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@oleksii-udovychenko oleksii-udovychenko changed the title reject a second ClientHello that drops pre_shared_key Reject second ClientHello that withdraws PSK offer Sep 10, 2026

@djc djc left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Is there bogo coverage for this?

@rustls-benchmarking

rustls-benchmarking Bot commented Sep 10, 2026

Copy link
Copy Markdown

Benchmark results

Instruction counts

Significant differences

⚠️ There are significant instruction count differences

Click to expand
Scenario Baseline Candidate Diff Threshold
handshake_no_resume_aws_lc_rs_1.3_rsa_chacha_client 2384341 2397323 ⚠️ 12982 (0.54%) 0.20%
handshake_no_resume_aws_lc_rs_1.3_rsa_aes_client 2376740 2389659 ⚠️ 12919 (0.54%) 0.20%

Other differences

Click to expand
Scenario Baseline Candidate Diff Threshold
handshake_no_resume_aws_lc_rs_1.3_rsa_aes_server 10958524 10934753 -23771 (-0.22%) 1.31%
handshake_no_resume_aws_lc_rs_1.3_rsa_chacha_server 10953423 10974823 21400 (0.20%) 1.41%
handshake_no_resume_aws_lc_rs_1.3_ecdsap384_aes_client 8780426 8764911 -15515 (-0.18%) 0.86%
handshake_no_resume_aws_lc_rs_1.3_ecdsap384_chacha_client 8799925 8784472 -15453 (-0.18%) 0.88%
handshake_no_resume_aws_lc_rs_1.3_ecdsap256_chacha_client 3554958 3549214 -5744 (-0.16%) 0.25%
handshake_session_id_aws_lc_rs_1.3_rsa_aes_client 42109465 42174225 64760 (0.15%) 0.20%
handshake_session_id_aws_lc_rs_1.3_ecdsap384_chacha_client 42097106 42137539 40433 (0.10%) 0.21%
handshake_tickets_aws_lc_rs_1.3_ecdsap256_aes_client 42458234 42497710 39476 (0.09%) 0.25%
handshake_session_id_aws_lc_rs_1.3_ecdsap384_aes_client 42129609 42165689 36080 (0.09%) 0.24%
handshake_session_id_aws_lc_rs_1.3_rsa_aes_server 36995282 37024405 29123 (0.08%) 0.20%
handshake_no_resume_ring_1.3_ecdsap256_chacha_client 3262448 3264739 2291 (0.07%) 0.24%
handshake_tickets_aws_lc_rs_1.3_ecdsap384_chacha_client 42475159 42503174 28015 (0.07%) 0.25%
handshake_tickets_aws_lc_rs_1.3_ecdsap256_chacha_client 42456785 42480313 23528 (0.06%) 0.31%
handshake_session_id_aws_lc_rs_1.3_ecdsap256_chacha_client 42097683 42120344 22661 (0.05%) 0.23%
handshake_tickets_aws_lc_rs_1.3_ecdsap256_aes_server 38427776 38447596 19820 (0.05%) 0.20%
handshake_tickets_aws_lc_rs_1.3_ecdsap384_chacha_server 38463204 38482364 19160 (0.05%) 0.20%
handshake_session_id_aws_lc_rs_1.3_ecdsap384_aes_server 36995587 37013657 18070 (0.05%) 0.20%
handshake_session_id_aws_lc_rs_1.3_ecdsap384_chacha_server 36979212 36997189 17977 (0.05%) 0.20%
handshake_session_id_aws_lc_rs_1.3_ecdsap256_aes_client 42136602 42122128 -14474 (-0.03%) 0.21%
handshake_tickets_aws_lc_rs_1.3_ecdsap384_aes_client 42474671 42460363 -14308 (-0.03%) 0.28%
handshake_session_id_aws_lc_rs_1.3_rsa_chacha_client 42125236 42138879 13643 (0.03%) 0.26%
handshake_tickets_aws_lc_rs_1.3_rsa_chacha_client 42467583 42480851 13268 (0.03%) 0.28%
handshake_tickets_aws_lc_rs_1.3_rsa_aes_client 42482228 42469215 -13013 (-0.03%) 0.23%
handshake_session_id_aws_lc_rs_1.3_ecdsap256_aes_server 36998262 36991070 -7192 (-0.02%) 0.20%
handshake_tickets_aws_lc_rs_1.3_rsa_chacha_server 38452455 38459120 6665 (0.02%) 0.21%
handshake_session_id_aws_lc_rs_1.3_ecdsap256_chacha_server 36981580 36987933 6353 (0.02%) 0.20%
handshake_tickets_aws_lc_rs_1.3_ecdsap256_chacha_server 38447757 38454290 6533 (0.02%) 0.20%
handshake_no_resume_aws_lc_rs_1.2_rsa_aes_server 10452007 10450985 -1022 (-0.01%) 1.12%
handshake_session_id_aws_lc_rs_1.3_rsa_chacha_server 37003193 37006702 3509 (0.01%) 0.20%
handshake_no_resume_aws_lc_rs_1.3_ecdsap384_aes_server 2270111 2269906 -205 (-0.01%) 0.20%
handshake_tickets_1.3_no_crypto_server 1750625 1750745 120 (0.01%) 0.20%
handshake_session_id_1.3_no_crypto_server 1782970 1783090 120 (0.01%) 0.20%
handshake_no_resume_aws_lc_rs_1.3_ecdsap256_chacha_server 1349281 1349329 48 (0.00%) 0.20%
handshake_no_resume_1.3_no_crypto_server 56651 56653 2 (0.00%) 0.20%
handshake_no_resume_ring_1.3_ecdsap256_aes_client 3263218 3263294 76 (0.00%) 0.24%
handshake_no_resume_aws_lc_rs_1.3_ecdsap384_chacha_server 2273977 2274009 32 (0.00%) 0.20%
handshake_tickets_aws_lc_rs_1.3_rsa_aes_server 38445599 38445079 -520 (-0.00%) 0.20%
handshake_no_resume_aws_lc_rs_1.3_ecdsap256_aes_client 3551225 3551265 40 (0.00%) 0.47%
handshake_no_resume_aws_lc_rs_1.2_rsa_aes_client 1679603 1679615 12 (0.00%) 0.20%
transfer_no_resume_ring_1.3_ecdsap256_chacha_client 81779431 81779873 442 (0.00%) 0.20%
handshake_no_resume_ring_1.3_rsa_aes_client 2293178 2293190 12 (0.00%) 0.20%
handshake_no_resume_ring_1.3_rsa_chacha_client 2298884 2298896 12 (0.00%) 0.20%
handshake_session_id_ring_1.3_ecdsap256_chacha_server 31267363 31267488 125 (0.00%) 0.20%
handshake_session_id_ring_1.3_ecdsap384_chacha_server 31261764 31261884 120 (0.00%) 0.20%
handshake_session_id_ring_1.3_rsa_chacha_server 31264509 31264629 120 (0.00%) 0.20%
handshake_session_id_ring_1.3_ecdsap384_aes_server 31381944 31382064 120 (0.00%) 0.20%
handshake_session_id_ring_1.3_rsa_aes_server 31384689 31384809 120 (0.00%) 0.20%
handshake_session_id_ring_1.3_ecdsap256_aes_server 31387548 31387668 120 (0.00%) 0.20%
handshake_tickets_ring_1.3_rsa_chacha_server 31547890 31548010 120 (0.00%) 0.20%
handshake_tickets_ring_1.3_ecdsap384_chacha_server 31552656 31552776 120 (0.00%) 0.20%
handshake_tickets_ring_1.3_ecdsap256_chacha_server 31556872 31556992 120 (0.00%) 0.20%
handshake_tickets_ring_1.3_rsa_aes_server 31648990 31649110 120 (0.00%) 0.20%
handshake_tickets_ring_1.3_ecdsap256_aes_server 31653092 31653212 120 (0.00%) 0.20%
handshake_tickets_ring_1.3_ecdsap384_aes_server 31653899 31654019 120 (0.00%) 0.20%
handshake_no_resume_ring_1.2_rsa_aes_client 2166034 2166042 8 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_ecdsap256_aes_client 47329962 47329799 -163 (-0.00%) 0.20%
handshake_no_resume_ring_1.3_ecdsap256_aes_server 1230470 1230472 2 (0.00%) 0.20%
handshake_no_resume_ring_1.3_ecdsap256_chacha_server 1231688 1231690 2 (0.00%) 0.20%
handshake_no_resume_aws_lc_rs_1.3_ecdsap256_aes_server 1346121 1346123 2 (0.00%) 0.63%
handshake_tickets_aws_lc_rs_1.3_ecdsap384_aes_server 38436708 38436721 13 (0.00%) 0.20%
handshake_no_resume_ring_1.3_ecdsap384_aes_server 7178994 7178996 2 (0.00%) 0.20%
handshake_no_resume_ring_1.3_ecdsap384_chacha_server 7181007 7181009 2 (0.00%) 0.20%
handshake_no_resume_ring_1.3_rsa_aes_server 11058644 11058646 2 (0.00%) 0.20%
handshake_no_resume_ring_1.3_rsa_chacha_server 11064450 11064452 2 (0.00%) 0.20%
handshake_session_id_1.3_no_crypto_client 1964534 1964534 0 (0.00%) 0.20%
handshake_session_id_ring_1.3_ecdsap384_aes_client 30282827 30282827 0 (0.00%) 0.20%
handshake_session_id_ring_1.3_rsa_aes_client 30290846 30290846 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_ecdsap384_chacha_server 70365684 70365684 0 (0.00%) 0.20%
handshake_no_resume_ring_1.3_ecdsap384_chacha_client 34705798 34705798 0 (0.00%) 0.20%
handshake_session_id_1.2_no_crypto_client 899430 899430 0 (0.00%) 0.20%
handshake_tickets_ring_1.3_rsa_chacha_client 30308389 30308389 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_ecdsap256_aes_server 35286484 35286484 0 (0.00%) 0.20%
handshake_session_id_aws_lc_rs_1.2_rsa_aes_client 3629819 3629819 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_ecdsap384_aes_server 45418156 45418156 0 (0.00%) 0.20%
handshake_session_id_1.2_no_crypto_server 784119 784119 0 (0.00%) 0.20%
handshake_tickets_aws_lc_rs_1.2_rsa_aes_server 4595400 4595400 0 (0.00%) 1.02%
transfer_no_resume_aws_lc_rs_1.3_ecdsap256_chacha_client 81852042 81852042 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.2_rsa_aes_client 47375211 47375211 0 (0.00%) 0.20%
handshake_tickets_ring_1.3_ecdsap384_aes_client 30367388 30367388 0 (0.00%) 0.20%
handshake_session_id_ring_1.3_rsa_chacha_client 30201506 30201506 0 (0.00%) 0.20%
handshake_tickets_1.3_no_crypto_client 1976130 1976130 0 (0.00%) 0.20%
handshake_no_resume_ring_1.3_ecdsap384_aes_client 34704018 34704018 0 (0.00%) 0.20%
handshake_no_resume_ring_1.2_rsa_aes_server 10899927 10899927 0 (0.00%) 0.20%
handshake_no_resume_1.3_no_crypto_client 64956 64956 0 (0.00%) 0.20%
handshake_no_resume_1.2_no_crypto_server 36360 36360 0 (0.00%) 0.20%
handshake_no_resume_1.2_no_crypto_client 53770 53770 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_rsa_chacha_server 70365273 70365273 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_ecdsap384_chacha_server 79781556 79781556 0 (0.00%) 0.20%
handshake_tickets_1.2_no_crypto_server 921445 921445 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_ecdsap256_aes_server 45418244 45418244 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_ecdsap384_aes_server 35286484 35286484 0 (0.00%) 0.20%
handshake_session_id_ring_1.3_ecdsap256_chacha_client 30194699 30194699 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_rsa_chacha_client 81863544 81863544 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_ecdsap256_aes_client 47132147 47132147 0 (0.00%) 0.20%
transfer_no_resume_1.3_no_crypto_server 104447396 104447396 0 (0.00%) 0.20%
handshake_session_id_ring_1.2_rsa_aes_client 3202450 3202450 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_rsa_aes_client 47305531 47305531 0 (0.00%) 0.20%
handshake_session_id_ring_1.2_rsa_aes_server 3073947 3073947 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_ecdsap384_chacha_client 81851788 81851788 0 (0.00%) 0.20%
handshake_tickets_1.2_no_crypto_client 974086 974086 0 (0.00%) 0.20%
handshake_session_id_ring_1.3_ecdsap256_aes_client 30284039 30284039 0 (0.00%) 0.20%
handshake_tickets_ring_1.3_ecdsap256_chacha_client 30298358 30298358 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_ecdsap256_chacha_server 70365684 70365684 0 (0.00%) 0.20%
handshake_tickets_ring_1.2_rsa_aes_server 3633407 3633407 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_ecdsap384_aes_client 47329708 47329708 0 (0.00%) 0.20%
handshake_tickets_ring_1.2_rsa_aes_client 3585146 3585146 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_rsa_aes_client 47123416 47123416 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_ecdsap384_aes_client 47132147 47132147 0 (0.00%) 0.20%
transfer_no_resume_1.3_no_crypto_client 106335262 106335262 0 (0.00%) 0.20%
handshake_session_id_aws_lc_rs_1.2_rsa_aes_server 3512190 3512190 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.3_rsa_aes_server 35286242 35286242 0 (0.00%) 0.20%
handshake_tickets_aws_lc_rs_1.2_rsa_aes_client 4011868 4011868 0 (0.00%) 0.20%
transfer_no_resume_1.2_no_crypto_server 104438008 104438008 0 (0.00%) 0.20%
transfer_no_resume_1.2_no_crypto_client 106303737 106303737 0 (0.00%) 0.20%
transfer_no_resume_aws_lc_rs_1.2_rsa_aes_server 35204658 35204658 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_rsa_aes_server 45418185 45418185 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_rsa_chacha_server 79781585 79781585 0 (0.00%) 0.20%
transfer_no_resume_ring_1.2_rsa_aes_client 47170764 47170764 0 (0.00%) 0.20%
transfer_no_resume_ring_1.2_rsa_aes_server 45526240 45526240 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_ecdsap384_chacha_client 81778547 81778547 0 (0.00%) 0.20%
handshake_tickets_ring_1.3_rsa_aes_client 30378289 30378289 0 (0.00%) 0.20%
handshake_tickets_ring_1.3_ecdsap384_chacha_client 30296853 30296853 0 (0.00%) 0.20%
handshake_tickets_ring_1.3_ecdsap256_aes_client 30366863 30366863 0 (0.00%) 0.20%
handshake_session_id_ring_1.3_ecdsap384_chacha_client 30193487 30193487 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_ecdsap256_chacha_server 79781644 79781644 0 (0.00%) 0.20%
transfer_no_resume_ring_1.3_rsa_chacha_client 81769816 81769816 0 (0.00%) 0.20%

Wall-time

Significant differences

There are no significant wall-time differences

Other differences

Click to expand
Scenario Baseline Candidate Diff Threshold
handshake_session_id_1.3_no_crypto 536.88 µs 545.54 µs 8.65 µs (1.61%) 3.90%
handshake_tickets_1.3_no_crypto 523.84 µs 529.33 µs 5.49 µs (1.05%) 3.54%
handshake_session_id_1.2_no_crypto 275.13 µs 277.19 µs 2.06 µs (0.75%) 5.33%
handshake_no_resume_1.2_no_crypto 46.88 µs 46.54 µs -0.34 µs (-0.72%) 9.19%
handshake_no_resume_1.3_no_crypto 44.57 µs 44.86 µs 0.29 µs (0.65%) 8.84%
handshake_session_id_ring_1.3_ecdsap256_chacha 5.21 ms 5.23 ms 0.02 ms (0.37%) 1.08%
handshake_no_resume_aws_lc_rs_1.3_rsa_aes 1.09 ms 1.10 ms 0.00 ms (0.33%) 3.86%
handshake_session_id_ring_1.3_ecdsap256_aes 5.26 ms 5.27 ms 0.02 ms (0.32%) 1.00%
handshake_session_id_ring_1.3_rsa_aes 5.73 ms 5.75 ms 0.02 ms (0.31%) 1.08%
handshake_no_resume_aws_lc_rs_1.2_rsa_aes 1.01 ms 1.02 ms 0.00 ms (0.31%) 4.08%
handshake_tickets_ring_1.2_rsa_aes 1.42 ms 1.42 ms 0.00 ms (0.28%) 1.31%
handshake_session_id_ring_1.3_rsa_chacha 5.70 ms 5.71 ms 0.02 ms (0.28%) 1.00%
transfer_no_resume_aws_lc_rs_1.2_rsa_aes 4.40 ms 4.41 ms 0.01 ms (0.27%) 4.10%
handshake_tickets_ring_1.3_ecdsap256_chacha 5.27 ms 5.28 ms 0.01 ms (0.27%) 1.10%
handshake_tickets_1.2_no_crypto 298.88 µs 299.62 µs 0.74 µs (0.25%) 4.81%
handshake_tickets_ring_1.3_ecdsap256_aes 5.31 ms 5.33 ms 0.01 ms (0.25%) 1.04%
handshake_no_resume_aws_lc_rs_1.3_rsa_chacha 1.12 ms 1.12 ms 0.00 ms (0.23%) 1.78%
handshake_tickets_ring_1.3_rsa_aes 5.79 ms 5.80 ms 0.01 ms (0.21%) 1.05%
handshake_tickets_aws_lc_rs_1.2_rsa_aes 1.65 ms 1.65 ms -0.00 ms (-0.21%) 2.95%
handshake_session_id_ring_1.2_rsa_aes 1.34 ms 1.35 ms 0.00 ms (0.20%) 1.37%
handshake_session_id_ring_1.3_ecdsap384_chacha 8.31 ms 8.32 ms 0.02 ms (0.18%) 1.00%
transfer_no_resume_ring_1.3_ecdsap256_aes 4.95 ms 4.94 ms -0.01 ms (-0.18%) 5.11%
handshake_tickets_ring_1.3_rsa_chacha 5.76 ms 5.77 ms 0.01 ms (0.17%) 1.06%
handshake_no_resume_aws_lc_rs_1.3_ecdsap384_aes 1.16 ms 1.16 ms 0.00 ms (0.17%) 1.09%
handshake_no_resume_ring_1.2_rsa_aes 904.95 µs 903.56 µs -1.39 µs (-0.15%) 1.00%
handshake_session_id_ring_1.3_ecdsap384_aes 8.34 ms 8.35 ms 0.01 ms (0.15%) 1.00%
transfer_no_resume_ring_1.3_rsa_aes 5.43 ms 5.42 ms -0.01 ms (-0.13%) 4.47%
handshake_tickets_ring_1.3_ecdsap384_chacha 8.37 ms 8.38 ms 0.01 ms (0.12%) 1.00%
transfer_no_resume_ring_1.3_ecdsap384_aes 8.04 ms 8.03 ms -0.01 ms (-0.12%) 3.17%
handshake_no_resume_ring_1.3_ecdsap384_chacha 3.51 ms 3.51 ms -0.00 ms (-0.12%) 1.00%
handshake_session_id_aws_lc_rs_1.3_ecdsap256_chacha 6.21 ms 6.20 ms -0.01 ms (-0.10%) 1.70%
handshake_no_resume_aws_lc_rs_1.3_ecdsap256_chacha 460.79 µs 461.25 µs 0.46 µs (0.10%) 2.14%
handshake_tickets_aws_lc_rs_1.3_rsa_aes 7.07 ms 7.06 ms -0.01 ms (-0.10%) 1.76%
handshake_tickets_ring_1.3_ecdsap384_aes 8.40 ms 8.41 ms 0.01 ms (0.09%) 1.00%
transfer_no_resume_ring_1.2_rsa_aes 5.39 ms 5.39 ms -0.01 ms (-0.09%) 3.93%
handshake_no_resume_ring_1.3_ecdsap384_aes 3.52 ms 3.52 ms -0.00 ms (-0.09%) 1.00%
transfer_no_resume_aws_lc_rs_1.3_ecdsap384_aes 4.61 ms 4.61 ms 0.00 ms (0.08%) 4.54%
handshake_session_id_aws_lc_rs_1.3_ecdsap256_aes 6.24 ms 6.24 ms -0.00 ms (-0.08%) 2.26%
handshake_session_id_aws_lc_rs_1.3_rsa_chacha 6.88 ms 6.88 ms 0.00 ms (0.07%) 1.16%
transfer_no_resume_aws_lc_rs_1.3_ecdsap256_chacha 12.56 ms 12.55 ms -0.01 ms (-0.07%) 1.62%
handshake_no_resume_ring_1.3_ecdsap256_aes 423.24 µs 423.50 µs 0.26 µs (0.06%) 1.92%
handshake_session_id_aws_lc_rs_1.3_rsa_aes 6.87 ms 6.87 ms -0.00 ms (-0.06%) 1.35%
transfer_no_resume_ring_1.3_rsa_chacha 13.01 ms 13.00 ms -0.01 ms (-0.06%) 2.04%
handshake_session_id_aws_lc_rs_1.3_ecdsap384_aes 6.90 ms 6.90 ms -0.00 ms (-0.05%) 1.97%
transfer_no_resume_aws_lc_rs_1.3_rsa_aes 4.55 ms 4.55 ms 0.00 ms (0.05%) 4.18%
handshake_no_resume_aws_lc_rs_1.3_ecdsap384_chacha 1.15 ms 1.14 ms -0.00 ms (-0.05%) 1.28%
handshake_no_resume_aws_lc_rs_1.3_ecdsap256_aes 477.86 µs 477.62 µs -0.24 µs (-0.05%) 2.96%
handshake_tickets_aws_lc_rs_1.3_ecdsap256_chacha 6.41 ms 6.41 ms 0.00 ms (0.05%) 1.57%
transfer_no_resume_aws_lc_rs_1.3_ecdsap384_chacha 13.23 ms 13.22 ms -0.01 ms (-0.05%) 1.64%
transfer_no_resume_ring_1.3_ecdsap256_chacha 12.52 ms 12.52 ms -0.01 ms (-0.05%) 1.97%
transfer_no_resume_aws_lc_rs_1.3_ecdsap256_aes 3.93 ms 3.93 ms 0.00 ms (0.04%) 4.74%
transfer_no_resume_1.2_no_crypto 11.28 ms 11.28 ms 0.00 ms (0.04%) 2.16%
transfer_no_resume_ring_1.3_ecdsap384_chacha 15.62 ms 15.61 ms -0.01 ms (-0.04%) 1.59%
handshake_no_resume_ring_1.3_ecdsap256_chacha 414.30 µs 414.14 µs -0.16 µs (-0.04%) 1.59%
handshake_tickets_aws_lc_rs_1.3_rsa_chacha 7.08 ms 7.08 ms -0.00 ms (-0.04%) 1.49%
handshake_tickets_aws_lc_rs_1.3_ecdsap384_chacha 7.09 ms 7.08 ms -0.00 ms (-0.03%) 1.53%
handshake_session_id_aws_lc_rs_1.3_ecdsap384_chacha 6.88 ms 6.88 ms -0.00 ms (-0.03%) 1.80%
handshake_session_id_aws_lc_rs_1.2_rsa_aes 1.51 ms 1.51 ms -0.00 ms (-0.03%) 2.51%
handshake_no_resume_ring_1.3_rsa_chacha 897.54 µs 897.35 µs -0.20 µs (-0.02%) 1.00%
transfer_no_resume_1.3_no_crypto 11.33 ms 11.33 ms -0.00 ms (-0.02%) 2.58%
handshake_tickets_aws_lc_rs_1.3_ecdsap384_aes 7.11 ms 7.11 ms -0.00 ms (-0.02%) 1.98%
handshake_tickets_aws_lc_rs_1.3_ecdsap256_aes 6.43 ms 6.43 ms 0.00 ms (0.01%) 2.19%
transfer_no_resume_aws_lc_rs_1.3_rsa_chacha 13.19 ms 13.19 ms 0.00 ms (0.00%) 1.84%
handshake_no_resume_ring_1.3_rsa_aes 903.53 µs 903.51 µs -0.03 µs (-0.00%) 1.00%

Memory usage

Key:

  • ∑: sum usage for entire benchmark run
  • 🔝: peak usage
  • B: bytes
  • a: allocations

Significant differences

There are no significant memory usage differences

Additional information

Historical results

Checkout details:

@oleksii-udovychenko

Copy link
Copy Markdown
Contributor Author

Yes. Resume-Server-OmitAllPSKsOnSecondClientHello was in DisabledTests with the reason TODO: we do not reject a second ClientHello that drops all PSKs, and this PR removes that entry, so it runs now.

It is the test the change came from: without the check the shim finishes a full handshake with a HelloRetryRequest instead of sending missing_extension, and the runner fails it on wanted to see [Resumed] but got FullWithHelloRetryRequest.

@djc

djc commented Sep 10, 2026

Copy link
Copy Markdown
Member

Ugh, not sure why I missed that. Thanks, I think this looks good but will wait for one more maintainer to have a look.

@cpu cpu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Seems reasonable to me. I had two very minor comment nits to consider.

Comment thread rustls/src/server/test.rs Outdated
Comment thread rustls/src/server/tls13.rs Outdated
@oleksii-udovychenko
oleksii-udovychenko force-pushed the reject-psk-withdrawal-after-hrr branch from 10dca06 to d53de85 Compare September 10, 2026 15:15
@oleksii-udovychenko
oleksii-udovychenko force-pushed the reject-psk-withdrawal-after-hrr branch from d53de85 to f8273ac Compare September 10, 2026 15:18
@oleksii-udovychenko

Copy link
Copy Markdown
Contributor Author

Pushed the RFC number update just now. Thanks!

@djc
djc added this pull request to the merge queue Sep 11, 2026
Merged via the queue into rustls:main with commit 7c45de2 Sep 11, 2026
30 checks passed
@oleksii-udovychenko
oleksii-udovychenko deleted the reject-psk-withdrawal-after-hrr branch September 11, 2026 15:46
@ctz ctz mentioned this pull request Sep 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants