mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-03 20:22:59 -05:00 
			
		
		
		
	Explain the design of mbedtls_psa_get_random better
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
		
							parent
							
								
									0c59ba88cb
								
							
						
					
					
						commit
						9c3e060253
					
				@ -6412,14 +6412,28 @@ psa_status_t psa_generate_random( uint8_t *output,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Wrapper function allowing the classic API to use the PSA RNG.
 | 
			
		||||
 * In the non-external case, mbedtls_psa_get_random is defined
 | 
			
		||||
 * as a constant function pointer in psa_crypto_random_impl.h.
 | 
			
		||||
 *
 | 
			
		||||
 * `mbedtls_psa_get_random(MBEDTLS_PSA_RANDOM_STATE, ...)` calls
 | 
			
		||||
 * `psa_generate_random(...)`. The state parameter is ignored since the
 | 
			
		||||
 * PSA API doesn't support passing an explicit state.
 | 
			
		||||
 *
 | 
			
		||||
 * In the non-external case, psa_generate_random() calls an
 | 
			
		||||
 * `mbedtls_xxx_drbg_random` function which has exactly the same signature
 | 
			
		||||
 * and semantics as mbedtls_psa_get_random(). As an optimization,
 | 
			
		||||
 * instead of doing this back-and-forth between the PSA API and the
 | 
			
		||||
 * classic API, psa_crypto_random_impl.h defines `mbedtls_psa_get_random`
 | 
			
		||||
 * as a constant function pointer to `mbedtls_xxx_drbg_random`.
 | 
			
		||||
 */
 | 
			
		||||
#if defined (MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG)
 | 
			
		||||
int mbedtls_psa_get_random( void *p_rng,
 | 
			
		||||
                            unsigned char *output,
 | 
			
		||||
                            size_t output_size )
 | 
			
		||||
{
 | 
			
		||||
    /* This function takes a pointer to the RNG state because that's what
 | 
			
		||||
     * classic mbedtls functions using an RNG expect. The PSA RNG manages
 | 
			
		||||
     * its own state internally and doesn't let the caller access that state.
 | 
			
		||||
     * So we just ignore the state parameter, and in practice we'll pass
 | 
			
		||||
     * NULL. */
 | 
			
		||||
    (void) p_rng;
 | 
			
		||||
    psa_status_t status = psa_generate_random( output, output_size );
 | 
			
		||||
    if( status == PSA_SUCCESS )
 | 
			
		||||
 | 
			
		||||
@ -30,10 +30,12 @@
 | 
			
		||||
 | 
			
		||||
typedef mbedtls_psa_external_random_context_t mbedtls_psa_random_context_t;
 | 
			
		||||
 | 
			
		||||
/* Trivial wrapper around psa_generate_random(). */
 | 
			
		||||
int mbedtls_psa_get_random( void *p_rng,
 | 
			
		||||
                            unsigned char *output,
 | 
			
		||||
                            size_t output_size );
 | 
			
		||||
 | 
			
		||||
/* The PSA RNG API doesn't need any externally maintained state. */
 | 
			
		||||
#define MBEDTLS_PSA_RANDOM_STATE NULL
 | 
			
		||||
 | 
			
		||||
#else /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */
 | 
			
		||||
@ -163,6 +165,8 @@ static mbedtls_f_rng_t *const mbedtls_psa_get_random = mbedtls_hmac_drbg_random;
 | 
			
		||||
 * This variable is only intended to be used through the macro
 | 
			
		||||
 * #MBEDTLS_PSA_RANDOM_STATE.
 | 
			
		||||
 */
 | 
			
		||||
/* psa_crypto.c sets this variable to a pointer to the DRBG state in the
 | 
			
		||||
 * global PSA crypto state. */
 | 
			
		||||
extern mbedtls_psa_drbg_context_t *const mbedtls_psa_random_state;
 | 
			
		||||
 | 
			
		||||
/** A pointer to the PSA DRBG state.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user