Simplify psa_generator_tls12_prf_generate_next_block()
diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index 2030315..5ee43e4 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -3372,6 +3372,9 @@
psa_hmac_internal_data hmac;
psa_status_t status, cleanup_status;
+ unsigned char *Ai;
+ size_t Ai_len;
+
/* We can't be wanting more output after block 0xff, otherwise
* the capacity check in psa_generator_read() would have
* prevented this call. It could happen only if the generator
@@ -3415,51 +3418,34 @@
* length than the other A(i). */
if( tls12_prf->block_number == 1 )
{
- /* Compute A(1) = HMAC_hash(secret, label + seed) */
- status = psa_hmac_setup_internal( &hmac,
- tls12_prf->key,
- tls12_prf->key_len,
- hash_alg );
- if( status != PSA_SUCCESS )
- goto cleanup;
-
- status = psa_hash_update( &hmac.hash_ctx,
- /* This omits the (so far undefined)
- * first hash_length bytes. */
- tls12_prf->Ai_with_seed + hash_length,
- tls12_prf->Ai_with_seed_len - hash_length );
- if( status != PSA_SUCCESS )
- goto cleanup;
- status = psa_hmac_finish_internal( &hmac,
- tls12_prf->Ai_with_seed,
- hash_length );
- if( status != PSA_SUCCESS )
- goto cleanup;
+ Ai = tls12_prf->Ai_with_seed + hash_length;
+ Ai_len = tls12_prf->Ai_with_seed_len - hash_length;
}
else
{
- /* Compute A(i+1) = HMAC_hash(secret, A(i)) */
- status = psa_hmac_setup_internal( &hmac,
- tls12_prf->key,
- tls12_prf->key_len,
- hash_alg );
- if( status != PSA_SUCCESS )
- goto cleanup;
-
- status = psa_hash_update( &hmac.hash_ctx,
- tls12_prf->Ai_with_seed,
- /* This omits the seed part of A(i) */
- hash_length );
- if( status != PSA_SUCCESS )
- goto cleanup;
-
- status = psa_hmac_finish_internal( &hmac,
- tls12_prf->Ai_with_seed,
- hash_length );
- if( status != PSA_SUCCESS )
- goto cleanup;
+ Ai = tls12_prf->Ai_with_seed;
+ Ai_len = hash_length;
}
+ /* Compute A(i+1) = HMAC_hash(secret, A(i)) */
+ status = psa_hmac_setup_internal( &hmac,
+ tls12_prf->key,
+ tls12_prf->key_len,
+ hash_alg );
+ if( status != PSA_SUCCESS )
+ goto cleanup;
+
+ status = psa_hash_update( &hmac.hash_ctx,
+ Ai, Ai_len );
+ if( status != PSA_SUCCESS )
+ goto cleanup;
+
+ status = psa_hmac_finish_internal( &hmac,
+ tls12_prf->Ai_with_seed,
+ hash_length );
+ if( status != PSA_SUCCESS )
+ goto cleanup;
+
/* Compute the next block `HMAC_hash(secret, A(i+1) + seed)`. */
status = psa_hmac_setup_internal( &hmac,
tls12_prf->key,