Refactor some argument checks for readability

No intended behavior change.
This commit is contained in:
Gilles Peskine 2018-06-04 17:17:16 +02:00 committed by itayzafrir
parent 7e9288520f
commit 89d789c9bc

View file

@ -1456,13 +1456,22 @@ psa_status_t psa_cipher_update( psa_cipher_operation_t *operation,
size_t *output_length ) size_t *output_length )
{ {
int ret = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; int ret = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE;
size_t expected_output_size = size_t expected_output_size;
( ( operation->ctx.cipher.unprocessed_len + input_length ) / if( PSA_ALG_IS_BLOCK_CIPHER( operation->alg ) )
operation->block_size ) * operation->block_size; {
if( ( ( PSA_ALG_IS_STREAM_CIPHER( operation->alg ) ) && /* Take the unprocessed partial block left over from previous
( output_size < input_length ) ) || * update calls, if any, plus the input to this call. Remove
( ( PSA_ALG_IS_BLOCK_CIPHER( operation->alg ) ) && * the last partial block, if any. You get the data that will be
( output_size < expected_output_size ) ) ) * output in this call. */
expected_output_size =
( operation->ctx.cipher.unprocessed_len + input_length )
/ operation->block_size * operation->block_size;
}
else
{
expected_output_size = input_length;
}
if( output_size < expected_output_size )
return( PSA_ERROR_BUFFER_TOO_SMALL ); return( PSA_ERROR_BUFFER_TOO_SMALL );
ret = mbedtls_cipher_update( &operation->ctx.cipher, input, ret = mbedtls_cipher_update( &operation->ctx.cipher, input,
@ -1493,14 +1502,17 @@ psa_status_t psa_cipher_finish( psa_cipher_operation_t *operation,
{ {
if( operation->ctx.cipher.unprocessed_len > operation->block_size ) if( operation->ctx.cipher.unprocessed_len > operation->block_size )
return( PSA_ERROR_INVALID_ARGUMENT ); return( PSA_ERROR_INVALID_ARGUMENT );
if( ( ( operation->alg & PSA_ALG_BLOCK_CIPHER_PADDING_MASK ) switch( operation->alg & PSA_ALG_BLOCK_CIPHER_PADDING_MASK )
== PSA_ALG_BLOCK_CIPHER_PAD_NONE ) {
&& ( operation->ctx.cipher.unprocessed_len != 0 ) ) case PSA_ALG_BLOCK_CIPHER_PAD_NONE:
if( operation->ctx.cipher.unprocessed_len != 0 )
return( PSA_ERROR_INVALID_ARGUMENT ); return( PSA_ERROR_INVALID_ARGUMENT );
if( ( ( operation->alg & PSA_ALG_BLOCK_CIPHER_PADDING_MASK ) break;
== PSA_ALG_BLOCK_CIPHER_PAD_PKCS7 ) case PSA_ALG_BLOCK_CIPHER_PAD_PKCS7:
&& ( *output_length != operation->block_size ) ) if( *output_length != operation->block_size )
return( PSA_ERROR_INVALID_ARGUMENT ); return( PSA_ERROR_INVALID_ARGUMENT );
break;
}
} }
ret = mbedtls_cipher_finish( &operation->ctx.cipher, temp_output_buffer, ret = mbedtls_cipher_finish( &operation->ctx.cipher, temp_output_buffer,