mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-07-29 11:41:15 +03:00
tls: Add internal function ssl_read_application_data()
The function will be used by mbedtls_ssl_read_early_data() as well. Signed-off-by: Jerry Yu <jerry.h.yu@arm.com> Signed-off-by: Ronald Cron <ronald.cron@arm.com>
This commit is contained in:
@ -5647,13 +5647,54 @@ static int ssl_handle_hs_message_post_handshake(mbedtls_ssl_context *ssl)
|
|||||||
return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
|
return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* brief Read at most 'len' application data bytes from the input
|
||||||
|
* buffer.
|
||||||
|
*
|
||||||
|
* param ssl SSL context:
|
||||||
|
* - First byte of application data not read yet in the input
|
||||||
|
* buffer located at address `in_offt`.
|
||||||
|
* - The number of bytes of data not read yet is `in_msglen`.
|
||||||
|
* param buf buffer that will hold the data
|
||||||
|
* param len maximum number of bytes to read
|
||||||
|
*
|
||||||
|
* note The function updates the fields `in_offt` and `in_msglen`
|
||||||
|
* according to the number of bytes read.
|
||||||
|
*
|
||||||
|
* return The number of bytes read.
|
||||||
|
*/
|
||||||
|
static int ssl_read_application_data(
|
||||||
|
mbedtls_ssl_context *ssl, unsigned char *buf, size_t len)
|
||||||
|
{
|
||||||
|
size_t n = (len < ssl->in_msglen) ? len : ssl->in_msglen;
|
||||||
|
|
||||||
|
if (len != 0) {
|
||||||
|
memcpy(buf, ssl->in_offt, n);
|
||||||
|
ssl->in_msglen -= n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Zeroising the plaintext buffer to erase unused application data
|
||||||
|
from the memory. */
|
||||||
|
mbedtls_platform_zeroize(ssl->in_offt, n);
|
||||||
|
|
||||||
|
if (ssl->in_msglen == 0) {
|
||||||
|
/* all bytes consumed */
|
||||||
|
ssl->in_offt = NULL;
|
||||||
|
ssl->keep_current_message = 0;
|
||||||
|
} else {
|
||||||
|
/* more data available */
|
||||||
|
ssl->in_offt += n;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int) n;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Receive application data decrypted from the SSL layer
|
* Receive application data decrypted from the SSL layer
|
||||||
*/
|
*/
|
||||||
int mbedtls_ssl_read(mbedtls_ssl_context *ssl, unsigned char *buf, size_t len)
|
int mbedtls_ssl_read(mbedtls_ssl_context *ssl, unsigned char *buf, size_t len)
|
||||||
{
|
{
|
||||||
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
|
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
|
||||||
size_t n;
|
|
||||||
|
|
||||||
if (ssl == NULL || ssl->conf == NULL) {
|
if (ssl == NULL || ssl->conf == NULL) {
|
||||||
return MBEDTLS_ERR_SSL_BAD_INPUT_DATA;
|
return MBEDTLS_ERR_SSL_BAD_INPUT_DATA;
|
||||||
@ -5817,30 +5858,11 @@ int mbedtls_ssl_read(mbedtls_ssl_context *ssl, unsigned char *buf, size_t len)
|
|||||||
#endif /* MBEDTLS_SSL_PROTO_DTLS */
|
#endif /* MBEDTLS_SSL_PROTO_DTLS */
|
||||||
}
|
}
|
||||||
|
|
||||||
n = (len < ssl->in_msglen)
|
ret = ssl_read_application_data(ssl, buf, len);
|
||||||
? len : ssl->in_msglen;
|
|
||||||
|
|
||||||
if (len != 0) {
|
|
||||||
memcpy(buf, ssl->in_offt, n);
|
|
||||||
ssl->in_msglen -= n;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Zeroising the plaintext buffer to erase unused application data
|
|
||||||
from the memory. */
|
|
||||||
mbedtls_platform_zeroize(ssl->in_offt, n);
|
|
||||||
|
|
||||||
if (ssl->in_msglen == 0) {
|
|
||||||
/* all bytes consumed */
|
|
||||||
ssl->in_offt = NULL;
|
|
||||||
ssl->keep_current_message = 0;
|
|
||||||
} else {
|
|
||||||
/* more data available */
|
|
||||||
ssl->in_offt += n;
|
|
||||||
}
|
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG(2, ("<= read"));
|
MBEDTLS_SSL_DEBUG_MSG(2, ("<= read"));
|
||||||
|
|
||||||
return (int) n;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user