mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-03 20:22:59 -05:00 
			
		
		
		
	Introduce configuration option and API for SSL record checking
This commit is contained in:
		
							parent
							
								
									01655daeee
								
							
						
					
					
						commit
						cfe457921a
					
				@ -1350,6 +1350,19 @@
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_ALL_ALERT_MESSAGES
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \def MBEDTLS_SSL_RECORD_CHECKING
 | 
			
		||||
 *
 | 
			
		||||
 * Enable the API mbedtls_ssl_check_record() which allows to check the
 | 
			
		||||
 * validity, freshness and authenticity of an incoming record without
 | 
			
		||||
 * modifying the externally visible state of the SSL context.
 | 
			
		||||
 *
 | 
			
		||||
 * See mbedtls_ssl_check_record() for more information.
 | 
			
		||||
 *
 | 
			
		||||
 * Uncomment to enable support for record checking.
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_RECORD_CHECKING
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \def MBEDTLS_SSL_DTLS_CONNECTION_ID
 | 
			
		||||
 *
 | 
			
		||||
 | 
			
		||||
@ -1756,6 +1756,54 @@ void mbedtls_ssl_set_verify( mbedtls_ssl_context *ssl,
 | 
			
		||||
 */
 | 
			
		||||
void mbedtls_ssl_conf_read_timeout( mbedtls_ssl_config *conf, uint32_t timeout );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_RECORD_CHECKING)
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Check whether a buffer contains a valid, fresh
 | 
			
		||||
 *                 and authentic application data record (DTLS only).
 | 
			
		||||
 *
 | 
			
		||||
 *                 This function does not change the user-visible state
 | 
			
		||||
 *                 of the SSL context. It's sole purpose is to provide
 | 
			
		||||
 *                 an indication of the legitimacy of an incoming record.
 | 
			
		||||
 *
 | 
			
		||||
 *                 This can be useful e.g. in distributed server environments
 | 
			
		||||
 *                 using the DTLS Connection ID feature, in which connections
 | 
			
		||||
 *                 might need to be passed between service instances on a change
 | 
			
		||||
 *                 of peer address, but where such disruptive operations should
 | 
			
		||||
 *                 only happen after the validity of incoming records has been
 | 
			
		||||
 *                 confirmed.
 | 
			
		||||
 *
 | 
			
		||||
 * \param ssl      The SSL context to use.
 | 
			
		||||
 * \param buf      The address of the buffer holding the record to be checked.
 | 
			
		||||
 *                 This must be an R/W buffer of length \p buflen Bytes.
 | 
			
		||||
 * \param buflen   The length of \p buf in Bytes.
 | 
			
		||||
 *
 | 
			
		||||
 * \note           This routine only checks whether the provided buffer begins
 | 
			
		||||
 *                 with a valid, fresh and authentic record, but does not check
 | 
			
		||||
 *                 potential data following the initial record. In particular,
 | 
			
		||||
 *                 it is possible to pass DTLS datagrams containing  records,
 | 
			
		||||
 *                 in which case only the first record is checked.
 | 
			
		||||
 *
 | 
			
		||||
 * \note           This function modifies the input buffer \p buf. If you need
 | 
			
		||||
 *                 to preserve the original record, you have to maintain a copy.
 | 
			
		||||
 *
 | 
			
		||||
 * \return         \c 0 if the record is valid, fresh (DTLS only) and authentic.
 | 
			
		||||
 * \return         MBEDTLS_ERR_SSL_INVALID_MAC if the check completed
 | 
			
		||||
 *                 successfully but the record was found to be not authentic.
 | 
			
		||||
 * \return         MBEDTLS_ERR_SSL_INVALID_RECORD if the check completed
 | 
			
		||||
 *                 successfully but the record was found to be invalid for
 | 
			
		||||
 *                 a reason different from authenticity checking.
 | 
			
		||||
 * \return         MBEDTLS_ERR_SSL_UNEXPECTED_RECORD if the check completed
 | 
			
		||||
 *                 successfully but the record was found to be unexpected
 | 
			
		||||
 *                 in the state of the SSL context, including replayed records.
 | 
			
		||||
 * \return         Another negative error code on different kinds of failure.
 | 
			
		||||
 *                 In this case, the SSL context becomes unusable and needs
 | 
			
		||||
 *                 to be freed or reset before reuse.
 | 
			
		||||
 */
 | 
			
		||||
int mbedtls_ssl_check_record( mbedtls_ssl_context const *ssl,
 | 
			
		||||
                              unsigned char *buf,
 | 
			
		||||
                              size_t buflen );
 | 
			
		||||
#endif /* MBEDTLS_SSL_RECORD_CHECKING */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Set the timer callbacks (Mandatory for DTLS.)
 | 
			
		||||
 *
 | 
			
		||||
 | 
			
		||||
@ -112,6 +112,18 @@ static void ssl_update_out_pointers( mbedtls_ssl_context *ssl,
 | 
			
		||||
                                     mbedtls_ssl_transform *transform );
 | 
			
		||||
static void ssl_update_in_pointers( mbedtls_ssl_context *ssl );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_RECORD_CHECKING)
 | 
			
		||||
int mbedtls_ssl_check_record( mbedtls_ssl_context const *ssl,
 | 
			
		||||
                              unsigned char *buf,
 | 
			
		||||
                              size_t buflen )
 | 
			
		||||
{
 | 
			
		||||
    ((void) ssl);
 | 
			
		||||
    ((void) buf);
 | 
			
		||||
    ((void) buflen);
 | 
			
		||||
    return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE );
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_SSL_RECORD_CHECKING */
 | 
			
		||||
 | 
			
		||||
#define SSL_DONT_FORCE_FLUSH 0
 | 
			
		||||
#define SSL_FORCE_FLUSH      1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1242,6 +1242,14 @@ int query_config( const char *config )
 | 
			
		||||
    }
 | 
			
		||||
#endif /* MBEDTLS_SSL_ALL_ALERT_MESSAGES */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_RECORD_CHECKING)
 | 
			
		||||
    if( strcmp( "MBEDTLS_SSL_RECORD_CHECKING", config ) == 0 )
 | 
			
		||||
    {
 | 
			
		||||
        MACRO_EXPANSION_TO_STR( MBEDTLS_SSL_RECORD_CHECKING );
 | 
			
		||||
        return( 0 );
 | 
			
		||||
    }
 | 
			
		||||
#endif /* MBEDTLS_SSL_RECORD_CHECKING */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
 | 
			
		||||
    if( strcmp( "MBEDTLS_SSL_DTLS_CONNECTION_ID", config ) == 0 )
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user