target = "https://tools.ietf.org/rfc/rfc8446#appendix-A.1"

# A.1.  Client
#
#                            START <----+
#             Send ClientHello |        | Recv HelloRetryRequest
#        [K_send = early data] |        |
#                              v        |
#         /                 WAIT_SH ----+
#         |                    | Recv ServerHello
#         |                    | K_recv = handshake
#     Can |                    V
#    send |                 WAIT_EE
#   early |                    | Recv EncryptedExtensions
#    data |           +--------+--------+
#         |     Using |                 | Using certificate
#         |       PSK |                 v
#         |           |            WAIT_CERT_CR
#         |           |        Recv |       | Recv CertificateRequest
#         |           | Certificate |       v
#         |           |             |    WAIT_CERT
#         |           |             |       | Recv Certificate
#         |           |             v       v
#         |           |              WAIT_CV
#         |           |                 | Recv CertificateVerify
#         |           +> WAIT_FINISHED <+
#         |                  | Recv Finished
#         \                  | [Send EndOfEarlyData]
#                            | K_send = handshake
#                            | [Send Certificate [+ CertificateVerify]]
#  Can send                  | Send Finished
#  app data   -->            | K_send = K_recv = application
#  after here                v
#                        CONNECTED
# 
# Note that with the transitions as shown above, clients may send
# alerts that derive from post-ServerHello messages in the clear or
# with the early data keys.  If clients need to send such alerts, they
# SHOULD first rekey to the handshake keys if possible.

[[spec]]
level = "SHOULD"
quote = '''
If clients need to send such alerts, they
SHOULD first rekey to the handshake keys if possible.
'''

