1 // Copyright (c) 2012 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 #ifndef CRYPTO_CAPI_UTIL_H_ 6 #define CRYPTO_CAPI_UTIL_H_ 7 8 #include <windows.h> 9 #include <wincrypt.h> 10 11 #include "crypto/crypto_export.h" 12 13 namespace crypto { 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." 25 CRYPTO_EXPORT BOOL CryptAcquireContextLocked(HCRYPTPROV* prov, 26 LPCWSTR container, 27 LPCWSTR provider, 28 DWORD prov_type, 29 DWORD flags); 30 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 37 } // namespace crypto 38 39 #endif // CRYPTO_CAPI_UTIL_H_ 40