Opened 6 years ago
Last modified 2 years ago
#14937 closed bug
Tiny chunks of entropy from /dev/urandom — at Version 1
Reported by: | kallisti5 | Owned by: | nobody |
---|---|---|---|
Priority: | normal | Milestone: | R1/beta4 |
Component: | Drivers | Version: | R1/Development |
Keywords: | urandom | Cc: | |
Blocked By: | Blocking: | ||
Platform: | All |
Description (last modified by )
/dev/urandom on Haiku seems to only offer up small 16 byte chunks of entropy. This behaviour differs from other platforms. I saw this while working on WireGuard under Haiku.
#include <errno.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <fcntl.h> #include <inttypes.h> int main() { int len = 128; int ret = 0; uint8_t key[len]; int fd = open("/dev/urandom", O_RDONLY); if (fd < 0) { fprintf(stderr, "Unable to open /dev/urandom!"); return fd; } int attempts = 0; while (ret < len) { ssize_t remaining = len - ret; ssize_t got = read(fd, key + ret, remaining); ret += got; if (attempts > 512) { fprintf(stderr, "Unable to get enough entropy from /dev/urandom!"); close(fd); return -1; } fprintf(stdout, "Attempt %d: Got %d, giving %d total!\n", attempts, got, ret); attempts++; } close(fd); return ret; }
Result on Haiku:
~> ./a.out Attempt 0: Got 8, giving 8 total! Attempt 1: Got 16, giving 24 total! Attempt 2: Got 16, giving 40 total! Attempt 3: Got 16, giving 56 total! Attempt 4: Got 16, giving 72 total! Attempt 5: Got 16, giving 88 total! Attempt 6: Got 16, giving 104 total! Attempt 7: Got 16, giving 120 total! Attempt 8: Got 8, giving 128 total!
Result on Linux:
$ ./a.out Attempt 0: Got 128, giving 128 total! $ ./a.out Attempt 0: Got 128, giving 128 total! $ ./a.out Attempt 0: Got 128, giving 128 total! $ ./a.out Attempt 0: Got 128, giving 128 total! $ ./a.out Attempt 0: Got 128, giving 128 total! $ ./a.out Attempt 0: Got 128, giving 128 total! $ ./a.out Attempt 0: Got 128, giving 128 total!
Note:
See TracTickets
for help on using tickets.