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 #ifndef CRYPTO_CAPI_UTIL_H_ 6 #define CRYPTO_CAPI_UTIL_H_ 7 #pragma once 8 9 #include <windows.h> 10 #include <wincrypt.h> 11 12 namespace crypto { 13 14 // CryptAcquireContext when passed CRYPT_NEWKEYSET or CRYPT_DELETEKEYSET in 15 // flags is not thread-safe. For such calls, we create a global lock to 16 // synchronize it. 17 // 18 // From "Threading Issues with Cryptographic Service Providers", 19 // <http://msdn.microsoft.com/en-us/library/aa388149(v=VS.85).aspx>: 20 // 21 // "The CryptAcquireContext function is generally thread safe unless 22 // CRYPT_NEWKEYSET or CRYPT_DELETEKEYSET is specified in the dwFlags 23 // parameter." 24 BOOL CryptAcquireContextLocked(HCRYPTPROV* prov, 25 LPCWSTR container, 26 LPCWSTR provider, 27 DWORD prov_type, 28 DWORD flags); 29 30 } // namespace crypto 31 32 #endif // CRYPTO_CAPI_UTIL_H_ 33