mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-03 20:22:59 -05:00 
			
		
		
		
	Do not use compression with DTLS
This commit is contained in:
		
							parent
							
								
									5d53cbef3a
								
							
						
					
					
						commit
						a0e1632b79
					
				@ -1070,6 +1070,8 @@
 | 
				
			|||||||
 * CRIME attack. Before enabling this option, you should examine with care if
 | 
					 * CRIME attack. Before enabling this option, you should examine with care if
 | 
				
			||||||
 * CRIME or similar exploits may be a applicable to your use case.
 | 
					 * CRIME or similar exploits may be a applicable to your use case.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 | 
					 * \note Currently compression can't bu used with DTLS.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 * Used in: library/ssl_tls.c
 | 
					 * Used in: library/ssl_tls.c
 | 
				
			||||||
 *          library/ssl_cli.c
 | 
					 *          library/ssl_cli.c
 | 
				
			||||||
 *          library/ssl_srv.c
 | 
					 *          library/ssl_srv.c
 | 
				
			||||||
 | 
				
			|||||||
@ -450,6 +450,7 @@ static int ssl_write_client_hello( ssl_context *ssl )
 | 
				
			|||||||
    size_t i, n, olen, ext_len = 0;
 | 
					    size_t i, n, olen, ext_len = 0;
 | 
				
			||||||
    unsigned char *buf;
 | 
					    unsigned char *buf;
 | 
				
			||||||
    unsigned char *p, *q;
 | 
					    unsigned char *p, *q;
 | 
				
			||||||
 | 
					    unsigned char offer_compress;
 | 
				
			||||||
#if defined(POLARSSL_HAVE_TIME)
 | 
					#if defined(POLARSSL_HAVE_TIME)
 | 
				
			||||||
    time_t t;
 | 
					    time_t t;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -636,8 +637,25 @@ static int ssl_write_client_hello( ssl_context *ssl )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    SSL_DEBUG_MSG( 3, ( "client hello, got %d ciphersuites", n ) );
 | 
					    SSL_DEBUG_MSG( 3, ( "client hello, got %d ciphersuites", n ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(POLARSSL_ZLIB_SUPPORT)
 | 
					#if defined(POLARSSL_ZLIB_SUPPORT)
 | 
				
			||||||
 | 
					    offer_compress = 1;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    offer_compress = 0;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * We don't support compression with DTLS right now: is many records come
 | 
				
			||||||
 | 
					     * in the same datagram, uncompressing one could overwrite the next one.
 | 
				
			||||||
 | 
					     * We don't want to add complexity for handling that case unless there is
 | 
				
			||||||
 | 
					     * an actual need for it.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					#if defined(POLARSSL_SSL_PROTO_DTLS)
 | 
				
			||||||
 | 
					    if( ssl->transport == SSL_TRANSPORT_DATAGRAM )
 | 
				
			||||||
 | 
					        offer_compress = 0;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if( offer_compress )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 2 ) );
 | 
					        SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 2 ) );
 | 
				
			||||||
        SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d %d",
 | 
					        SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d %d",
 | 
				
			||||||
                            SSL_COMPRESS_DEFLATE, SSL_COMPRESS_NULL ) );
 | 
					                            SSL_COMPRESS_DEFLATE, SSL_COMPRESS_NULL ) );
 | 
				
			||||||
@ -645,13 +663,16 @@ static int ssl_write_client_hello( ssl_context *ssl )
 | 
				
			|||||||
        *p++ = 2;
 | 
					        *p++ = 2;
 | 
				
			||||||
        *p++ = SSL_COMPRESS_DEFLATE;
 | 
					        *p++ = SSL_COMPRESS_DEFLATE;
 | 
				
			||||||
        *p++ = SSL_COMPRESS_NULL;
 | 
					        *p++ = SSL_COMPRESS_NULL;
 | 
				
			||||||
#else
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 1 ) );
 | 
					        SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 1 ) );
 | 
				
			||||||
    SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d", SSL_COMPRESS_NULL ) );
 | 
					        SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d",
 | 
				
			||||||
 | 
					                            SSL_COMPRESS_NULL ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        *p++ = 1;
 | 
					        *p++ = 1;
 | 
				
			||||||
        *p++ = SSL_COMPRESS_NULL;
 | 
					        *p++ = SSL_COMPRESS_NULL;
 | 
				
			||||||
#endif /* POLARSSL_ZLIB_SUPPORT */
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // First write extensions, then the total length
 | 
					    // First write extensions, then the total length
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
@ -967,10 +988,11 @@ static int ssl_parse_hello_verify_request( ssl_context *ssl )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static int ssl_parse_server_hello( ssl_context *ssl )
 | 
					static int ssl_parse_server_hello( ssl_context *ssl )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int ret, i, comp;
 | 
					    int ret, i;
 | 
				
			||||||
    size_t n;
 | 
					    size_t n;
 | 
				
			||||||
    size_t ext_len;
 | 
					    size_t ext_len;
 | 
				
			||||||
    unsigned char *buf, *ext;
 | 
					    unsigned char *buf, *ext;
 | 
				
			||||||
 | 
					    unsigned char comp, accept_comp;
 | 
				
			||||||
    int renegotiation_info_seen = 0;
 | 
					    int renegotiation_info_seen = 0;
 | 
				
			||||||
    int handshake_failure = 0;
 | 
					    int handshake_failure = 0;
 | 
				
			||||||
#if defined(POLARSSL_DEBUG_C)
 | 
					#if defined(POLARSSL_DEBUG_C)
 | 
				
			||||||
@ -1113,9 +1135,33 @@ static int ssl_parse_server_hello( ssl_context *ssl )
 | 
				
			|||||||
        return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO );
 | 
					        return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* ciphersuite (used later) */
 | 
				
			||||||
    i = ( buf[39 + n] << 8 ) | buf[40 + n];
 | 
					    i = ( buf[39 + n] << 8 ) | buf[40 + n];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * Read and check compression
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    comp = buf[41 + n];
 | 
					    comp = buf[41 + n];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(POLARSSL_ZLIB_SUPPORT)
 | 
				
			||||||
 | 
					    accept_comp = 1;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    accept_comp = 0;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* See comments in ssl_write_client_hello() */
 | 
				
			||||||
 | 
					#if defined(POLARSSL_SSL_PROTO_DTLS)
 | 
				
			||||||
 | 
					    if( ssl->transport == SSL_TRANSPORT_DATAGRAM )
 | 
				
			||||||
 | 
					        accept_comp = 0;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if( ( accept_comp == 0 && comp != SSL_COMPRESS_NULL ) ||
 | 
				
			||||||
 | 
					        ( comp != SSL_COMPRESS_NULL && comp != SSL_COMPRESS_DEFLATE ) )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        SSL_DEBUG_MSG( 1, ( "server hello, bad compression: %d", comp ) );
 | 
				
			||||||
 | 
					        return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
     * Initialize update checksum functions
 | 
					     * Initialize update checksum functions
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
				
			|||||||
@ -1444,6 +1444,11 @@ static int ssl_parse_client_hello( ssl_context *ssl )
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* See comments in ssl_write_client_hello() */
 | 
				
			||||||
 | 
					#if defined(POLARSSL_SSL_PROTO_DTLS)
 | 
				
			||||||
 | 
					    if( ssl->transport == SSL_TRANSPORT_DATAGRAM )
 | 
				
			||||||
 | 
					        ssl->session_negotiate->compression = SSL_COMPRESS_NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
     * Check the extension length
 | 
					     * Check the extension length
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user