Improve comments/documentation
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
This commit is contained in:
parent
49221900b0
commit
d4069247b8
3 changed files with 48 additions and 10 deletions
|
@ -5199,17 +5199,43 @@ int mbedtls_ssl_read_early_data(mbedtls_ssl_context *ssl,
|
||||||
* \brief Try to write exactly 'len' application data bytes while
|
* \brief Try to write exactly 'len' application data bytes while
|
||||||
* performing the handshake (early data).
|
* performing the handshake (early data).
|
||||||
*
|
*
|
||||||
|
* \warning Early data is defined in the TLS 1.3 specification, RFC 8446.
|
||||||
|
* IMPORTANT NOTE from section 2.3 of the specification:
|
||||||
|
*
|
||||||
|
* The security properties for 0-RTT data are weaker than
|
||||||
|
* those for other kinds of TLS data. Specifically:
|
||||||
|
* - This data is not forward secret, as it is encrypted
|
||||||
|
* solely under keys derived using the offered PSK.
|
||||||
|
* - There are no guarantees of non-replay between connections.
|
||||||
|
* Protection against replay for ordinary TLS 1.3 1-RTT data
|
||||||
|
* is provided via the server's Random value, but 0-RTT data
|
||||||
|
* does not depend on the ServerHello and therefore has
|
||||||
|
* weaker guarantees. This is especially relevant if the
|
||||||
|
* data is authenticated either with TLS client
|
||||||
|
* authentication or inside the application protocol. The
|
||||||
|
* same warnings apply to any use of the
|
||||||
|
* early_exporter_master_secret.
|
||||||
|
*
|
||||||
* \note This function behaves mainly as mbedtls_ssl_write(). The
|
* \note This function behaves mainly as mbedtls_ssl_write(). The
|
||||||
* specification of mbedtls_ssl_write() relevant to TLS 1.3
|
* specification of mbedtls_ssl_write() relevant to TLS 1.3
|
||||||
* (thus not the parts specific to (D)TLS1.2) applies to this
|
* (thus not the parts specific to (D)TLS1.2) applies to this
|
||||||
* function and the present documentation is restricted to the
|
* function and the present documentation is mainly restricted
|
||||||
* differences with mbedtls_ssl_write().
|
* to the differences with mbedtls_ssl_write(). One noticeable
|
||||||
|
* difference though is that mbedtls_ssl_write() aims to
|
||||||
|
* complete the handshake before to write application data
|
||||||
|
* while mbedtls_ssl_write_early() aims to drive the handshake
|
||||||
|
* just past the point where it is not possible to send early
|
||||||
|
* data anymore.
|
||||||
*
|
*
|
||||||
* \param ssl SSL context
|
* \param ssl SSL context
|
||||||
* \param buf buffer holding the data
|
* \param buf buffer holding the data
|
||||||
* \param len how many bytes must be written
|
* \param len how many bytes must be written
|
||||||
*
|
*
|
||||||
* \return One additional specific return value:
|
* \return The (non-negative) number of bytes actually written if
|
||||||
|
* successful (may be less than \p len).
|
||||||
|
*
|
||||||
|
* \return One additional specific error code compared to
|
||||||
|
* mbedtls_ssl_write():
|
||||||
* #MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA.
|
* #MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA.
|
||||||
*
|
*
|
||||||
* #MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA is returned when it
|
* #MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA is returned when it
|
||||||
|
|
|
@ -6087,14 +6087,17 @@ int mbedtls_ssl_write_early_data(mbedtls_ssl_context *ssl,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we are at the beginning of the handshake, advance the handshake just
|
* If we are at the beginning of the handshake, the early data status being
|
||||||
|
* equal to MBEDTLS_SSL_EARLY_DATA_STATUS_UNKNOWN or
|
||||||
|
* MBEDTLS_SSL_EARLY_DATA_STATUS_SENT advance the handshake just
|
||||||
* enough to be able to send early data if possible. That way, we can
|
* enough to be able to send early data if possible. That way, we can
|
||||||
* guarantee that when starting the handshake with this function we will
|
* guarantee that when starting the handshake with this function we will
|
||||||
* send at least one record of early data.
|
* send at least one record of early data. Note that when the status is
|
||||||
* Otherwise, resume the handshake and if the handshake sequence stops
|
* MBEDTLS_SSL_EARLY_DATA_STATUS_SENT and not yet
|
||||||
* waiting for some message from the server, send early data if we can.
|
* MBEDTLS_SSL_EARLY_DATA_STATUS_CAN_WRITE, we cannot send early data yet
|
||||||
|
* as the early data outbound transform has not been set as we may have to
|
||||||
|
* first send a dummy CCS in clear.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((ssl->early_data_status == MBEDTLS_SSL_EARLY_DATA_STATUS_UNKNOWN) ||
|
if ((ssl->early_data_status == MBEDTLS_SSL_EARLY_DATA_STATUS_UNKNOWN) ||
|
||||||
(ssl->early_data_status == MBEDTLS_SSL_EARLY_DATA_STATUS_SENT)) {
|
(ssl->early_data_status == MBEDTLS_SSL_EARLY_DATA_STATUS_SENT)) {
|
||||||
while ((ssl->early_data_status == MBEDTLS_SSL_EARLY_DATA_STATUS_UNKNOWN) ||
|
while ((ssl->early_data_status == MBEDTLS_SSL_EARLY_DATA_STATUS_UNKNOWN) ||
|
||||||
|
@ -6112,6 +6115,12 @@ int mbedtls_ssl_write_early_data(mbedtls_ssl_context *ssl,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
/*
|
||||||
|
* If we are past the point where we can send early data, return
|
||||||
|
* immediatly. Otherwise, progress the handshake as much as possible to
|
||||||
|
* not delay it too much. If we reach a point where we can still send
|
||||||
|
* early data, then we will send some.
|
||||||
|
*/
|
||||||
if ((ssl->early_data_status != MBEDTLS_SSL_EARLY_DATA_STATUS_CAN_WRITE) &&
|
if ((ssl->early_data_status != MBEDTLS_SSL_EARLY_DATA_STATUS_CAN_WRITE) &&
|
||||||
(ssl->early_data_status != MBEDTLS_SSL_EARLY_DATA_STATUS_ACCEPTED)) {
|
(ssl->early_data_status != MBEDTLS_SSL_EARLY_DATA_STATUS_ACCEPTED)) {
|
||||||
return MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA;
|
return MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA;
|
||||||
|
|
|
@ -4217,8 +4217,11 @@ void tls13_write_early_data(int scenario)
|
||||||
TEST_EQUAL(ret, 0);
|
TEST_EQUAL(ret, 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Run handshakes and test the writing of early data in each possible
|
* Run handshakes going one state further in the handshake sequence at each
|
||||||
* state.
|
* loop up to the point where we reach the MBEDTLS_SSL_HANDSHAKE_OVER
|
||||||
|
* state. For each reached handshake state, check the result of the call
|
||||||
|
* to mbedtls_ssl_write_early_data() and then restart the handshake from
|
||||||
|
* scratch (see reset label).
|
||||||
*/
|
*/
|
||||||
previous_client_state = MBEDTLS_SSL_HELLO_REQUEST;
|
previous_client_state = MBEDTLS_SSL_HELLO_REQUEST;
|
||||||
client_state = MBEDTLS_SSL_HELLO_REQUEST;
|
client_state = MBEDTLS_SSL_HELLO_REQUEST;
|
||||||
|
|
Loading…
Reference in a new issue