diff options
author | EuAndreh <eu@euandre.org> | 2023-12-29 12:47:15 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2025-03-20 15:58:40 -0300 |
commit | 51437318493e6f623631a73bd7f9389708cea537 (patch) | |
tree | 903ad1612db315d69d578db50c879f767bcc0c4f /src/random.c | |
parent | Add complete "Makefile" for standard packaging (diff) | |
download | agahu-51437318493e6f623631a73bd7f9389708cea537.tar.gz agahu-51437318493e6f623631a73bd7f9389708cea537.tar.xz |
- remove `#ifndef TWEETNACL_H` guard inside `tweetnacl.h`: as headers
shouldn't include other headers;
- remove `#define sv static void` golfing alias;
- remove `#define FOR(i,n) for (i = 0;i < n;++i)` golfing alias;
- assert that the generated `tweetnacl.o` code is identical to the
original code, available at `tests/assert-identical.sh`;
- remove all extra definitions from tweetnacl.h;
- rewrite code with the correct indentation, spacing and formatting;
- use C99 constructs over C89 (for loop variable declarations inside
the parentheses);
- use smaller types on loop variables, mostly `u8` over `int`,
`i64`, etc.;
- fix the public API;
- add fuzz targets;
Diffstat (limited to 'src/random.c')
-rw-r--r-- | src/random.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/random.c b/src/random.c new file mode 100644 index 0000000..de94783 --- /dev/null +++ b/src/random.c @@ -0,0 +1,74 @@ +#include <s.h> + +#include <assert.h> +#include <stdio.h> + +#include "random.h" + + + +static FILE * +FH = NULL; + + + +int +random_init(void) { + int rc = -1; + + FH = fopen("/dev/urandom", "r"); + if (FH == NULL) { + perror("fopen()"); + goto out; + } + + rc = 0; +out: + return rc; +} + +int +random_destroy(void) { + if (FH == NULL) { + return 0; + } + + int rc = -1; + + if (fclose(FH)) { + perror("fclose()"); + goto out; + } + + rc = 0; +out: + FH = NULL; + return rc; +} + +static int +random_generate(const unsigned long long length, unsigned char *const out) { + int rc = -1; + + const size_t read_count = fread(out, 1U, length, FH); + if (ferror(FH)) { + perror("fread()"); + goto out; + } + assert(read_count == length); + + rc = 0; +out: + return rc; +} + +void +random_bytes(unsigned char *const out, const unsigned long long length) { + assert(FH != NULL); + assert(random_generate(length, out) == 0); +} + +void +randombytes(unsigned char *const out, const unsigned long long length) { + random_bytes(out, length); +} |