Line data Source code
1 1 : /* 2 : * Copyright (c) 2013-2014 Wind River Systems, Inc. 3 : * Copyright (c) 2023 Intel Corporation 4 : * 5 : * SPDX-License-Identifier: Apache-2.0 6 : */ 7 : 8 : /** 9 : * @file 10 : * @brief Random number generator header file 11 : * 12 : * This header file declares prototypes for the kernel's random number 13 : * generator APIs. 14 : * 15 : * Typically, a platform enables the appropriate source for the random 16 : * number generation based on the hardware platform's capabilities or 17 : * (for testing purposes only) enables the TEST_RANDOM_GENERATOR 18 : * configuration option. 19 : */ 20 : 21 : #ifndef ZEPHYR_INCLUDE_RANDOM_RANDOM_H_ 22 : #define ZEPHYR_INCLUDE_RANDOM_RANDOM_H_ 23 : 24 : #include <zephyr/types.h> 25 : #include <stddef.h> 26 : #include <zephyr/kernel.h> 27 : 28 : /** 29 : * @brief Random Function APIs 30 : * @defgroup random_api Random Function APIs 31 : * @since 1.0 32 : * @version 1.0.0 33 : * @ingroup crypto 34 : * @{ 35 : */ 36 : 37 : #ifdef __cplusplus 38 : extern "C" { 39 : #endif 40 : 41 : 42 : /** 43 : * @brief Fill the destination buffer with random data values that should 44 : * pass general randomness tests. 45 : * 46 : * @note The random values returned are not considered cryptographically 47 : * secure random number values. 48 : * 49 : * @param [out] dst destination buffer to fill with random data. 50 : * @param len size of the destination buffer. 51 : * 52 : */ 53 1 : __syscall void sys_rand_get(void *dst, size_t len); 54 : 55 : /** 56 : * @brief Fill the destination buffer with cryptographically secure 57 : * random data values. 58 : * 59 : * @note If the random values requested do not need to be cryptographically 60 : * secure then use sys_rand_get() instead. 61 : * 62 : * @param [out] dst destination buffer to fill. 63 : * @param len size of the destination buffer. 64 : * 65 : * @return 0 if success, -EIO if entropy reseed error 66 : * 67 : */ 68 1 : __syscall int sys_csrand_get(void *dst, size_t len); 69 : 70 : /** 71 : * @brief Return a 8-bit random value that should pass general 72 : * randomness tests. 73 : * 74 : * @note The random value returned is not a cryptographically secure 75 : * random number value. 76 : * 77 : * @return 8-bit random value. 78 : */ 79 1 : static inline uint8_t sys_rand8_get(void) 80 : { 81 : uint8_t ret; 82 : 83 : sys_rand_get(&ret, sizeof(ret)); 84 : 85 : return ret; 86 : } 87 : 88 : /** 89 : * @brief Return a 16-bit random value that should pass general 90 : * randomness tests. 91 : * 92 : * @note The random value returned is not a cryptographically secure 93 : * random number value. 94 : * 95 : * @return 16-bit random value. 96 : */ 97 1 : static inline uint16_t sys_rand16_get(void) 98 : { 99 : uint16_t ret; 100 : 101 : sys_rand_get(&ret, sizeof(ret)); 102 : 103 : return ret; 104 : } 105 : 106 : /** 107 : * @brief Return a 32-bit random value that should pass general 108 : * randomness tests. 109 : * 110 : * @note The random value returned is not a cryptographically secure 111 : * random number value. 112 : * 113 : * @return 32-bit random value. 114 : */ 115 1 : static inline uint32_t sys_rand32_get(void) 116 : { 117 : uint32_t ret; 118 : 119 : sys_rand_get(&ret, sizeof(ret)); 120 : 121 : return ret; 122 : } 123 : 124 : /** 125 : * @brief Return a 64-bit random value that should pass general 126 : * randomness tests. 127 : * 128 : * @note The random value returned is not a cryptographically secure 129 : * random number value. 130 : * 131 : * @return 64-bit random value. 132 : */ 133 1 : static inline uint64_t sys_rand64_get(void) 134 : { 135 : uint64_t ret; 136 : 137 : sys_rand_get(&ret, sizeof(ret)); 138 : 139 : return ret; 140 : } 141 : 142 : #ifdef __cplusplus 143 : } 144 : #endif 145 : 146 : /** 147 : * @} 148 : */ 149 : 150 : #include <zephyr/syscalls/random.h> 151 : #endif /* ZEPHYR_INCLUDE_RANDOM_RANDOM_H_ */