1*0Sigor@sysoev.ru 2*0Sigor@sysoev.ru /* 3*0Sigor@sysoev.ru * Copyright (C) Igor Sysoev 4*0Sigor@sysoev.ru * Copyright (C) NGINX, Inc. 5*0Sigor@sysoev.ru */ 6*0Sigor@sysoev.ru 7*0Sigor@sysoev.ru #ifndef _NXT_RANDOM_H_INCLUDED_ 8*0Sigor@sysoev.ru #define _NXT_RANDOM_H_INCLUDED_ 9*0Sigor@sysoev.ru 10*0Sigor@sysoev.ru 11*0Sigor@sysoev.ru #if (NXT_HAVE_ARC4RANDOM) 12*0Sigor@sysoev.ru 13*0Sigor@sysoev.ru /* 14*0Sigor@sysoev.ru * arc4random() has been introduced in OpenBSD 2.1 and then was ported 15*0Sigor@sysoev.ru * to FreeBSD 2.2.6, NetBSD 2.0, MacOSX and SmartOS. 16*0Sigor@sysoev.ru * 17*0Sigor@sysoev.ru * arc4random() automatically initializes itself in the first call and 18*0Sigor@sysoev.ru * then reinitializes itself in the first call in every forked processes. 19*0Sigor@sysoev.ru */ 20*0Sigor@sysoev.ru 21*0Sigor@sysoev.ru typedef void *nxt_random_t; 22*0Sigor@sysoev.ru 23*0Sigor@sysoev.ru 24*0Sigor@sysoev.ru #define nxt_random_init(r) 25*0Sigor@sysoev.ru #define nxt_random(r) arc4random() 26*0Sigor@sysoev.ru 27*0Sigor@sysoev.ru #else 28*0Sigor@sysoev.ru 29*0Sigor@sysoev.ru typedef struct { 30*0Sigor@sysoev.ru uint8_t i; 31*0Sigor@sysoev.ru uint8_t j; 32*0Sigor@sysoev.ru uint8_t s[256]; 33*0Sigor@sysoev.ru int32_t count; 34*0Sigor@sysoev.ru } nxt_random_t; 35*0Sigor@sysoev.ru 36*0Sigor@sysoev.ru 37*0Sigor@sysoev.ru void nxt_random_init(nxt_random_t *r); 38*0Sigor@sysoev.ru uint32_t nxt_random(nxt_random_t *r); 39*0Sigor@sysoev.ru 40*0Sigor@sysoev.ru #if (NXT_LIB_UNIT_TEST) 41*0Sigor@sysoev.ru nxt_int_t nxt_random_unit_test(nxt_thread_t *thr); 42*0Sigor@sysoev.ru #endif 43*0Sigor@sysoev.ru 44*0Sigor@sysoev.ru #endif 45*0Sigor@sysoev.ru 46*0Sigor@sysoev.ru 47*0Sigor@sysoev.ru #endif /* _NXT_RANDOM_H_INCLUDED_ */ 48