target = "https://tools.ietf.org/rfc/rfc8446#section-4"

# 4.  Handshake Protocol
#
# The handshake protocol is used to negotiate the security parameters
# of a connection.  Handshake messages are supplied to the TLS record
# layer, where they are encapsulated within one or more TLSPlaintext or
# TLSCiphertext structures which are processed and transmitted as
# specified by the current active connection state.
# 
#    enum {
#        client_hello(1),
#        server_hello(2),
#        new_session_ticket(4),
#        end_of_early_data(5),
#        encrypted_extensions(8),
#        certificate(11),
#        certificate_request(13),
#        certificate_verify(15),
#        finished(20),
#        key_update(24),
#        message_hash(254),
#        (255)
#    } HandshakeType;
# 
#    struct {
#        HandshakeType msg_type;    /* handshake type */
#        uint24 length;             /* remaining bytes in message */
#        select (Handshake.msg_type) {
#            case client_hello:          ClientHello;
#            case server_hello:          ServerHello;
#            case end_of_early_data:     EndOfEarlyData;
#            case encrypted_extensions:  EncryptedExtensions;
#            case certificate_request:   CertificateRequest;
#            case certificate:           Certificate;
#            case certificate_verify:    CertificateVerify;
#            case finished:              Finished;
#            case new_session_ticket:    NewSessionTicket;
#            case key_update:            KeyUpdate;
#        };
#    } Handshake;
# 
# Protocol messages MUST be sent in the order defined in Section 4.4.1
# and shown in the diagrams in Section 2.  A peer which receives a
# handshake message in an unexpected order MUST abort the handshake
# with an "unexpected_message" alert.
# 
# New handshake message types are assigned by IANA as described in
# Section 11.

[[spec]]
level = "MUST"
quote = '''
Protocol messages MUST be sent in the order defined in Section 4.4.1
and shown in the diagrams in Section 2.
'''

[[spec]]
level = "MUST"
quote = '''
A peer which receives a
handshake message in an unexpected order MUST abort the handshake
with an "unexpected_message" alert.
'''

