target = "https://tools.ietf.org/rfc/rfc5246#section-7.4.1.3"

# 7.4.1.3.  Server Hello
#
# When this message will be sent:
# 
#    The server will send this message in response to a ClientHello
#    message when it was able to find an acceptable set of algorithms.
#    If it cannot find such a match, it will respond with a handshake
#    failure alert.
# 
# Structure of this message:
# 
#    struct {
#        ProtocolVersion server_version;
#        Random random;
#        SessionID session_id;
#        CipherSuite cipher_suite;
#        CompressionMethod compression_method;
#        select (extensions_present) {
#            case false:
#                struct {};
#            case true:
#                Extension extensions<0..2^16-1>;
#        };
#    } ServerHello;
# 
# The presence of extensions can be detected by determining whether
# there are bytes following the compression_method field at the end of
# the ServerHello.
# 
# server_version
#    This field will contain the lower of that suggested by the client
#    in the client hello and the highest supported by the server.  For
#    this version of the specification, the version is 3.3.  (See
#    Appendix E for details about backward compatibility.)
# 
# random
#    This structure is generated by the server and MUST be
#    independently generated from the ClientHello.random.
# 
# session_id
#    This is the identity of the session corresponding to this
#    connection.  If the ClientHello.session_id was non-empty, the
#    server will look in its session cache for a match.  If a match is
#    found and the server is willing to establish the new connection
#    using the specified session state, the server will respond with
#    the same value as was supplied by the client.  This indicates a
#    resumed session and dictates that the parties must proceed
#    directly to the Finished messages.  Otherwise, this field will
#    contain a different value identifying the new session.  The server
#    may return an empty session_id to indicate that the session will
#    not be cached and therefore cannot be resumed.  If a session is
#    resumed, it must be resumed using the same cipher suite it was
#    originally negotiated with.  Note that there is no requirement
#    that the server resume any session even if it had formerly
#    provided a session_id.  Clients MUST be prepared to do a full
#    negotiation -- including negotiating new cipher suites -- during
#    any handshake.
# 
# cipher_suite
#    The single cipher suite selected by the server from the list in
#    ClientHello.cipher_suites.  For resumed sessions, this field is
#    the value from the state of the session being resumed.
# 
# compression_method
#    The single compression algorithm selected by the server from the
#    list in ClientHello.compression_methods.  For resumed sessions,
#    this field is the value from the resumed session state.
# 
# extensions
#    A list of extensions.  Note that only extensions offered by the
#    client can appear in the server's list.

[[spec]]
level = "MUST"
quote = '''
random
This structure is generated by the server and MUST be
independently generated from the ClientHello.random.
'''

[[spec]]
level = "MUST"
quote = '''
Clients MUST be prepared to do a full
negotiation -- including negotiating new cipher suites -- during
any handshake.
'''

