Lines Matching +full:power +full:- +full:efficient
47 * Always use the getentropy implementation from bsd-getentropy.c, which
75 #define REKEY_BASE (1024*1024) /* NB. should be a power of 2 */
102 if (_rs_allocate(&rs, &rsx) == -1) in _rs_init()
106 chacha_keysetup(&rsx->rs_chacha, buf, KEYSZ * 8); in _rs_init()
107 chacha_ivsetup(&rsx->rs_chacha, buf + KEYSZ); in _rs_init()
116 if (getentropy(rnd, sizeof rnd) == -1) in _rs_stir()
126 rs->rs_have = 0; in _rs_stir()
127 memset(rsx->rs_buf, 0, sizeof(rsx->rs_buf)); in _rs_stir()
130 chacha_encrypt_bytes(&rsx->rs_chacha, (uint8_t *)&rekey_fuzz, in _rs_stir()
132 rs->rs_count = REKEY_BASE + (rekey_fuzz % REKEY_BASE); in _rs_stir()
139 if (!rs || rs->rs_count <= len) in _rs_stir_if_needed()
141 if (rs->rs_count <= len) in _rs_stir_if_needed()
142 rs->rs_count = 0; in _rs_stir_if_needed()
144 rs->rs_count -= len; in _rs_stir_if_needed()
151 memset(rsx->rs_buf, 0, sizeof(rsx->rs_buf)); in _rs_rekey()
154 chacha_encrypt_bytes(&rsx->rs_chacha, rsx->rs_buf, in _rs_rekey()
155 rsx->rs_buf, sizeof(rsx->rs_buf)); in _rs_rekey()
162 rsx->rs_buf[i] ^= dat[i]; in _rs_rekey()
165 _rs_init(rsx->rs_buf, KEYSZ + IVSZ); in _rs_rekey()
166 memset(rsx->rs_buf, 0, KEYSZ + IVSZ); in _rs_rekey()
167 rs->rs_have = sizeof(rsx->rs_buf) - KEYSZ - IVSZ; in _rs_rekey()
179 if (rs->rs_have > 0) { in _rs_random_buf()
180 m = minimum(n, rs->rs_have); in _rs_random_buf()
181 keystream = rsx->rs_buf + sizeof(rsx->rs_buf) in _rs_random_buf()
182 - rs->rs_have; in _rs_random_buf()
186 n -= m; in _rs_random_buf()
187 rs->rs_have -= m; in _rs_random_buf()
189 if (rs->rs_have == 0) in _rs_random_buf()
200 if (rs->rs_have < sizeof(*val)) in _rs_random_u32()
202 keystream = rsx->rs_buf + sizeof(rsx->rs_buf) - rs->rs_have; in _rs_random_u32()
205 rs->rs_have -= sizeof(*val); in _rs_random_u32()
221 * If we are providing arc4random, then we can provide a more efficient