Skip to content

Commit 91824b5

Browse files
fixup! Key derivation by small input steps: proof-of-concept
Simplify the logic inside a few case statements. This removes unreachable break statements.
1 parent 275a213 commit 91824b5

File tree

1 file changed

+22
-31
lines changed

1 file changed

+22
-31
lines changed

library/psa_crypto.c

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4384,19 +4384,15 @@ static psa_status_t psa_hkdf_input( psa_hkdf_generator_t *hkdf,
43844384
switch( step )
43854385
{
43864386
case PSA_KDF_STEP_SALT:
4387-
if( hkdf->state == HKDF_STATE_INIT )
4388-
{
4389-
status = psa_hmac_setup_internal( &hkdf->hmac,
4390-
data, data_length,
4391-
hash_alg );
4392-
if( status != PSA_SUCCESS )
4393-
return( status );
4394-
hkdf->state = HKDF_STATE_STARTED;
4395-
return( PSA_SUCCESS );
4396-
}
4397-
else
4387+
if( hkdf->state != HKDF_STATE_INIT )
43984388
return( PSA_ERROR_BAD_STATE );
4399-
break;
4389+
status = psa_hmac_setup_internal( &hkdf->hmac,
4390+
data, data_length,
4391+
hash_alg );
4392+
if( status != PSA_SUCCESS )
4393+
return( status );
4394+
hkdf->state = HKDF_STATE_STARTED;
4395+
return( PSA_SUCCESS );
44004396
case PSA_KDF_STEP_SECRET:
44014397
/* If no salt was provided, use an empty salt. */
44024398
if( hkdf->state == HKDF_STATE_INIT )
@@ -4408,25 +4404,21 @@ static psa_status_t psa_hkdf_input( psa_hkdf_generator_t *hkdf,
44084404
return( status );
44094405
hkdf->state = HKDF_STATE_STARTED;
44104406
}
4411-
if( hkdf->state == HKDF_STATE_STARTED )
4412-
{
4413-
status = psa_hash_update( &hkdf->hmac.hash_ctx,
4414-
data, data_length );
4415-
if( status != PSA_SUCCESS )
4416-
return( status );
4417-
status = psa_hmac_finish_internal( &hkdf->hmac,
4418-
hkdf->prk,
4419-
sizeof( hkdf->prk ) );
4420-
if( status != PSA_SUCCESS )
4421-
return( status );
4422-
hkdf->offset_in_block = PSA_HASH_SIZE( hash_alg );
4423-
hkdf->block_number = 0;
4424-
hkdf->state = HKDF_STATE_KEYED;
4425-
return( PSA_SUCCESS );
4426-
}
4427-
else
4407+
if( hkdf->state != HKDF_STATE_STARTED )
44284408
return( PSA_ERROR_BAD_STATE );
4429-
break;
4409+
status = psa_hash_update( &hkdf->hmac.hash_ctx,
4410+
data, data_length );
4411+
if( status != PSA_SUCCESS )
4412+
return( status );
4413+
status = psa_hmac_finish_internal( &hkdf->hmac,
4414+
hkdf->prk,
4415+
sizeof( hkdf->prk ) );
4416+
if( status != PSA_SUCCESS )
4417+
return( status );
4418+
hkdf->offset_in_block = PSA_HASH_SIZE( hash_alg );
4419+
hkdf->block_number = 0;
4420+
hkdf->state = HKDF_STATE_KEYED;
4421+
return( PSA_SUCCESS );
44304422
case PSA_KDF_STEP_INFO:
44314423
if( hkdf->state == HKDF_STATE_OUTPUT )
44324424
return( PSA_ERROR_BAD_STATE );
@@ -4613,7 +4605,6 @@ static psa_status_t psa_key_agreement_raw_internal( psa_algorithm_t alg,
46134605
private_key->data.ecp,
46144606
shared_secret, shared_secret_size,
46154607
shared_secret_length ) );
4616-
break;
46174608
#endif /* MBEDTLS_ECDH_C */
46184609
default:
46194610
(void) private_key;

0 commit comments

Comments
 (0)