summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/basic/random-util.c17
-rw-r--r--src/basic/random-util.h7
-rw-r--r--src/firstboot/firstboot.c2
-rw-r--r--src/libsystemd/sd-id128/sd-id128.c2
-rw-r--r--src/test/test-random-util.c14
5 files changed, 20 insertions, 22 deletions
diff --git a/src/basic/random-util.c b/src/basic/random-util.c
index 071a41f186..5e4ed2da9d 100644
--- a/src/basic/random-util.c
+++ b/src/basic/random-util.c
@@ -65,7 +65,7 @@ int rdrand64(uint64_t *ret) {
#endif
}
-int acquire_random_bytes(void *p, size_t n, bool high_quality_required) {
+int genuine_random_bytes(void *p, size_t n, bool high_quality_required) {
static int have_syscall = -1;
_cleanup_close_ int fd = -1;
@@ -88,7 +88,7 @@ int acquire_random_bytes(void *p, size_t n, bool high_quality_required) {
return 0;
if (!high_quality_required) {
/* Fill in the remaining bytes using pseudorandom values */
- pseudorandom_bytes((uint8_t*) p + r, n - r);
+ pseudo_random_bytes((uint8_t*) p + r, n - r);
return 0;
}
@@ -124,7 +124,7 @@ int acquire_random_bytes(void *p, size_t n, bool high_quality_required) {
memcpy(p, &u, k);
/* We only get 64bit out of RDRAND, the rest let's fill up with pseudo-random crap. */
- pseudorandom_bytes((uint8_t*) p + k, n - k);
+ pseudo_random_bytes((uint8_t*) p + k, n - k);
return 0;
}
} else
@@ -180,7 +180,7 @@ void initialize_srand(void) {
# define RAND_STEP 1
#endif
-void pseudorandom_bytes(void *p, size_t n) {
+void pseudo_random_bytes(void *p, size_t n) {
uint8_t *q;
initialize_srand();
@@ -203,13 +203,10 @@ void pseudorandom_bytes(void *p, size_t n) {
}
void random_bytes(void *p, size_t n) {
- int r;
- r = acquire_random_bytes(p, n, false);
- if (r >= 0)
+ if (genuine_random_bytes(p, n, false) >= 0)
return;
- /* If some idiot made /dev/urandom unavailable to us, or the
- * kernel has no entropy, use a PRNG instead. */
- return pseudorandom_bytes(p, n);
+ /* If for some reason some user made /dev/urandom unavailable to us, or the kernel has no entropy, use a PRNG instead. */
+ pseudo_random_bytes(p, n);
}
diff --git a/src/basic/random-util.h b/src/basic/random-util.h
index affcc9ac1d..0429ea5e52 100644
--- a/src/basic/random-util.h
+++ b/src/basic/random-util.h
@@ -5,9 +5,10 @@
#include <stddef.h>
#include <stdint.h>
-int acquire_random_bytes(void *p, size_t n, bool high_quality_required);
-void pseudorandom_bytes(void *p, size_t n);
-void random_bytes(void *p, size_t n);
+int genuine_random_bytes(void *p, size_t n, bool high_quality_required); /* returns "genuine" randomness, optionally filled upwith pseudo random, if not enough is available */
+void pseudo_random_bytes(void *p, size_t n); /* returns only pseudo-randommess (but possibly seeded from something better) */
+void random_bytes(void *p, size_t n); /* returns genuine randomness if cheaply available, and pseudo randomness if not. */
+
void initialize_srand(void);
static inline uint64_t random_u64(void) {
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
index c5deb66edf..96260fab29 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
@@ -647,7 +647,7 @@ static int process_root_password(void) {
if (!arg_root_password)
return 0;
- r = acquire_random_bytes(raw, 16, true);
+ r = genuine_random_bytes(raw, 16, true);
if (r < 0)
return log_error_errno(r, "Failed to get salt: %m");
diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c
index b7cca832d8..bba40a0537 100644
--- a/src/libsystemd/sd-id128/sd-id128.c
+++ b/src/libsystemd/sd-id128/sd-id128.c
@@ -272,7 +272,7 @@ _public_ int sd_id128_randomize(sd_id128_t *ret) {
assert_return(ret, -EINVAL);
- r = acquire_random_bytes(&t, sizeof t, true);
+ r = genuine_random_bytes(&t, sizeof t, true);
if (r < 0)
return r;
diff --git a/src/test/test-random-util.c b/src/test/test-random-util.c
index 9652a0af05..82902b7e2d 100644
--- a/src/test/test-random-util.c
+++ b/src/test/test-random-util.c
@@ -5,14 +5,14 @@
#include "log.h"
#include "tests.h"
-static void test_acquire_random_bytes(bool high_quality_required) {
+static void test_genuine_random_bytes(bool high_quality_required) {
uint8_t buf[16] = {};
unsigned i;
log_info("/* %s */", __func__);
for (i = 1; i < sizeof buf; i++) {
- assert_se(acquire_random_bytes(buf, i, high_quality_required) == 0);
+ assert_se(genuine_random_bytes(buf, i, high_quality_required) == 0);
if (i + 1 < sizeof buf)
assert_se(buf[i] == 0);
@@ -20,14 +20,14 @@ static void test_acquire_random_bytes(bool high_quality_required) {
}
}
-static void test_pseudorandom_bytes(void) {
+static void test_pseudo_random_bytes(void) {
uint8_t buf[16] = {};
unsigned i;
log_info("/* %s */", __func__);
for (i = 1; i < sizeof buf; i++) {
- pseudorandom_bytes(buf, i);
+ pseudo_random_bytes(buf, i);
if (i + 1 < sizeof buf)
assert_se(buf[i] == 0);
@@ -54,10 +54,10 @@ static void test_rdrand64(void) {
int main(int argc, char **argv) {
test_setup_logging(LOG_DEBUG);
- test_acquire_random_bytes(false);
- test_acquire_random_bytes(true);
+ test_genuine_random_bytes(false);
+ test_genuine_random_bytes(true);
- test_pseudorandom_bytes();
+ test_pseudo_random_bytes();
test_rdrand64();