JABBERWERX_API bool jw_tracker_create(struct event_base *selector, jw_tracker **tracker, jw_err *err) { assert(selector); assert(tracker); jw_tracker *tmp_tracker = jw_data_malloc(sizeof(jw_tracker_t)); if (!tmp_tracker) { JABBERWERX_ERROR(err, JW_ERR_NO_MEMORY); return false; } memset(tmp_tracker, 0, sizeof(jw_tracker_t)); if (!jw_htable_create(TRACKER_HTABLE_SIZE, _match_hash, _match_cmp, &tmp_tracker->pending, err)) { jw_data_free(tmp_tracker); return false; } // Get the initial id as a random number. Odd that this doesn't // return an error. evutil_secure_rng_get_bytes((void*)&tmp_tracker->last_id, sizeof(tmp_tracker->last_id)); tmp_tracker->selector = selector; *tracker = tmp_tracker; return true; }
ec_rep_t *ec_rep_new(ec_res_t *res, const uint8_t *data, size_t data_sz, ec_mt_t media_type) { ec_rep_t *rep = NULL; dbg_err_sif ((rep = u_zalloc(sizeof *rep)) == NULL); rep->res = res; if (data && data_sz) { dbg_err_if ((rep->data = u_memdup(data, data_sz)) == NULL); rep->data_sz = data_sz; } rep->media_type = media_type; /* Attach a random etag on registration. */ evutil_secure_rng_get_bytes(rep->etag, sizeof rep->etag); return rep; err: if (rep) ec_rep_free(rep); return NULL; }
std::string random_within_charset(const std::string charset, size_t length) { // See <http://stackoverflow.com/questions/440133/> if (charset.size() < 1) { throw std::runtime_error("random_within_charset_with_empty_charset"); } auto randchar = [&charset]() { int rand = 0; evutil_secure_rng_get_bytes(&rand, sizeof (rand)); return charset[rand % charset.size()]; }; std::string str(length, 0); std::generate_n(str.begin(), length, randchar); return str; }
int tor_init_libevent_rng(void) { int rv = 0; #ifdef HAVE_EVUTIL_SECURE_RNG_INIT char buf[256]; if (evutil_secure_rng_init() < 0) { rv = -1; } /* Older libevent -- manually initialize the RNG */ crypto_rand(buf, 32); evutil_secure_rng_add_bytes(buf, 32); evutil_secure_rng_get_bytes(buf, sizeof(buf)); #endif return rv; }
uint32_t red_randui32() { uint32_t ret; evutil_secure_rng_get_bytes(&ret, sizeof(ret)); return ret; }
static void arc4random_buf(void *buf, size_t nbytes) { evutil_secure_rng_get_bytes(buf, nbytes); return; }
int main (int argc, char **argv) { int i, j; const char *s1, *s2; evthread_use_windows_threads (); s1 = evutil_socket_error_to_string (WSAEINTR); for (i = 0; i < 3; i++) { printf ("\niteration %d:\n\n", i); E(WSAEINTR); E(WSAEACCES); E(WSAEFAULT); E(WSAEINVAL); E(WSAEMFILE); E(WSAEWOULDBLOCK); E(WSAEINPROGRESS); E(WSAEALREADY); E(WSAENOTSOCK); E(WSAEDESTADDRREQ); E(WSAEMSGSIZE); E(WSAEPROTOTYPE); E(WSAENOPROTOOPT); E(WSAEPROTONOSUPPORT); E(WSAESOCKTNOSUPPORT); E(WSAEOPNOTSUPP); E(WSAEPFNOSUPPORT); E(WSAEAFNOSUPPORT); E(WSAEADDRINUSE); E(WSAEADDRNOTAVAIL); E(WSAENETDOWN); E(WSAENETUNREACH); E(WSAENETRESET); E(WSAECONNABORTED); E(WSAECONNRESET); E(WSAENOBUFS); E(WSAEISCONN); E(WSAENOTCONN); E(WSAESHUTDOWN); E(WSAETIMEDOUT); E(WSAECONNREFUSED); E(WSAEHOSTDOWN); E(WSAEHOSTUNREACH); E(WSAEPROCLIM); E(WSASYSNOTREADY); E(WSAVERNOTSUPPORTED); E(WSANOTINITIALISED); E(WSAEDISCON); E(WSATYPE_NOT_FOUND); E(WSAHOST_NOT_FOUND); E(WSATRY_AGAIN); E(WSANO_RECOVERY); E(WSANO_DATA); E(0xdeadbeef); /* test the case where no message is available */ /* fill up the hash table a bit to make sure it grows properly */ for (j = 0; j < 50; j++) { int err; evutil_secure_rng_get_bytes(&err, sizeof(err)); evutil_socket_error_to_string(err); } } s2 = evutil_socket_error_to_string (WSAEINTR); if (s1 != s2) printf ("caching failed!\n"); libevent_global_shutdown (); return EXIT_SUCCESS; }