]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/winapi/crypt.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / winapi / crypt.hpp
CommitLineData
b32b8144
FG
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 )
24namespace boost { namespace winapi {
25typedef 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
36extern "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 )
40BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
41CryptEnumProvidersA(
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
50BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
51CryptEnumProvidersA(
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
60BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
61CryptAcquireContextA(
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 )
70BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
71CryptEnumProvidersW(
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
80BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
81CryptEnumProvidersW(
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
90BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
91CryptAcquireContextW(
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
98BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
99CryptGenRandom(
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.
110BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
111CryptReleaseContext(
112 boost::winapi::HCRYPTPROV_ hProv,
113 boost::winapi::ULONG_PTR_ dwFlags);
114#else
115BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
116CryptReleaseContext(
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
124namespace boost {
125namespace winapi {
126
127#if defined( BOOST_USE_WINDOWS_H )
128
129typedef ::HCRYPTPROV HCRYPTPROV_;
130
131#if BOOST_WINAPI_PARTITION_APP_SYSTEM
132const DWORD_ PROV_RSA_FULL_ = PROV_RSA_FULL;
133
134const DWORD_ CRYPT_VERIFYCONTEXT_ = CRYPT_VERIFYCONTEXT;
135const DWORD_ CRYPT_NEWKEYSET_ = CRYPT_NEWKEYSET;
136const DWORD_ CRYPT_DELETEKEYSET_ = CRYPT_DELETEKEYSET;
137const DWORD_ CRYPT_MACHINE_KEYSET_ = CRYPT_MACHINE_KEYSET;
138const DWORD_ CRYPT_SILENT_ = CRYPT_SILENT;
139#endif
140
141#else
142
143#if BOOST_WINAPI_PARTITION_APP_SYSTEM
144const DWORD_ PROV_RSA_FULL_ = 1;
145
146const DWORD_ CRYPT_VERIFYCONTEXT_ = 0xF0000000;
147const DWORD_ CRYPT_NEWKEYSET_ = 8;
148const DWORD_ CRYPT_DELETEKEYSET_ = 16;
149const DWORD_ CRYPT_MACHINE_KEYSET_ = 32;
150const 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 )
158using ::CryptAcquireContextA;
159#endif
160using ::CryptAcquireContextW;
161using ::CryptGenRandom;
162
163#if !defined( BOOST_NO_ANSI_APIS )
164BOOST_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
175BOOST_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
186BOOST_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
197BOOST_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
208BOOST_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
219BOOST_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
232BOOST_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_