| /* |
| * Copyright 2018 The WebRTC Project Authors. All rights reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef RTC_BASE_OPENSSL_KEY_DERIVATION_HKDF_H_ |
| #define RTC_BASE_OPENSSL_KEY_DERIVATION_HKDF_H_ |
| |
| #include "rtc_base/constructor_magic.h" |
| #include "rtc_base/key_derivation.h" |
| |
| namespace rtc { |
| |
| // OpenSSLKeyDerivationHKDF provides a concrete implementation of the |
| // KeyDerivation interface to support the HKDF algorithm using the |
| // OpenSSL/BoringSSL internal implementation. |
| class OpenSSLKeyDerivationHKDF final : public KeyDerivation { |
| public: |
| OpenSSLKeyDerivationHKDF(); |
| ~OpenSSLKeyDerivationHKDF() override; |
| |
| // General users shouldn't be generating keys smaller than 128 bits. |
| static const size_t kMinKeyByteSize; |
| // The maximum available derivation size 255*DIGEST_LENGTH |
| static const size_t kMaxKeyByteSize; |
| // The minimum acceptable secret size. |
| static const size_t kMinSecretByteSize; |
| |
| // Derives a new key from existing key material using HKDF. |
| // secret - The random secret value you wish to derive a key from. |
| // salt - Optional (non secret) cryptographically random value. |
| // label - A non secret but unique label value to determine the derivation. |
| // derived_key_byte_size - The size of the derived key. |
| // return - A ZeroOnFreeBuffer containing the derived key or an error |
| // condition. Checking error codes is explicit in the API and error should |
| // never be ignored. |
| absl::optional<ZeroOnFreeBuffer<uint8_t>> DeriveKey( |
| rtc::ArrayView<const uint8_t> secret, |
| rtc::ArrayView<const uint8_t> salt, |
| rtc::ArrayView<const uint8_t> label, |
| size_t derived_key_byte_size) override; |
| |
| private: |
| RTC_DISALLOW_COPY_AND_ASSIGN(OpenSSLKeyDerivationHKDF); |
| }; |
| |
| } // namespace rtc |
| |
| #endif // RTC_BASE_OPENSSL_KEY_DERIVATION_HKDF_H_ |