// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "crypto/hkdf.h" #include #include #include #include "base/check.h" #include "crypto/hmac.h" #include "third_party/boringssl/src/include/openssl/digest.h" #include "third_party/boringssl/src/include/openssl/hkdf.h" namespace crypto { std::string HkdfSha256(std::string_view secret, std::string_view salt, std::string_view info, size_t derived_key_size) { std::string key; key.resize(derived_key_size); int result = ::HKDF( reinterpret_cast(&key[0]), derived_key_size, EVP_sha256(), reinterpret_cast(secret.data()), secret.size(), reinterpret_cast(salt.data()), salt.size(), reinterpret_cast(info.data()), info.size()); DCHECK(result); return key; } std::vector HkdfSha256(base::span secret, base::span salt, base::span info, size_t derived_key_size) { std::vector ret; ret.resize(derived_key_size); int result = ::HKDF(ret.data(), derived_key_size, EVP_sha256(), secret.data(), secret.size(), salt.data(), salt.size(), info.data(), info.size()); DCHECK(result); return ret; } } // namespace crypto