]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/winapi/crypt.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / winapi / crypt.hpp
1 /*
2 * Copyright 2014 Antony Polukhin
3 * Copyright 2015 Andrey Semashev
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * See http://www.boost.org/LICENSE_1_0.txt
7 */
8
9 #ifndef BOOST_WINAPI_CRYPT_HPP_INCLUDED_
10 #define BOOST_WINAPI_CRYPT_HPP_INCLUDED_
11
12 #include <boost/winapi/basic_types.hpp>
13 #include <boost/winapi/detail/cast_ptr.hpp>
14 #if defined( BOOST_USE_WINDOWS_H )
15 // This header is not always included as part of windows.h
16 #include <wincrypt.h>
17 #endif
18
19 #ifdef BOOST_HAS_PRAGMA_ONCE
20 #pragma once
21 #endif
22
23 #if !defined( BOOST_USE_WINDOWS_H )
24 namespace boost { namespace winapi {
25 typedef ULONG_PTR_ HCRYPTPROV_;
26 }}
27
28 // Some versions of MinGW contain buggy declarations of CryptEnumProvidersA and CryptEnumProvidersW.
29 // We cannot detect those broken versions, and we can't include the system header because it's incomplete.
30 // So below we duplicate the broken declarations here and work around the problem with cast_ptr. These declarations
31 // will have to be removed when MinGW is fixed.
32 //
33 // @@@ Looks like mingw 5.0-dev has this fixed and possibly in a 3.2x late release as well
34 // See: https://sourceforge.net/p/mingw/bugs/2263/
35
36 extern "C" {
37 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
38 #if !defined( BOOST_NO_ANSI_APIS )
39 #if !defined( BOOST_WINAPI_IS_MINGW ) || !defined( UNICODE )
40 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
41 CryptEnumProvidersA(
42 boost::winapi::DWORD_ dwIndex,
43 boost::winapi::DWORD_ *pdwReserved,
44 boost::winapi::DWORD_ dwFlags,
45 boost::winapi::DWORD_ *pdwProvType,
46 boost::winapi::LPSTR_ szProvName,
47 boost::winapi::DWORD_ *pcbProvName);
48 #else
49 // Broken declaration in MinGW
50 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
51 CryptEnumProvidersA(
52 boost::winapi::DWORD_ dwIndex,
53 boost::winapi::DWORD_ *pdwReserved,
54 boost::winapi::DWORD_ dwFlags,
55 boost::winapi::DWORD_ *pdwProvType,
56 boost::winapi::LPWSTR_ szProvName,
57 boost::winapi::DWORD_ *pcbProvName);
58 #endif
59
60 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
61 CryptAcquireContextA(
62 boost::winapi::HCRYPTPROV_ *phProv,
63 boost::winapi::LPCSTR_ pszContainer,
64 boost::winapi::LPCSTR_ pszProvider,
65 boost::winapi::DWORD_ dwProvType,
66 boost::winapi::DWORD_ dwFlags);
67 #endif // !defined( BOOST_NO_ANSI_APIS )
68
69 #if !defined( BOOST_WINAPI_IS_MINGW ) || defined( UNICODE )
70 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
71 CryptEnumProvidersW(
72 boost::winapi::DWORD_ dwIndex,
73 boost::winapi::DWORD_ *pdwReserved,
74 boost::winapi::DWORD_ dwFlags,
75 boost::winapi::DWORD_ *pdwProvType,
76 boost::winapi::LPWSTR_ szProvName,
77 boost::winapi::DWORD_ *pcbProvName);
78 #else
79 // Broken declaration in MinGW
80 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
81 CryptEnumProvidersW(
82 boost::winapi::DWORD_ dwIndex,
83 boost::winapi::DWORD_ *pdwReserved,
84 boost::winapi::DWORD_ dwFlags,
85 boost::winapi::DWORD_ *pdwProvType,
86 boost::winapi::LPSTR_ szProvName,
87 boost::winapi::DWORD_ *pcbProvName);
88 #endif
89
90 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
91 CryptAcquireContextW(
92 boost::winapi::HCRYPTPROV_ *phProv,
93 boost::winapi::LPCWSTR_ szContainer,
94 boost::winapi::LPCWSTR_ szProvider,
95 boost::winapi::DWORD_ dwProvType,
96 boost::winapi::DWORD_ dwFlags);
97
98 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
99 CryptGenRandom(
100 boost::winapi::HCRYPTPROV_ hProv,
101 boost::winapi::DWORD_ dwLen,
102 boost::winapi::BYTE_ *pbBuffer);
103 #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
104
105 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
106 #if defined(_MSC_VER) && (_MSC_VER+0) >= 1500 && (_MSC_VER+0) < 1900 && BOOST_USE_NTDDI_VERSION < BOOST_WINAPI_NTDDI_WINXP
107 // Standalone MS Windows SDK 6.0A and later until 10.0 provide a different declaration of CryptReleaseContext for Windows 2000 and older.
108 // 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,
109 // and (c) MSVC 14.0 and later, which are used with Windows SDK 10.
110 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
111 CryptReleaseContext(
112 boost::winapi::HCRYPTPROV_ hProv,
113 boost::winapi::ULONG_PTR_ dwFlags);
114 #else
115 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
116 CryptReleaseContext(
117 boost::winapi::HCRYPTPROV_ hProv,
118 boost::winapi::DWORD_ dwFlags);
119 #endif
120 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
121 }
122 #endif // !defined( BOOST_USE_WINDOWS_H )
123
124 namespace boost {
125 namespace winapi {
126
127 #if defined( BOOST_USE_WINDOWS_H )
128
129 typedef ::HCRYPTPROV HCRYPTPROV_;
130
131 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
132 const DWORD_ PROV_RSA_FULL_ = PROV_RSA_FULL;
133
134 const DWORD_ CRYPT_VERIFYCONTEXT_ = CRYPT_VERIFYCONTEXT;
135 const DWORD_ CRYPT_NEWKEYSET_ = CRYPT_NEWKEYSET;
136 const DWORD_ CRYPT_DELETEKEYSET_ = CRYPT_DELETEKEYSET;
137 const DWORD_ CRYPT_MACHINE_KEYSET_ = CRYPT_MACHINE_KEYSET;
138 const DWORD_ CRYPT_SILENT_ = CRYPT_SILENT;
139 #endif
140
141 #else
142
143 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
144 const DWORD_ PROV_RSA_FULL_ = 1;
145
146 const DWORD_ CRYPT_VERIFYCONTEXT_ = 0xF0000000;
147 const DWORD_ CRYPT_NEWKEYSET_ = 8;
148 const DWORD_ CRYPT_DELETEKEYSET_ = 16;
149 const DWORD_ CRYPT_MACHINE_KEYSET_ = 32;
150 const DWORD_ CRYPT_SILENT_ = 64;
151 #endif
152
153 #endif
154
155 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
156
157 #if !defined( BOOST_NO_ANSI_APIS )
158 using ::CryptAcquireContextA;
159 #endif
160 using ::CryptAcquireContextW;
161 using ::CryptGenRandom;
162
163 #if !defined( BOOST_NO_ANSI_APIS )
164 BOOST_FORCEINLINE BOOL_ CryptEnumProvidersA(
165 DWORD_ dwIndex,
166 DWORD_ *pdwReserved,
167 DWORD_ dwFlags,
168 DWORD_ *pdwProvType,
169 LPSTR_ szProvName,
170 DWORD_ *pcbProvName)
171 {
172 return ::CryptEnumProvidersA(dwIndex, pdwReserved, dwFlags, pdwProvType, winapi::detail::cast_ptr(szProvName), pcbProvName);
173 }
174
175 BOOST_FORCEINLINE BOOL_ crypt_enum_providers(
176 DWORD_ dwIndex,
177 DWORD_ *pdwReserved,
178 DWORD_ dwFlags,
179 DWORD_ *pdwProvType,
180 LPSTR_ szProvName,
181 DWORD_ *pcbProvName)
182 {
183 return ::CryptEnumProvidersA(dwIndex, pdwReserved, dwFlags, pdwProvType, winapi::detail::cast_ptr(szProvName), pcbProvName);
184 }
185
186 BOOST_FORCEINLINE BOOL_ crypt_acquire_context(
187 HCRYPTPROV_ *phProv,
188 LPCSTR_ pszContainer,
189 LPCSTR_ pszProvider,
190 DWORD_ dwProvType,
191 DWORD_ dwFlags)
192 {
193 return ::CryptAcquireContextA(phProv, pszContainer, pszProvider, dwProvType, dwFlags);
194 }
195 #endif
196
197 BOOST_FORCEINLINE BOOL_ CryptEnumProvidersW(
198 DWORD_ dwIndex,
199 DWORD_ *pdwReserved,
200 DWORD_ dwFlags,
201 DWORD_ *pdwProvType,
202 LPWSTR_ szProvName,
203 DWORD_ *pcbProvName)
204 {
205 return ::CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, winapi::detail::cast_ptr(szProvName), pcbProvName);
206 }
207
208 BOOST_FORCEINLINE BOOL_ crypt_enum_providers(
209 DWORD_ dwIndex,
210 DWORD_ *pdwReserved,
211 DWORD_ dwFlags,
212 DWORD_ *pdwProvType,
213 LPWSTR_ szProvName,
214 DWORD_ *pcbProvName)
215 {
216 return ::CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, winapi::detail::cast_ptr(szProvName), pcbProvName);
217 }
218
219 BOOST_FORCEINLINE BOOL_ crypt_acquire_context(
220 HCRYPTPROV_ *phProv,
221 LPCWSTR_ szContainer,
222 LPCWSTR_ szProvider,
223 DWORD_ dwProvType,
224 DWORD_ dwFlags)
225 {
226 return ::CryptAcquireContextW(phProv, szContainer, szProvider, dwProvType, dwFlags);
227 }
228
229 #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
230
231 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
232 BOOST_FORCEINLINE BOOL_ CryptReleaseContext(HCRYPTPROV_ hProv, DWORD_ dwFlags)
233 {
234 return ::CryptReleaseContext(hProv, dwFlags);
235 }
236 #endif
237
238 }
239 }
240
241 #endif // BOOST_WINAPI_CRYPT_HPP_INCLUDED_