target = "https://tools.ietf.org/rfc/rfc5246#appendix-A.5"

# A.5.  The Cipher Suite
#
# The following values define the cipher suite codes used in the
# ClientHello and ServerHello messages.
# 
# A cipher suite defines a cipher specification supported in TLS
# Version 1.2.
# 
# TLS_NULL_WITH_NULL_NULL is specified and is the initial state of a
# TLS connection during the first handshake on that channel, but MUST
# NOT be negotiated, as it provides no more protection than an
# unsecured connection.
# 
#    CipherSuite TLS_NULL_WITH_NULL_NULL               = { 0x00,0x00 };
# 
# The following CipherSuite definitions require that the server provide
# an RSA certificate that can be used for key exchange.  The server may
# request any signature-capable certificate in the certificate request
# message.
# 
#    CipherSuite TLS_RSA_WITH_NULL_MD5                 = { 0x00,0x01 };
#    CipherSuite TLS_RSA_WITH_NULL_SHA                 = { 0x00,0x02 };
#    CipherSuite TLS_RSA_WITH_NULL_SHA256              = { 0x00,0x3B };
#    CipherSuite TLS_RSA_WITH_RC4_128_MD5              = { 0x00,0x04 };
#    CipherSuite TLS_RSA_WITH_RC4_128_SHA              = { 0x00,0x05 };
#    CipherSuite TLS_RSA_WITH_3DES_EDE_CBC_SHA         = { 0x00,0x0A };
#    CipherSuite TLS_RSA_WITH_AES_128_CBC_SHA          = { 0x00,0x2F };
#    CipherSuite TLS_RSA_WITH_AES_256_CBC_SHA          = { 0x00,0x35 };
#    CipherSuite TLS_RSA_WITH_AES_128_CBC_SHA256       = { 0x00,0x3C };
#    CipherSuite TLS_RSA_WITH_AES_256_CBC_SHA256       = { 0x00,0x3D };
# 
# The following cipher suite definitions are used for server-
# authenticated (and optionally client-authenticated) Diffie-Hellman.
# DH denotes cipher suites in which the server's certificate contains
# the Diffie-Hellman parameters signed by the certificate authority
# (CA).  DHE denotes ephemeral Diffie-Hellman, where the Diffie-Hellman
# parameters are signed by a signature-capable certificate, which has
# been signed by the CA.  The signing algorithm used by the server is
# specified after the DHE component of the CipherSuite name.  The
# server can request any signature-capable certificate from the client
# for client authentication, or it may request a Diffie-Hellman
# certificate.  Any Diffie-Hellman certificate provided by the client
# must use the parameters (group and generator) described by the
# server.
# 
#    CipherSuite TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA      = { 0x00,0x0D };
#    CipherSuite TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA      = { 0x00,0x10 };
#    CipherSuite TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA     = { 0x00,0x13 };
#    CipherSuite TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA     = { 0x00,0x16 };
#    CipherSuite TLS_DH_DSS_WITH_AES_128_CBC_SHA       = { 0x00,0x30 };
#    CipherSuite TLS_DH_RSA_WITH_AES_128_CBC_SHA       = { 0x00,0x31 };
#    CipherSuite TLS_DHE_DSS_WITH_AES_128_CBC_SHA      = { 0x00,0x32 };
#    CipherSuite TLS_DHE_RSA_WITH_AES_128_CBC_SHA      = { 0x00,0x33 };
#    CipherSuite TLS_DH_DSS_WITH_AES_256_CBC_SHA       = { 0x00,0x36 };
#    CipherSuite TLS_DH_RSA_WITH_AES_256_CBC_SHA       = { 0x00,0x37 };
#    CipherSuite TLS_DHE_DSS_WITH_AES_256_CBC_SHA      = { 0x00,0x38 };
#    CipherSuite TLS_DHE_RSA_WITH_AES_256_CBC_SHA      = { 0x00,0x39 };
#    CipherSuite TLS_DH_DSS_WITH_AES_128_CBC_SHA256    = { 0x00,0x3E };
#    CipherSuite TLS_DH_RSA_WITH_AES_128_CBC_SHA256    = { 0x00,0x3F };
#    CipherSuite TLS_DHE_DSS_WITH_AES_128_CBC_SHA256   = { 0x00,0x40 };
#    CipherSuite TLS_DHE_RSA_WITH_AES_128_CBC_SHA256   = { 0x00,0x67 };
#    CipherSuite TLS_DH_DSS_WITH_AES_256_CBC_SHA256    = { 0x00,0x68 };
#    CipherSuite TLS_DH_RSA_WITH_AES_256_CBC_SHA256    = { 0x00,0x69 };
#    CipherSuite TLS_DHE_DSS_WITH_AES_256_CBC_SHA256   = { 0x00,0x6A };
#    CipherSuite TLS_DHE_RSA_WITH_AES_256_CBC_SHA256   = { 0x00,0x6B };
# 
# The following cipher suites are used for completely anonymous
# Diffie-Hellman communications in which neither party is
# authenticated.  Note that this mode is vulnerable to man-in-the-
# middle attacks.  Using this mode therefore is of limited use: These
# cipher suites MUST NOT be used by TLS 1.2 implementations unless the
# application layer has specifically requested to allow anonymous key
# exchange.  (Anonymous key exchange may sometimes be acceptable, for
# example, to support opportunistic encryption when no set-up for
# authentication is in place, or when TLS is used as part of more
# complex security protocols that have other means to ensure
# authentication.)
# 
#    CipherSuite TLS_DH_anon_WITH_RC4_128_MD5          = { 0x00,0x18 };
#    CipherSuite TLS_DH_anon_WITH_3DES_EDE_CBC_SHA     = { 0x00,0x1B };
#    CipherSuite TLS_DH_anon_WITH_AES_128_CBC_SHA      = { 0x00,0x34 };
#    CipherSuite TLS_DH_anon_WITH_AES_256_CBC_SHA      = { 0x00,0x3A };
#    CipherSuite TLS_DH_anon_WITH_AES_128_CBC_SHA256   = { 0x00,0x6C };
#    CipherSuite TLS_DH_anon_WITH_AES_256_CBC_SHA256   = { 0x00,0x6D };
# 
# Note that using non-anonymous key exchange without actually verifying
# the key exchange is essentially equivalent to anonymous key exchange,
# and the same precautions apply.  While non-anonymous key exchange
# will generally involve a higher computational and communicational
# cost than anonymous key exchange, it may be in the interest of
# interoperability not to disable non-anonymous key exchange when the
# application layer is allowing anonymous key exchange.
# 
# New cipher suite values have been assigned by IANA as described in
# Section 12.
# 
# Note: The cipher suite values { 0x00, 0x1C } and { 0x00, 0x1D } are
# reserved to avoid collision with Fortezza-based cipher suites in
# SSL 3.

[[spec]]
level = "MUST"
quote = '''
TLS_NULL_WITH_NULL_NULL is specified and is the initial state of a
TLS connection during the first handshake on that channel, but MUST
NOT be negotiated, as it provides no more protection than an
unsecured connection.
'''

[[spec]]
level = "MUST"
quote = '''
Using this mode therefore is of limited use: These
cipher suites MUST NOT be used by TLS 1.2 implementations unless the
application layer has specifically requested to allow anonymous key
exchange.
'''

