1 | /* |
2 | * QEMU guest-visible random functions |
3 | * |
4 | * Copyright 2019 Linaro, Ltd. |
5 | * |
6 | * This program is free software; you can redistribute it and/or modify it |
7 | * under the terms of the GNU General Public License as published by the Free |
8 | * Software Foundation; either version 2 of the License, or (at your option) |
9 | * any later version. |
10 | */ |
11 | |
12 | #ifndef QEMU_GUEST_RANDOM_H |
13 | #define QEMU_GUEST_RANDOM_H |
14 | |
15 | /** |
16 | * qemu_guest_random_seed_main(const char *optarg, Error **errp) |
17 | * @optarg: a non-NULL pointer to a C string |
18 | * @errp: an error indicator |
19 | * |
20 | * The @optarg value is that which accompanies the -seed argument. |
21 | * This forces qemu_guest_getrandom into deterministic mode. |
22 | * |
23 | * Returns 0 on success, < 0 on failure while setting *errp. |
24 | */ |
25 | int qemu_guest_random_seed_main(const char *optarg, Error **errp); |
26 | |
27 | /** |
28 | * qemu_guest_random_seed_thread_part1(void) |
29 | * |
30 | * If qemu_getrandom is in deterministic mode, returns an |
31 | * independent seed for the new thread. Otherwise returns 0. |
32 | */ |
33 | uint64_t qemu_guest_random_seed_thread_part1(void); |
34 | |
35 | /** |
36 | * qemu_guest_random_seed_thread_part2(uint64_t seed) |
37 | * @seed: a value for the new thread. |
38 | * |
39 | * If qemu_guest_getrandom is in deterministic mode, this stores an |
40 | * independent seed for the new thread. Otherwise a no-op. |
41 | */ |
42 | void qemu_guest_random_seed_thread_part2(uint64_t seed); |
43 | |
44 | /** |
45 | * qemu_guest_getrandom(void *buf, size_t len, Error **errp) |
46 | * @buf: a buffer of bytes to be written |
47 | * @len: the number of bytes in @buf |
48 | * @errp: an error indicator |
49 | * |
50 | * Fills len bytes in buf with random data. This should only be used |
51 | * for data presented to the guest. Host-side crypto services should |
52 | * use qcrypto_random_bytes. |
53 | * |
54 | * Returns 0 on success, < 0 on failure while setting *errp. |
55 | */ |
56 | int qemu_guest_getrandom(void *buf, size_t len, Error **errp); |
57 | |
58 | /** |
59 | * qemu_guest_getrandom_nofail(void *buf, size_t len) |
60 | * @buf: a buffer of bytes to be written |
61 | * @len: the number of bytes in @buf |
62 | * |
63 | * Like qemu_guest_getrandom, but will assert for failure. |
64 | * Use this when there is no reasonable recovery. |
65 | */ |
66 | void qemu_guest_getrandom_nofail(void *buf, size_t len); |
67 | |
68 | #endif /* QEMU_GUEST_RANDOM_H */ |
69 | |