• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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/capi_util.h"
6 
7 #include "base/basictypes.h"
8 #include "base/memory/singleton.h"
9 #include "base/synchronization/lock.h"
10 
11 namespace {
12 
13 class CAPIUtilSingleton {
14  public:
GetInstance()15   static CAPIUtilSingleton* GetInstance() {
16     return Singleton<CAPIUtilSingleton>::get();
17   }
18 
19   // Returns a lock to guard calls to CryptAcquireContext with
20   // CRYPT_DELETEKEYSET or CRYPT_NEWKEYSET.
acquire_context_lock()21   base::Lock& acquire_context_lock() {
22     return acquire_context_lock_;
23   }
24 
25  private:
26   friend class Singleton<CAPIUtilSingleton>;
27   friend struct DefaultSingletonTraits<CAPIUtilSingleton>;
28 
CAPIUtilSingleton()29   CAPIUtilSingleton() {}
30 
31   base::Lock acquire_context_lock_;
32 
33   DISALLOW_COPY_AND_ASSIGN(CAPIUtilSingleton);
34 };
35 
36 }  // namespace
37 
38 namespace crypto {
39 
CryptAcquireContextLocked(HCRYPTPROV * prov,LPCWSTR container,LPCWSTR provider,DWORD prov_type,DWORD flags)40 BOOL CryptAcquireContextLocked(HCRYPTPROV* prov,
41                                LPCWSTR container,
42                                LPCWSTR provider,
43                                DWORD prov_type,
44                                DWORD flags) {
45   base::AutoLock lock(CAPIUtilSingleton::GetInstance()->acquire_context_lock());
46   return CryptAcquireContext(prov, container, provider, prov_type, flags);
47 }
48 
CryptAlloc(size_t size)49 void* WINAPI CryptAlloc(size_t size) {
50   return malloc(size);
51 }
52 
CryptFree(void * p)53 void WINAPI CryptFree(void* p) {
54   free(p);
55 }
56 
57 }  // namespace crypto
58