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 12namespace 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." 24BOOL 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