[email protected] | cf21188 | 2012-07-11 07:19:14 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 3bcd5790 | 2010-06-23 22:46:04 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 5 | #ifndef CRYPTO_CAPI_UTIL_H_ |
6 | #define CRYPTO_CAPI_UTIL_H_ | ||||
[email protected] | 3bcd5790 | 2010-06-23 22:46:04 | [diff] [blame] | 7 | |
8 | #include <windows.h> | ||||
9 | #include <wincrypt.h> | ||||
10 | |||||
[email protected] | d613a990 | 2011-08-05 20:59:11 | [diff] [blame] | 11 | #include "crypto/crypto_export.h" |
[email protected] | e4c9dda | 2011-06-20 23:24:09 | [diff] [blame] | 12 | |
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 13 | namespace crypto { |
[email protected] | 3bcd5790 | 2010-06-23 22:46:04 | [diff] [blame] | 14 | |
15 | // CryptAcquireContext when passed CRYPT_NEWKEYSET or CRYPT_DELETEKEYSET in | ||||
16 | // flags is not thread-safe. For such calls, we create a global lock to | ||||
17 | // synchronize it. | ||||
18 | // | ||||
19 | // From "Threading Issues with Cryptographic Service Providers", | ||||
20 | // <http://msdn.microsoft.com/en-us/library/aa388149(v=VS.85).aspx>: | ||||
21 | // | ||||
22 | // "The CryptAcquireContext function is generally thread safe unless | ||||
23 | // CRYPT_NEWKEYSET or CRYPT_DELETEKEYSET is specified in the dwFlags | ||||
24 | // parameter." | ||||
[email protected] | d613a990 | 2011-08-05 20:59:11 | [diff] [blame] | 25 | CRYPTO_EXPORT BOOL CryptAcquireContextLocked(HCRYPTPROV* prov, |
26 | LPCWSTR container, | ||||
27 | LPCWSTR provider, | ||||
28 | DWORD prov_type, | ||||
29 | DWORD flags); | ||||
[email protected] | 3bcd5790 | 2010-06-23 22:46:04 | [diff] [blame] | 30 | |
[email protected] | 68da887 | 2012-02-15 06:01:59 | [diff] [blame] | 31 | // Wrappers of malloc and free for CryptoAPI routines that need memory |
32 | // allocators, such as in CRYPT_DECODE_PARA. Such routines require WINAPI | ||||
33 | // calling conventions. | ||||
34 | CRYPTO_EXPORT void* WINAPI CryptAlloc(size_t size); | ||||
35 | CRYPTO_EXPORT void WINAPI CryptFree(void* p); | ||||
36 | |||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 37 | } // namespace crypto |
[email protected] | 3bcd5790 | 2010-06-23 22:46:04 | [diff] [blame] | 38 | |
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 39 | #endif // CRYPTO_CAPI_UTIL_H_ |