Rework how lengths are expressed in CBC test
This is hopefully more readable in the .data file.
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
diff --git a/tests/suites/test_suite_ssl.function b/tests/suites/test_suite_ssl.function
index 36023dd..0847e75 100644
--- a/tests/suites/test_suite_ssl.function
+++ b/tests/suites/test_suite_ssl.function
@@ -3454,7 +3454,7 @@
/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_AES_C:MBEDTLS_SSL_PROTO_TLS1_2 */
void ssl_decrypt_non_etm_cbc( int cipher_type, int hash_id, int trunc_hmac,
- int plaintext_len, int pad_long )
+ int length_selector )
{
/*
* Test record decryption for CBC without EtM, focused on the verification
@@ -3464,13 +3464,21 @@
* and either AES, ARIA, Camellia or DES, but since the test framework
* doesn't support alternation in dependency statements, just depend on
* TLS 1.2 and AES.
+ *
+ * The length_selector argument is interpreted as follows:
+ * - if it's -1, the plaintext length is 0 and minimal padding is applied
+ * - if it's -2, the plaintext length is 0 and maximal padding is applied
+ * - otherwise it must be in [0, 255] and is padding_length from RFC 5246:
+ * it's the length of the rest of the padding, that is, excluding the
+ * byte that encodes the length. The minimal non-zero plaintext length
+ * that gives this padding_length is automatically selected.
*/
mbedtls_ssl_context ssl; /* ONLY for debugging */
mbedtls_ssl_transform t0, t1;
mbedtls_record rec, rec_save;
unsigned char *buf = NULL, *buf_save = NULL;
size_t buflen, olen = 0;
- size_t block_size, i;
+ size_t plaintext_len, block_size, i;
unsigned char padlen;
unsigned char add_data[13];
unsigned char mac[MBEDTLS_MD_MAX_SIZE];
@@ -3487,13 +3495,27 @@
MBEDTLS_SSL_MINOR_VERSION_3,
0 , 0 ) == 0 );
- /* Determine padding length */
+ /* Determine padding/plaintext length */
+ TEST_ASSERT( length_selector >= -2 && length_selector <= 255 );
block_size = t0.ivlen;
- padlen = block_size - ( plaintext_len + t0.maclen + 1 ) % block_size;
- if( padlen == block_size )
- padlen = 0;
- if( pad_long )
- padlen += block_size * ( ( pad_max_len - padlen ) / block_size );
+ if( length_selector < 0 )
+ {
+ plaintext_len = 0;
+
+ /* Minimal padding */
+ padlen = block_size - ( t0.maclen + 1 ) % block_size;
+
+ /* Maximal padding? */
+ if( length_selector == -2 )
+ padlen += block_size * ( ( pad_max_len - padlen ) / block_size );
+ }
+ else
+ {
+ padlen = length_selector;
+
+ /* Minimal non-zero plaintext_length givin desired padding */
+ plaintext_len = block_size - ( padlen + t0.maclen + 1 ) % block_size;
+ }
/* Prepare a buffer for record data */
buflen = block_size