2 * Copyright 2014 Antony Polukhin
3 * Copyright 2015 Andrey Semashev
5 * Distributed under the Boost Software License, Version 1.0.
6 * See http://www.boost.org/LICENSE_1_0.txt
9 #ifndef BOOST_WINAPI_CRYPT_HPP_INCLUDED_
10 #define BOOST_WINAPI_CRYPT_HPP_INCLUDED_
12 #include <boost/winapi/basic_types.hpp>
13 #if defined( BOOST_USE_WINDOWS_H )
14 // This header is not always included as part of windows.h
18 #ifdef BOOST_HAS_PRAGMA_ONCE
22 #if !defined( BOOST_USE_WINDOWS_H )
23 namespace boost { namespace winapi {
24 typedef ULONG_PTR_ HCRYPTPROV_;
28 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
29 #if !defined( BOOST_NO_ANSI_APIS )
30 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
32 boost::winapi::DWORD_ dwIndex,
33 boost::winapi::DWORD_ *pdwReserved,
34 boost::winapi::DWORD_ dwFlags,
35 boost::winapi::DWORD_ *pdwProvType,
36 boost::winapi::LPSTR_ szProvName,
37 boost::winapi::DWORD_ *pcbProvName);
39 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
41 boost::winapi::HCRYPTPROV_ *phProv,
42 boost::winapi::LPCSTR_ pszContainer,
43 boost::winapi::LPCSTR_ pszProvider,
44 boost::winapi::DWORD_ dwProvType,
45 boost::winapi::DWORD_ dwFlags);
46 #endif // !defined( BOOST_NO_ANSI_APIS )
48 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
50 boost::winapi::DWORD_ dwIndex,
51 boost::winapi::DWORD_ *pdwReserved,
52 boost::winapi::DWORD_ dwFlags,
53 boost::winapi::DWORD_ *pdwProvType,
54 boost::winapi::LPWSTR_ szProvName,
55 boost::winapi::DWORD_ *pcbProvName);
57 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
59 boost::winapi::HCRYPTPROV_ *phProv,
60 boost::winapi::LPCWSTR_ szContainer,
61 boost::winapi::LPCWSTR_ szProvider,
62 boost::winapi::DWORD_ dwProvType,
63 boost::winapi::DWORD_ dwFlags);
65 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
67 boost::winapi::HCRYPTPROV_ hProv,
68 boost::winapi::DWORD_ dwLen,
69 boost::winapi::BYTE_ *pbBuffer);
70 #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
72 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
73 #if defined(_MSC_VER) && (_MSC_VER+0) >= 1500 && (_MSC_VER+0) < 1900 && BOOST_USE_NTDDI_VERSION < BOOST_WINAPI_NTDDI_WINXP
74 // Standalone MS Windows SDK 6.0A and later until 10.0 provide a different declaration of CryptReleaseContext for Windows 2000 and older.
75 // This is not the case for (a) MinGW and MinGW-w64, (b) MSVC 7.1 and 8, which are shipped with their own Windows SDK,
76 // and (c) MSVC 14.0 and later, which are used with Windows SDK 10.
77 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
79 boost::winapi::HCRYPTPROV_ hProv,
80 boost::winapi::ULONG_PTR_ dwFlags);
82 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
84 boost::winapi::HCRYPTPROV_ hProv,
85 boost::winapi::DWORD_ dwFlags);
87 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
89 #endif // !defined( BOOST_USE_WINDOWS_H )
94 #if defined( BOOST_USE_WINDOWS_H )
96 typedef ::HCRYPTPROV HCRYPTPROV_;
98 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
99 BOOST_CONSTEXPR_OR_CONST DWORD_ PROV_RSA_FULL_ = PROV_RSA_FULL;
101 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_VERIFYCONTEXT_ = CRYPT_VERIFYCONTEXT;
102 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_NEWKEYSET_ = CRYPT_NEWKEYSET;
103 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_DELETEKEYSET_ = CRYPT_DELETEKEYSET;
104 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_MACHINE_KEYSET_ = CRYPT_MACHINE_KEYSET;
105 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_SILENT_ = CRYPT_SILENT;
110 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
111 BOOST_CONSTEXPR_OR_CONST DWORD_ PROV_RSA_FULL_ = 1;
113 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_VERIFYCONTEXT_ = 0xF0000000;
114 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_NEWKEYSET_ = 8;
115 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_DELETEKEYSET_ = 16;
116 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_MACHINE_KEYSET_ = 32;
117 BOOST_CONSTEXPR_OR_CONST DWORD_ CRYPT_SILENT_ = 64;
122 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
124 #if !defined( BOOST_NO_ANSI_APIS )
125 using ::CryptEnumProvidersA;
126 using ::CryptAcquireContextA;
128 using ::CryptEnumProvidersW;
129 using ::CryptAcquireContextW;
130 using ::CryptGenRandom;
132 #if !defined( BOOST_NO_ANSI_APIS )
133 BOOST_FORCEINLINE BOOL_ crypt_enum_providers(
141 return ::CryptEnumProvidersA(dwIndex, pdwReserved, dwFlags, pdwProvType, szProvName, pcbProvName);
144 BOOST_FORCEINLINE BOOL_ crypt_acquire_context(
146 LPCSTR_ pszContainer,
151 return ::CryptAcquireContextA(phProv, pszContainer, pszProvider, dwProvType, dwFlags);
155 BOOST_FORCEINLINE BOOL_ crypt_enum_providers(
163 return ::CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, szProvName, pcbProvName);
166 BOOST_FORCEINLINE BOOL_ crypt_acquire_context(
168 LPCWSTR_ szContainer,
173 return ::CryptAcquireContextW(phProv, szContainer, szProvider, dwProvType, dwFlags);
176 #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
178 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
179 BOOST_FORCEINLINE BOOL_ CryptReleaseContext(HCRYPTPROV_ hProv, DWORD_ dwFlags)
181 return ::CryptReleaseContext(hProv, dwFlags);
188 #endif // BOOST_WINAPI_CRYPT_HPP_INCLUDED_