#include "postgres.h"#include "px.h"#include <sys/types.h>#include <sys/time.h>#include <unistd.h>
Go to the source code of this file.
Defines | |
| #define | RND_BYTES 32 |
| #define | TRY_UNIXSTD |
Functions | |
| static uint8 * | try_unix_std (uint8 *dst) |
| unsigned | px_acquire_system_randomness (uint8 *dst) |
| unsigned px_acquire_system_randomness | ( | uint8 * | dst | ) |
Definition at line 227 of file random.c.
References try_unix_std().
Referenced by system_reseed().
{
uint8 *p = dst;
#ifdef TRY_DEV_RANDOM
p = try_dev_random(p);
#endif
#ifdef TRY_WIN32_GENRAND
p = try_win32_genrand(p);
#endif
#ifdef TRY_WIN32_PERFC
p = try_win32_perfc(p);
#endif
#ifdef TRY_UNIXSTD
p = try_unix_std(p);
#endif
return p - dst;
}
Definition at line 175 of file random.c.
References gettimeofday(), NULL, px_alloc, px_find_digest(), px_free, px_md_finish, px_md_free, px_md_update, and random().
Referenced by px_acquire_system_randomness().
{
pid_t pid;
int x;
PX_MD *md;
struct timeval tv;
int res;
/* process id */
pid = getpid();
memcpy(dst, (uint8 *) &pid, sizeof(pid));
dst += sizeof(pid);
/* time */
gettimeofday(&tv, NULL);
memcpy(dst, (uint8 *) &tv, sizeof(tv));
dst += sizeof(tv);
/* pointless, but should not hurt */
x = random();
memcpy(dst, (uint8 *) &x, sizeof(x));
dst += sizeof(x);
/* let's be desperate */
res = px_find_digest("sha1", &md);
if (res >= 0)
{
uint8 *ptr;
uint8 stack[8192];
int alloc = 32 * 1024;
px_md_update(md, stack, sizeof(stack));
ptr = px_alloc(alloc);
px_md_update(md, ptr, alloc);
px_free(ptr);
px_md_finish(md, dst);
px_md_free(md);
dst += 20;
}
return dst;
}
1.7.1