• 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