| // 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_SCA_LIB_PRNG_H_ |
| #define OPENTITAN_SW_DEVICE_SCA_LIB_PRNG_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif // __cplusplus |
| |
| /** |
| * @file |
| * @brief PRNG for side-channel analysis. |
| * |
| * This library provides a Mersenne Twister PRNG that can be used to generate |
| * random plaintexts on the device. Generating random plaintexts on the device |
| * eliminates the overhead of sending them from the host and can significantly |
| * improve capture rate. The host must use the same PRNG to be able to compute |
| * the plaintext and the ciphertext of each trace. |
| * |
| * TODO(alphan): Replace this with a more efficient PRNG after updating |
| * host-side code. |
| */ |
| |
| /** |
| * Initializes the random number generator. |
| * |
| * @param seed Seed to initalize with. |
| */ |
| void prng_seed(uint32_t seed); |
| |
| /** |
| * Generates a random byte. |
| * |
| * The behavior of this function matches the behavior of `random.randint(0, |
| * 255)` in python, which is used by ChipWhisperer's `ktp.next()`. |
| * |
| * @return A random byte. |
| */ |
| uint8_t prng_rand_byte(void); |
| |
| /** |
| * Fills a buffer with random bytes. |
| * |
| * The behavior of this function matches the behavior of `random.randint(0, |
| * 255)` in python, which is used by ChipWhisperer's `ktp.next()`. |
| * |
| * @param[out] buffer A buffer. |
| * @param buffer_len Size of the buffer. |
| * |
| * @return A random byte. |
| */ |
| void prng_rand_bytes(uint8_t *buffer, size_t buffer_len); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif // __cplusplus |
| |
| #endif // OPENTITAN_SW_DEVICE_SCA_LIB_PRNG_H_ |