42 SHA256() { SHA256_Init(&sha_); }
45 SHA256(
const SHA256&) =
delete;
46 SHA256& operator=(
const SHA256&) =
delete;
48 void Update(
const uint8_t bytes[],
size_t n) { SHA256_Update(&sha_, bytes, n); }
49 void DigestData(uint8_t digest[]) {
50 SHA256_Final(digest, &sha_);
52 void CopyState(
const SHA256& src) { sha_ = src.sha_; }
54 void Update8(uint64_t x) {
56 for (
size_t i = 0; i < 8; ++i) {
71 explicit PRF(
const uint8_t key[]) {
72 ctx_ = EVP_CIPHER_CTX_new();
74 EVP_EncryptInit_ex(ctx_, EVP_aes_256_ecb(),
nullptr, key,
nullptr);
75 check(ret == 1,
"EVP_EncryptInit_ex failed");
78 ~PRF() { EVP_CIPHER_CTX_free(ctx_); }
81 PRF(
const PRF&) =
delete;
82 PRF& operator=(
const PRF&) =
delete;
89 void Eval(uint8_t out[], uint8_t in[]) {
90 int out_len =
static_cast<int>(kPRFOutputSize);
91 int ret = EVP_EncryptUpdate(ctx_, out, &out_len, in,
92 static_cast<int>(kPRFInputSize));
93 check(ret == 1,
"EVP_EncryptUpdate failed");