48 hmac_prf(prf, K, counter,
"rng");
50 const size_t copied = std::min<size_t>(K.size(), length);
56 output_since_reseed += copied;
58 if(output_since_reseed >= BOTAN_RNG_MAX_OUTPUT_BEFORE_RESEED)
59 reseed(BOTAN_RNG_RESEED_POLL_BITS);
79 if(!entropy_sources.empty())
81 size_t poll_attempt = 0;
85 const size_t src_idx = poll_attempt % entropy_sources.size();
86 entropy_sources[src_idx]->poll(accum);
102 hmac_prf(prf, K, counter,
"rng");
103 extractor->update(K);
105 hmac_prf(prf, K, counter,
"reseed");
106 extractor->update(K);
110 prf->set_key(extractor->final());
113 hmac_prf(prf, K, counter,
"xts");
114 extractor->set_key(K);
119 output_since_reseed = 0;
171 extractor(extractor_mac), prf(prf_mac)
173 if(!prf->valid_keylength(extractor->output_length()) ||
174 !extractor->valid_keylength(prf->output_length()))
176 extractor->name() +
" and " +
180 K.resize(prf->output_length());
183 output_since_reseed = 0;
200 prf->set_key(prf_key);
211 extractor->set_key(prf->process(
"Botan HMAC_RNG XTS"));