]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/random-util.h
Merge pull request #25389 from fbuihuu/update-test-for-opensuse
[thirdparty/systemd.git] / src / basic / random-util.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 #include <stdbool.h>
5 #include <stddef.h>
6 #include <stdint.h>
7
8 void random_bytes(void *p, size_t n); /* Returns random bytes suitable for most uses, but may be insecure sometimes. */
9 int crypto_random_bytes(void *p, size_t n); /* Returns secure random bytes after waiting for the RNG to initialize. */
10
11 static inline uint64_t random_u64(void) {
12 uint64_t u;
13 random_bytes(&u, sizeof(u));
14 return u;
15 }
16
17 static inline uint32_t random_u32(void) {
18 uint32_t u;
19 random_bytes(&u, sizeof(u));
20 return u;
21 }
22
23 /* Some limits on the pool sizes when we deal with the kernel random pool */
24 #define RANDOM_POOL_SIZE_MIN 32U
25 #define RANDOM_POOL_SIZE_MAX (10U*1024U*1024U)
26 #define RANDOM_EFI_SEED_SIZE 32U
27
28 size_t random_pool_size(void);
29
30 int random_write_entropy(int fd, const void *seed, size_t size, bool credit);
31
32 uint64_t random_u64_range(uint64_t max);