blob: 2cf10625ec34fc09f66a0b8964c478e9cd50e5ea [file] [log] [blame]
[email protected]3b63f8f42011-03-28 01:54:151// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]3bcd57902010-06-23 22:46:042// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]4b559b4d2011-04-14 17:37:145#include "crypto/capi_util.h"
[email protected]3bcd57902010-06-23 22:46:046
7#include "base/basictypes.h"
[email protected]3b63f8f42011-03-28 01:54:158#include "base/memory/singleton.h"
[email protected]20305ec2011-01-21 04:55:529#include "base/synchronization/lock.h"
[email protected]3bcd57902010-06-23 22:46:0410
11namespace {
12
13class CAPIUtilSingleton {
14 public:
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.
[email protected]20305ec2011-01-21 04:55:5221 base::Lock& acquire_context_lock() {
[email protected]3bcd57902010-06-23 22:46:0422 return acquire_context_lock_;
23 }
24
25 private:
26 friend class Singleton<CAPIUtilSingleton>;
27 friend struct DefaultSingletonTraits<CAPIUtilSingleton>;
28
29 CAPIUtilSingleton() {}
30
[email protected]20305ec2011-01-21 04:55:5231 base::Lock acquire_context_lock_;
[email protected]3bcd57902010-06-23 22:46:0432
33 DISALLOW_COPY_AND_ASSIGN(CAPIUtilSingleton);
34};
35
36} // namespace
37
[email protected]4b559b4d2011-04-14 17:37:1438namespace crypto {
[email protected]3bcd57902010-06-23 22:46:0439
40BOOL CryptAcquireContextLocked(HCRYPTPROV* prov,
[email protected]08ce4d42010-10-21 00:31:1941 LPCWSTR container,
42 LPCWSTR provider,
[email protected]3bcd57902010-06-23 22:46:0443 DWORD prov_type,
[email protected]4b559b4d2011-04-14 17:37:1444 DWORD flags) {
[email protected]20305ec2011-01-21 04:55:5245 base::AutoLock lock(CAPIUtilSingleton::GetInstance()->acquire_context_lock());
[email protected]3bcd57902010-06-23 22:46:0446 return CryptAcquireContext(prov, container, provider, prov_type, flags);
47}
48
[email protected]68da8872012-02-15 06:01:5949void* WINAPI CryptAlloc(size_t size) {
50 return malloc(size);
51}
52
53void WINAPI CryptFree(void* p) {
54 free(p);
55}
56
[email protected]4b559b4d2011-04-14 17:37:1457} // namespace crypto