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.
5 #include "crypto/capi_util.h"
7 #include "base/basictypes.h"
8 #include "base/memory/singleton.h"
9 #include "base/synchronization/lock.h"
13 class CAPIUtilSingleton
{
15 static CAPIUtilSingleton
* GetInstance() {
16 return base::Singleton
<CAPIUtilSingleton
>::get();
19 // Returns a lock to guard calls to CryptAcquireContext with
20 // CRYPT_DELETEKEYSET or CRYPT_NEWKEYSET.
21 base::Lock
& acquire_context_lock() {
22 return acquire_context_lock_
;
26 friend class base::Singleton
<CAPIUtilSingleton
>;
27 friend struct base::DefaultSingletonTraits
<CAPIUtilSingleton
>;
29 CAPIUtilSingleton() {}
31 base::Lock acquire_context_lock_
;
33 DISALLOW_COPY_AND_ASSIGN(CAPIUtilSingleton
);
40 BOOL
CryptAcquireContextLocked(HCRYPTPROV
* prov
,
45 base::AutoLock
lock(CAPIUtilSingleton::GetInstance()->acquire_context_lock());
46 return CryptAcquireContext(prov
, container
, provider
, prov_type
, flags
);
49 void* WINAPI
CryptAlloc(size_t size
) {
53 void WINAPI
CryptFree(void* p
) {