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 13namespace 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." 25CRYPTO_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. 34CRYPTO_EXPORT void* WINAPI CryptAlloc(size_t size); 35CRYPTO_EXPORT void WINAPI CryptFree(void* p); 36 37} // namespace crypto 38 39#endif // CRYPTO_CAPI_UTIL_H_ 40