| // Copyright 2017 The Fuchsia Authors |
| // |
| // Use of this source code is governed by a MIT-style |
| // license that can be found in the LICENSE file or at |
| // https://opensource.org/licenses/MIT |
| |
| #include <assert.h> |
| #include <lib/crypto/entropy/collector.h> |
| |
| namespace crypto { |
| |
| namespace entropy { |
| |
| Collector::Collector(const char* name, size_t entropy_per_1000_bytes) |
| : name_(name, strnlen(name, ZX_MAX_NAME_LEN)), entropy_per_1000_bytes_(entropy_per_1000_bytes) { |
| DEBUG_ASSERT(entropy_per_1000_bytes_ > 0); |
| DEBUG_ASSERT(entropy_per_1000_bytes_ <= 8000); |
| } |
| |
| Collector::~Collector() {} |
| |
| size_t Collector::BytesNeeded(size_t bits) const { |
| // This avoids overflow, and (probably more likely) programming errors. |
| DEBUG_ASSERT(bits <= (1024u * 1024u)); |
| // Round up, to ensure that the result always contains at least the |
| // requested amount of entropy. |
| return (1000u * bits + entropy_per_1000_bytes_ - 1u) / entropy_per_1000_bytes_; |
| } |
| |
| } // namespace entropy |
| |
| } // namespace crypto |