@@ -1462,6 +1462,41 @@ actual exponent is one-less than the explicit exponent, and the value represents
1462
1462
to 0xFFFF.
1463
1463
1464
1464
1465
+ # ## ACK Frames and Packet Protection
1466
+
1467
+ ACK frames that acknowledge protected packets MUST be carried in a packet that
1468
+ has an equivalent level of packet protection. Functionally, this means :
1469
+
1470
+ * Unprotected packets, such as those that carry the initial cryptographic
1471
+ handshake messages, can be acknowledged in unprotected packets. This has
1472
+ several consequences :
1473
+
1474
+ * Acknowledgments for packets containing cryptographic handshake messages
1475
+ SHOULD be included in packets carrying the next cryptographic handshake
1476
+ message. For instance, a server can acknowledge a TLS ClientHello in the
1477
+ packet that carries the TLS ServerHello; similarly, a client can acknowledge
1478
+ a TLS HelloRetryRequest in the packet containing a second TLS ClientHello.
1479
+
1480
+ * The initial set of server handshake messages, which could span multiple
1481
+ packets, SHOULD be acknowledged in unprotected packets even if the client
1482
+ uses 0-RTT keys to protect other packets that are sent at the same time. A
1483
+ server might decide to reject and ignore 0-RTT data, making it unable to use
1484
+ any acknowledgments that are protected with 0-RTT keys.
1485
+
1486
+ * Packets that a client sends with 0-RTT packet protection MUST be acknowledged
1487
+ by the server in packets protected by 1-RTT keys. This can mean that the
1488
+ client is unable to use these acknowledgments if the server cryptographic
1489
+ handshake messages are delayed or lost. However, the same limitation applies
1490
+ to other data sent by the server protected by the 1-RTT keys.
1491
+
1492
+ * Packets that are protected with 1-RTT keys MUST be acknowledged in packets
1493
+ that are also protected with 1-RTT keys.
1494
+
1495
+ A packet that is not protected and claims to acknowledge a packet number that
1496
+ was sent with packet protection is not valid. An unprotected packet that
1497
+ carries acknowledgments for protected packets MUST be discarded in its entirety.
1498
+
1499
+
1465
1500
# # WINDOW_UPDATE Frame {#frame-window-update}
1466
1501
1467
1502
The WINDOW_UPDATE frame (type=0x04) informs the peer of an increase in an
0 commit comments