blob: e08a68989a80c227fbcc0309a43a35bdde5a7f77 [file] [log] [blame] [edit]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBHWSEC_BACKEND_MOCK_KEY_MANAGEMENT_H_
#define LIBHWSEC_BACKEND_MOCK_KEY_MANAGEMENT_H_
#include <cstdint>
#include <absl/container/flat_hash_set.h>
#include <brillo/secure_blob.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "libhwsec/backend/key_management.h"
#include "libhwsec/status.h"
#include "libhwsec/structures/key.h"
#include "libhwsec/structures/operation_policy.h"
namespace hwsec {
class BackendTpm2;
class MockKeyManagement : public KeyManagement {
public:
MockKeyManagement() = default;
explicit MockKeyManagement(KeyManagement* on_call) : default_(on_call) {
using testing::Invoke;
if (!default_)
return;
ON_CALL(*this, GetSupportedAlgo)
.WillByDefault(Invoke(default_, &KeyManagement::GetSupportedAlgo));
ON_CALL(*this, IsSupported)
.WillByDefault(Invoke(default_, &KeyManagement::IsSupported));
ON_CALL(*this, CreateKey)
.WillByDefault(Invoke(default_, &KeyManagement::CreateKey));
ON_CALL(*this, LoadKey)
.WillByDefault(Invoke(default_, &KeyManagement::LoadKey));
ON_CALL(*this, GetPolicyEndorsementKey)
.WillByDefault(
Invoke(default_, &KeyManagement::GetPolicyEndorsementKey));
ON_CALL(*this, GetPersistentKey)
.WillByDefault(Invoke(default_, &KeyManagement::GetPersistentKey));
ON_CALL(*this, GetPubkeyHash)
.WillByDefault(Invoke(default_, &KeyManagement::GetPubkeyHash));
ON_CALL(*this, Flush)
.WillByDefault(Invoke(default_, &KeyManagement::Flush));
ON_CALL(*this, ReloadIfPossible)
.WillByDefault(Invoke(default_, &KeyManagement::ReloadIfPossible));
ON_CALL(*this, SideLoadKey)
.WillByDefault(Invoke(default_, &KeyManagement::SideLoadKey));
ON_CALL(*this, GetKeyHandle)
.WillByDefault(Invoke(default_, &KeyManagement::GetKeyHandle));
ON_CALL(*this, WrapRSAKey)
.WillByDefault(Invoke(default_, &KeyManagement::WrapRSAKey));
ON_CALL(*this, WrapECCKey)
.WillByDefault(Invoke(default_, &KeyManagement::WrapECCKey));
ON_CALL(*this, GetRSAPublicInfo)
.WillByDefault(Invoke(default_, &KeyManagement::GetRSAPublicInfo));
ON_CALL(*this, GetECCPublicInfo)
.WillByDefault(Invoke(default_, &KeyManagement::GetECCPublicInfo));
}
MOCK_METHOD(StatusOr<absl::flat_hash_set<KeyAlgoType>>,
GetSupportedAlgo,
(),
(override));
MOCK_METHOD(Status,
IsSupported,
(KeyAlgoType key_algo, const CreateKeyOptions& options),
(override));
MOCK_METHOD(StatusOr<CreateKeyResult>,
CreateKey,
(const OperationPolicySetting& policy,
KeyAlgoType key_algo,
const LoadKeyOptions& load_key_options,
const CreateKeyOptions& options),
(override));
MOCK_METHOD(StatusOr<ScopedKey>,
LoadKey,
(const OperationPolicy& policy,
const brillo::Blob& key_blob,
const LoadKeyOptions& load_key_options),
(override));
MOCK_METHOD(StatusOr<ScopedKey>,
GetPolicyEndorsementKey,
(const OperationPolicySetting& policy, KeyAlgoType key_algo),
(override));
MOCK_METHOD(StatusOr<ScopedKey>,
GetPersistentKey,
(PersistentKeyType key_type),
(override));
MOCK_METHOD(StatusOr<brillo::Blob>, GetPubkeyHash, (Key key), (override));
MOCK_METHOD(Status, Flush, (Key key), (override));
MOCK_METHOD(Status, ReloadIfPossible, (Key key), (override));
MOCK_METHOD(StatusOr<ScopedKey>,
SideLoadKey,
(uint32_t key_handle),
(override));
MOCK_METHOD(StatusOr<uint32_t>, GetKeyHandle, (Key key), (override));
MOCK_METHOD(StatusOr<CreateKeyResult>,
WrapRSAKey,
(const OperationPolicySetting& policy,
const brillo::Blob& public_modulus,
const brillo::SecureBlob& private_prime_factor,
const LoadKeyOptions& load_key_options,
const CreateKeyOptions& options),
(override));
MOCK_METHOD(StatusOr<CreateKeyResult>,
WrapECCKey,
(const OperationPolicySetting& policy,
const brillo::Blob& public_point_x,
const brillo::Blob& public_point_y,
const brillo::SecureBlob& private_value,
const LoadKeyOptions& load_key_options,
const CreateKeyOptions& options),
(override));
MOCK_METHOD(StatusOr<RSAPublicInfo>, GetRSAPublicInfo, (Key key), (override));
MOCK_METHOD(StatusOr<ECCPublicInfo>, GetECCPublicInfo, (Key key), (override));
private:
KeyManagement* default_;
};
} // namespace hwsec
#endif // LIBHWSEC_BACKEND_MOCK_KEY_MANAGEMENT_H_