| // Copyright lowRISC contributors. | |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. | |
| // SPDX-License-Identifier: Apache-2.0 | |
| #ifndef OPENTITAN_SW_DEVICE_LIB_CRYPTO_INCLUDE_DRBG_H_ | |
| #define OPENTITAN_SW_DEVICE_LIB_CRYPTO_INCLUDE_DRBG_H_ | |
| /** | |
| * @file | |
| * @brief DRBG for the OpenTitan cryptography library. | |
| */ | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif // __cplusplus | |
| /** | |
| * Instantiates the DRBG system. | |
| * | |
| * Initializes the DRBG and the context for DRBG. Gets the required | |
| * entropy input automatically from the entropy source. | |
| * | |
| * @param nonce Pointer to the nonce bit-string. | |
| * @param perso_string Pointer to personalization bitstring. | |
| * @return Result of the DRBG instantiate operation. | |
| */ | |
| crypto_status_t otcrypto_drbg_instantiate(crypto_uint8_buf_t nonce, | |
| crypto_uint8_buf_t perso_string); | |
| /** | |
| * Reseeds the DRBG with fresh entropy. | |
| * | |
| * Reseeds the DRBG with fresh entropy that is automatically fetched | |
| * from the entropy source and updates the working state parameters. | |
| * | |
| * @param additional_input Pointer to the additional input for DRBG. | |
| * @return Result of the DRBG reseed operation. | |
| */ | |
| crypto_status_t otcrypto_drbg_reseed(crypto_uint8_buf_t additional_input); | |
| /** | |
| * Instantiates the DRBG system. | |
| * | |
| * Initializes DRBG and the DRBG context. Gets the required entropy | |
| * input from the user through the `entropy` parameter. | |
| * | |
| * @param entropy Pointer to the user defined entropy value. | |
| * @param nonce Pointer to the nonce bit-string. | |
| * @param personalization_string Pointer to personalization bitstring. | |
| * @return Result of the DRBG manual instantiation. | |
| */ | |
| crypto_status_t otcrypto_drbg_manual_instantiate( | |
| crypto_uint8_buf_t entropy, crypto_uint8_buf_t nonce, | |
| crypto_uint8_buf_t perso_string); | |
| /** | |
| * Reseeds the DRBG with fresh entropy. | |
| * | |
| * Reseeds the DRBG with entropy input from the user through `entropy` | |
| * parameter and updates the working state parameters. | |
| * | |
| * @param entropy Pointer to the user defined entropy value. | |
| * @param additional_input Pointer to the additional input for DRBG. | |
| * @return Result of the manual DRBG reseed operation. | |
| */ | |
| crypto_status_t otcrypto_drbg_manual_reseed( | |
| crypto_uint8_buf_t entropy, crypto_uint8_buf_t additional_input); | |
| /** | |
| * DRBG function for generating random bits. | |
| * | |
| * Used to generate pseudo random bits after DRBG instantiation or | |
| * DRBG reseeding. | |
| * | |
| * The caller should allocate space for the `drbg_output` buffer, | |
| * (of length `output_len`), and set the length of expected | |
| * output in the `len` field of `drbg_output`. If the user-set length | |
| * and the output length does not match, an error message will be | |
| * returned. | |
| * | |
| * @param additional_input Pointer to the additional data. | |
| * @param output_len Required len of pseudorandom output, in bytes. | |
| * @param[out] drbg_output Pointer to the generated pseudo random bits. | |
| * @return Result of the DRBG generate operation. | |
| */ | |
| crypto_status_t otcrypto_drbg_generate(crypto_uint8_buf_t additional_input, | |
| size_t output_len, | |
| crypto_uint8_buf_t *drbg_output); | |
| /** | |
| * Uninstantiates DRBG and clears the context. | |
| * | |
| * @return Result of the DRBG uninstantiate operation. | |
| */ | |
| crypto_status_t otcrypto_drbg_uninstantiate(); | |
| #ifdef __cplusplus | |
| } // extern "C" | |
| #endif // __cplusplus | |
| #endif // OPENTITAN_SW_DEVICE_LIB_CRYPTO_INCLUDE_DRBG_H_ |