Upload upstream chromium 94.0.4606.31
[platform/framework/web/chromium-efl.git] / crypto / unexportable_key.cc
1 // Copyright (c) 2021 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "crypto/unexportable_key.h"
6
7 #include "base/check.h"
8 #include "build/build_config.h"
9
10 namespace crypto {
11
12 UnexportableSigningKey::~UnexportableSigningKey() = default;
13 UnexportableKeyProvider::~UnexportableKeyProvider() = default;
14
15 #if defined(OS_WIN)
16 std::unique_ptr<UnexportableKeyProvider> GetUnexportableKeyProviderWin();
17 #endif
18
19 static std::unique_ptr<UnexportableKeyProvider> (*g_mock_provider)() = nullptr;
20
21 std::unique_ptr<UnexportableKeyProvider> GetUnexportableKeyProvider() {
22   if (g_mock_provider) {
23     return g_mock_provider();
24   }
25
26 #if defined(OS_WIN)
27   return GetUnexportableKeyProviderWin();
28 #else
29   return nullptr;
30 #endif
31 }
32
33 namespace internal {
34
35 void SetUnexportableKeyProviderForTesting(
36     std::unique_ptr<UnexportableKeyProvider> (*func)()) {
37   if (g_mock_provider) {
38     // Nesting ScopedMockUnexportableSigningKeyForTesting is not supported.
39     CHECK(!func);
40     g_mock_provider = nullptr;
41   } else {
42     g_mock_provider = func;
43   }
44 }
45
46 }  // namespace internal
47 }  // namespace crypto