Update NSS to 3.38

- Added HACL*Poly1305 32-bit (INRIA/Microsoft)
- Updated to final TLS 1.3 draft version (28)
- Removed TLS 1.3 prerelease draft limit check
- Removed NPN code
- Enabled dev/urandom-only RNG on Linux with NSS_SEED_ONLY_DEV_URANDOM for non-standard environments
- Fixed several bugs with TLS 1.3 negotiation
- Updated internal certificate store
- Added support for the TLS Record Size Limit Extension.
- Fixed CVE-2018-0495
- Various security fixes in the ASN.1 code.
This commit is contained in:
wolfbeast 2018-08-14 07:52:35 +02:00 committed by Roy Tam
commit d36d4eb674
197 changed files with 4873 additions and 7145 deletions

View file

@ -158,23 +158,18 @@ SSL_IMPORT PRFileDesc *DTLS_ImportFD(PRFileDesc *model, PRFileDesc *fd);
#define SSL_CBC_RANDOM_IV 23
#define SSL_ENABLE_OCSP_STAPLING 24 /* Request OCSP stapling (client) */
/* SSL_ENABLE_NPN controls whether the NPN extension is enabled for the initial
* handshake when application layer protocol negotiation is used.
* SSL_SetNextProtoCallback or SSL_SetNextProtoNego must be used to control the
* application layer protocol negotiation; otherwise, the NPN extension will
* not be negotiated. SSL_ENABLE_NPN is currently enabled by default but this
* may change in future versions.
*/
/* SSL_ENABLE_NPN is defunct and defaults to false.
* Using this option will not have any effect but won't produce an error. */
#define SSL_ENABLE_NPN 25
/* SSL_ENABLE_ALPN controls whether the ALPN extension is enabled for the
* initial handshake when application layer protocol negotiation is used.
* SSL_SetNextProtoNego (not SSL_SetNextProtoCallback) must be used to control
* the application layer protocol negotiation; otherwise, the ALPN extension
* will not be negotiated. ALPN is not negotiated for renegotiation handshakes,
* even though the ALPN specification defines a way to use ALPN during
* renegotiations. SSL_ENABLE_ALPN is currently disabled by default, but this
* may change in future versions.
* SSL_SetNextProtoNego or SSL_SetNextProtoCallback can be used to control
* the application layer protocol negotiation;
* ALPN is not negotiated for renegotiation handshakes, even though the ALPN
* specification defines a way to use ALPN during renegotiations.
* SSL_ENABLE_ALPN is currently enabled by default, but this may change in
* future versions.
*/
#define SSL_ENABLE_ALPN 26
@ -248,12 +243,45 @@ SSL_IMPORT PRFileDesc *DTLS_ImportFD(PRFileDesc *model, PRFileDesc *fd);
*/
#define SSL_ENABLE_0RTT_DATA 33
/* Sets a limit to the size of encrypted records (see
* draft-ietf-tls-record-limit). This is the value that is advertised to peers,
* not a limit on the size of records that will be created. Setting this value
* reduces the size of records that will be received (not sent).
*
* This limit applies to the plaintext, but the records that appear on the wire
* will be bigger. This doesn't include record headers, IVs, block cipher
* padding, and authentication tags or MACs.
*
* NSS always advertises the record size limit extension. If this option is not
* set, the extension will contain the maximum allowed size for the selected TLS
* version (currently this is 16384 or 2^14 for TLS 1.2 and lower and 16385 for
* TLS 1.3).
*
* By default, NSS creates records that are the maximum size possible, using all
* the data that was written by the application. Writes larger than the maximum
* are split into maximum sized records, and any remainder (unless
* SSL_CBC_RANDOM_IV is enabled and active). If a peer advertises a record size
* limit then that value is used instead.
*/
#define SSL_RECORD_SIZE_LIMIT 34
/* Enables TLS 1.3 compatibility mode. In this mode, the client includes a fake
* session ID in the handshake and sends a ChangeCipherSpec. A server will
* always use the setting chosen by the client, so the value of this option has
* no effect for a server. This setting is ignored for DTLS. */
#define SSL_ENABLE_TLS13_COMPAT_MODE 35
/* Enables the sending of DTLS records using the short (two octet) record
* header. Only do this if there are 2^10 or fewer packets in flight at a time;
* using this with a larger number of packets in flight could mean that packets
* are dropped if there is reordering.
*
* This applies to TLS 1.3 only. This is not a parameter that is negotiated
* during the TLS handshake. Unlike other socket options, this option can be
* changed after a handshake is complete.
*/
#define SSL_ENABLE_DTLS_SHORT_HEADER 36
#ifdef SSL_DEPRECATED_FUNCTION
/* Old deprecated function names */
SSL_IMPORT SECStatus SSL_Enable(PRFileDesc *fd, int option, PRIntn on);
@ -272,10 +300,10 @@ SSL_IMPORT SECStatus SSL_OptionSetDefault(PRInt32 option, PRIntn val);
SSL_IMPORT SECStatus SSL_OptionGetDefault(PRInt32 option, PRIntn *val);
SSL_IMPORT SECStatus SSL_CertDBHandleSet(PRFileDesc *fd, CERTCertDBHandle *dbHandle);
/* SSLNextProtoCallback is called during the handshake for the client, when a
* Next Protocol Negotiation (NPN) extension has been received from the server.
* |protos| and |protosLen| define a buffer which contains the server's
* advertisement. This data is guaranteed to be well formed per the NPN spec.
/* SSLNextProtoCallback is called during the handshake for the server, when an
* Application-Layer Protocol Negotiation (ALPN) extension has been received
* from the client. |protos| and |protosLen| define a buffer which contains the
* client's advertisement.
* |protoOut| is a buffer provided by the caller, of length 255 (the maximum
* allowed by the protocol). On successful return, the protocol to be announced
* to the server will be in |protoOut| and its length in |*protoOutLen|.
@ -291,27 +319,24 @@ typedef SECStatus(PR_CALLBACK *SSLNextProtoCallback)(
unsigned int *protoOutLen,
unsigned int protoMaxOut);
/* SSL_SetNextProtoCallback sets a callback function to handle Next Protocol
* Negotiation. It causes a client to advertise NPN. */
/* SSL_SetNextProtoCallback sets a callback function to handle ALPN Negotiation.
* It causes a client to advertise ALPN. */
SSL_IMPORT SECStatus SSL_SetNextProtoCallback(PRFileDesc *fd,
SSLNextProtoCallback callback,
void *arg);
/* SSL_SetNextProtoNego can be used as an alternative to
* SSL_SetNextProtoCallback. It also causes a client to advertise NPN and
* installs a default callback function which selects the first supported
* protocol in server-preference order. If no matching protocol is found it
* selects the first supported protocol.
* SSL_SetNextProtoCallback.
*
* Using this function also allows the client to transparently support ALPN.
* Using this function allows client and server to transparently support ALPN.
* The same set of protocols will be advertised via ALPN and, if the server
* uses ALPN to select a protocol, SSL_GetNextProto will return
* SSL_NEXT_PROTO_SELECTED as the state.
*
* Since NPN uses the first protocol as the fallback protocol, when sending an
* ALPN extension, the first protocol is moved to the end of the list. This
* indicates that the fallback protocol is the least preferred. The other
* protocols should be in preference order.
* Because the predecessor to ALPN, NPN, used the first protocol as the fallback
* protocol, when sending an ALPN extension, the first protocol is moved to the
* end of the list. This indicates that the fallback protocol is the least
* preferred. The other protocols should be in preference order.
*
* The supported protocols are specified in |data| in wire-format (8-bit
* length-prefixed). For example: "\010http/1.1\006spdy/2". */