1 // Copyright 2021 The Chromium Authors 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 "base/functional/bind.h" 9 #include "build/build_config.h" 10 11 namespace crypto { 12 13 namespace { 14 std::unique_ptr<UnexportableKeyProvider> (*g_mock_provider)() = nullptr; 15 } // namespace 16 17 UnexportableSigningKey::~UnexportableSigningKey() = default; 18 UnexportableKeyProvider::~UnexportableKeyProvider() = default; 19 20 VirtualUnexportableSigningKey::~VirtualUnexportableSigningKey() = default; 21 VirtualUnexportableKeyProvider::~VirtualUnexportableKeyProvider() = default; 22 23 #if BUILDFLAG(IS_WIN) 24 std::unique_ptr<UnexportableKeyProvider> GetUnexportableKeyProviderWin(); 25 std::unique_ptr<VirtualUnexportableKeyProvider> 26 GetVirtualUnexportableKeyProviderWin(); 27 #endif 28 29 // Implemented in unexportable_key_software_unsecure.cc. 30 std::unique_ptr<UnexportableKeyProvider> 31 GetUnexportableKeyProviderSoftwareUnsecure(); 32 GetUnexportableKeyProvider()33std::unique_ptr<UnexportableKeyProvider> GetUnexportableKeyProvider() { 34 if (g_mock_provider) { 35 return g_mock_provider(); 36 } 37 38 #if BUILDFLAG(IS_WIN) 39 return GetUnexportableKeyProviderWin(); 40 #else 41 return nullptr; 42 #endif 43 } 44 45 std::unique_ptr<VirtualUnexportableKeyProvider> GetVirtualUnexportableKeyProvider_DO_NOT_USE_METRICS_ONLY()46GetVirtualUnexportableKeyProvider_DO_NOT_USE_METRICS_ONLY() { 47 #if BUILDFLAG(IS_WIN) 48 return GetVirtualUnexportableKeyProviderWin(); 49 #else 50 return nullptr; 51 #endif 52 } 53 54 namespace internal { 55 SetUnexportableKeyProviderForTesting(std::unique_ptr<UnexportableKeyProvider> (* func)())56void SetUnexportableKeyProviderForTesting( 57 std::unique_ptr<UnexportableKeyProvider> (*func)()) { 58 if (g_mock_provider) { 59 // Nesting ScopedMockUnexportableSigningKeyForTesting is not supported. 60 CHECK(!func); 61 g_mock_provider = nullptr; 62 } else { 63 g_mock_provider = func; 64 } 65 } 66 67 } // namespace internal 68 } // namespace crypto 69