mirror of
				https://github.com/Mbed-TLS/mbedtls.git
				synced 2025-10-31 21:50:31 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * \file psa/crypto_entropy_driver.h
 | |
|  * \brief PSA entropy source driver module
 | |
|  *
 | |
|  * This header declares types and function signatures for entropy sources.
 | |
|  *
 | |
|  * This file is part of the PSA Crypto Driver Model, containing functions for
 | |
|  * driver developers to implement to enable hardware to be called in a
 | |
|  * standardized way by a PSA Cryptographic API implementation. The functions
 | |
|  * comprising the driver model, which driver authors implement, are not
 | |
|  * intended to be called by application developers.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  *  Copyright (C) 2018, ARM Limited, All Rights Reserved
 | |
|  *  SPDX-License-Identifier: Apache-2.0
 | |
|  *
 | |
|  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
 | |
|  *  not use this file except in compliance with the License.
 | |
|  *  You may obtain a copy of the License at
 | |
|  *
 | |
|  *  http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  *  Unless required by applicable law or agreed to in writing, software
 | |
|  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | |
|  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  *  See the License for the specific language governing permissions and
 | |
|  *  limitations under the License.
 | |
|  */
 | |
| #ifndef PSA_CRYPTO_ENTROPY_DRIVER_H
 | |
| #define PSA_CRYPTO_ENTROPY_DRIVER_H
 | |
| 
 | |
| #include "crypto_driver_common.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /** \defgroup driver_rng Entropy Generation
 | |
|  */
 | |
| /**@{*/
 | |
| 
 | |
| /** \brief Initialize an entropy driver
 | |
|  *
 | |
|  *
 | |
|  * \param[in,out] p_context             A hardware-specific structure
 | |
|  *                                      containing any context information for
 | |
|  *                                      the implementation
 | |
|  *
 | |
|  * \retval PSA_SUCCESS
 | |
|  */
 | |
| typedef psa_status_t (*psa_drv_entropy_init_t)(void *p_context);
 | |
| 
 | |
| /** \brief Get a specified number of bits from the entropy source
 | |
|  *
 | |
|  * It retrives `buffer_size` bytes of data from the entropy source. The entropy
 | |
|  * source will always fill the provided buffer to its full size, however, most
 | |
|  * entropy sources have biases, and the actual amount of entropy contained in
 | |
|  * the buffer will be less than the number of bytes.
 | |
|  * The driver will return the actual number of bytes of entropy placed in the
 | |
|  * buffer in `p_received_entropy_bytes`.
 | |
|  * A PSA Crypto API implementation will likely feed the output of this function
 | |
|  * into a Digital Random Bit Generator (DRBG), and typically has a minimum
 | |
|  * amount of entropy that it needs.
 | |
|  * To accomplish this, the PSA Crypto implementation should be designed to call
 | |
|  * this function multiple times until it has received the required amount of
 | |
|  * entropy from the entropy source.
 | |
|  *
 | |
|  * \param[in,out] p_context                 A hardware-specific structure
 | |
|  *                                          containing any context information
 | |
|  *                                          for the implementation
 | |
|  * \param[out] p_buffer                     A caller-allocated buffer for the
 | |
|  *                                          retrieved entropy to be placed in
 | |
|  * \param[in] buffer_size                   The allocated size of `p_buffer`
 | |
|  * \param[out] p_received_entropy_bits      The amount of entropy (in bits)
 | |
|  *                                          actually provided in `p_buffer`
 | |
|  *
 | |
|  * \retval PSA_SUCCESS
 | |
|  */
 | |
| typedef psa_status_t (*psa_drv_entropy_get_bits_t)(void *p_context,
 | |
|                                                    uint8_t *p_buffer,
 | |
|                                                    uint32_t buffer_size,
 | |
|                                                    uint32_t *p_received_entropy_bits);
 | |
| 
 | |
| /**
 | |
|  * \brief A struct containing all of the function pointers needed to interface
 | |
|  * to an entropy source
 | |
|  *
 | |
|  * PSA Crypto API implementations should populate instances of the table as
 | |
|  * appropriate upon startup.
 | |
|  *
 | |
|  * If one of the functions is not implemented, it should be set to NULL.
 | |
|  */
 | |
| typedef struct {
 | |
|     /** The driver-specific size of the entropy context */
 | |
|     const size_t                context_size;
 | |
|     /** Function that performs initialization for the entropy source */
 | |
|     psa_drv_entropy_init_t      p_init;
 | |
|     /** Function that performs the get_bits operation for the entropy source */
 | |
|     psa_drv_entropy_get_bits_t  p_get_bits;
 | |
| } psa_drv_entropy_t;
 | |
| /**@}*/
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* PSA_CRYPTO_ENTROPY_DRIVER_H */
 |