rand_t * rand_open(void) { rand_t *r; u_char seed[256]; #ifdef _WIN32 HCRYPTPROV hcrypt = 0; CryptAcquireContext(&hcrypt, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); CryptGenRandom(hcrypt, sizeof(seed), seed); CryptReleaseContext(hcrypt, 0); #else struct timeval *tv = (struct timeval *)seed; int fd; if ((fd = open("/dev/arandom", O_RDONLY)) != -1 || (fd = open("/dev/urandom", O_RDONLY)) != -1) { read(fd, seed + sizeof(*tv), sizeof(seed) - sizeof(*tv)); close(fd); } gettimeofday(tv, NULL); #endif if ((r = malloc(sizeof(*r))) != NULL) { rand_init(r); rand_addrandom(r, seed, 128); rand_addrandom(r, seed + 128, 128); r->tmp = NULL; r->tmplen = 0; } return (r); }
int rand_set(rand_t *r, const void *buf, size_t len) { rand_init(r); rand_addrandom(r, (u_char *)buf, len); rand_addrandom(r, (u_char *)buf, len); return (0); }
int rand_set(rand_t *r, const void *buf, size_t len) { int i; for (i = 0; i < 256; i++) r->s[i] = i; r->i = r->j = 0; //rand_init(r); rand_addrandom(r, (u_char *)buf, (int)len); rand_addrandom(r, (u_char *)buf, (int)len); return (0); }
rand_t * rand_open(void) { int i; rand_t *r; u_char seed[256]; #if (VOS_WIN32 == VOS_OS_VER) HCRYPTPROV hcrypt = 0; CryptAcquireContext(&hcrypt, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); CryptGenRandom(hcrypt, sizeof(seed), seed); CryptReleaseContext(hcrypt, 0); #elif ((VOS_VXWORKS == VOS_OS_VER)||(VOS_RTOSCK == VOS_OS_VER)) for (i = 0; i < 256; i++) { seed[i] = VOS_Rand(0xff); } #else struct timeval *tv = (struct timeval *)seed; int fd; if ((fd = open("/dev/arandom", O_RDONLY)) != -1 || (fd = open("/dev/urandom", O_RDONLY)) != -1) { read(fd, seed + sizeof(*tv), sizeof(seed) - sizeof(*tv)); close(fd); } gettimeofday(tv, NULL); #endif if ((r = malloc(sizeof(*r))) != NULL) { for (i = 0; i < 256; i++) r->s[i] = i; r->i = r->j = 0; rand_addrandom(r, seed, 128); rand_addrandom(r, seed + 128, 128); r->tmp = NULL; r->tmplen = 0; } return (r); }
static int rand_add(rand_t *r, const void *buf, size_t len) { rand_addrandom(r, (u_char *)buf, len); return (0); }