0
0
Fork 0
mirror of https://github.com/tmate-io/tmate-ssh-server.git synced 2025-03-15 20:54:46 +00:00
tmate-io_tmate-ssh-server/tmate-rand.c
Nicolas Viennot cd3ee3ee4d Refactor code
2019-11-07 08:01:49 -05:00

47 lines
858 B
C

#include "tmate.h"
#include <fcntl.h>
static int dev_urandom_fd;
void tmate_init_rand(void)
{
if ((dev_urandom_fd = open("/dev/urandom", O_RDONLY)) < 0)
tmate_fatal("Cannot open /dev/urandom");
}
void tmate_get_random_bytes(void *buffer, ssize_t len)
{
if (read(dev_urandom_fd, buffer, len) != len)
tmate_fatal("Cannot read from /dev/urandom");
}
long tmate_get_random_long(void)
{
long val;
tmate_get_random_bytes(&val, sizeof(val));
return val;
}
void random_stream_init(struct random_stream *rs)
{
rs->pos = RS_BUF_SIZE;
}
char *random_stream_get(struct random_stream *rs, size_t count)
{
char *ret;
if (count > RS_BUF_SIZE) {
tmate_fatal("buffer too small");
}
if (rs->pos + count > RS_BUF_SIZE) {
tmate_get_random_bytes(rs->bytes, RS_BUF_SIZE);
rs->pos = 0;
}
ret = &rs->bytes[rs->pos];
rs->pos += count;
return ret;
}