]>
Commit | Line | Data |
---|---|---|
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> | |
b32b8144 FG |
13 | #if defined( BOOST_USE_WINDOWS_H ) |
14 | // This header is not always included as part of windows.h | |
15 | #include <wincrypt.h> | |
16 | #endif | |
17 | ||
18 | #ifdef BOOST_HAS_PRAGMA_ONCE | |
19 | #pragma once | |
20 | #endif | |
21 | ||
22 | #if !defined( BOOST_USE_WINDOWS_H ) | |
23 | namespace boost { namespace winapi { | |
24 | typedef ULONG_PTR_ HCRYPTPROV_; | |
25 | }} | |
26 | ||
b32b8144 FG |
27 | extern "C" { |
28 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
29 | #if !defined( BOOST_NO_ANSI_APIS ) | |
92f5a8d4 | 30 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
31 | CryptEnumProvidersA( |
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); | |
b32b8144 | 38 | |
92f5a8d4 | 39 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
40 | CryptAcquireContextA( |
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 ) | |
47 | ||
92f5a8d4 | 48 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
49 | CryptEnumProvidersW( |
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); | |
b32b8144 | 56 | |
92f5a8d4 | 57 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
58 | CryptAcquireContextW( |
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); | |
64 | ||
92f5a8d4 | 65 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
66 | CryptGenRandom( |
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 | |
71 | ||
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. | |
92f5a8d4 | 77 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
78 | CryptReleaseContext( |
79 | boost::winapi::HCRYPTPROV_ hProv, | |
80 | boost::winapi::ULONG_PTR_ dwFlags); | |
81 | #else | |
92f5a8d4 | 82 | BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
83 | CryptReleaseContext( |
84 | boost::winapi::HCRYPTPROV_ hProv, | |
85 | boost::winapi::DWORD_ dwFlags); | |
86 | #endif | |
87 | #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM | |
88 | } | |
89 | #endif // !defined( BOOST_USE_WINDOWS_H ) | |
90 | ||
91 | namespace boost { | |
92 | namespace winapi { | |
93 | ||
94 | #if defined( BOOST_USE_WINDOWS_H ) | |
95 | ||
96 | typedef ::HCRYPTPROV HCRYPTPROV_; | |
97 | ||
98 | #if BOOST_WINAPI_PARTITION_APP_SYSTEM | |
92f5a8d4 | 99 | BOOST_CONSTEXPR_OR_CONST DWORD_ PROV_RSA_FULL_ = PROV_RSA_FULL; |
b32b8144 | 100 | |
92f5a8d4 TL |
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; | |
b32b8144 FG |
106 | #endif |
107 | ||
108 | #else | |
109 | ||
110 | #if BOOST_WINAPI_PARTITION_APP_SYSTEM | |
92f5a8d4 | 111 | BOOST_CONSTEXPR_OR_CONST DWORD_ PROV_RSA_FULL_ = 1; |
b32b8144 | 112 | |
92f5a8d4 TL |
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; | |
b32b8144 FG |
118 | #endif |
119 | ||
120 | #endif | |
121 | ||
122 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
123 | ||
124 | #if !defined( BOOST_NO_ANSI_APIS ) | |
92f5a8d4 | 125 | using ::CryptEnumProvidersA; |
b32b8144 FG |
126 | using ::CryptAcquireContextA; |
127 | #endif | |
92f5a8d4 | 128 | using ::CryptEnumProvidersW; |
b32b8144 FG |
129 | using ::CryptAcquireContextW; |
130 | using ::CryptGenRandom; | |
131 | ||
132 | #if !defined( BOOST_NO_ANSI_APIS ) | |
b32b8144 FG |
133 | BOOST_FORCEINLINE BOOL_ crypt_enum_providers( |
134 | DWORD_ dwIndex, | |
135 | DWORD_ *pdwReserved, | |
136 | DWORD_ dwFlags, | |
137 | DWORD_ *pdwProvType, | |
138 | LPSTR_ szProvName, | |
139 | DWORD_ *pcbProvName) | |
140 | { | |
92f5a8d4 | 141 | return ::CryptEnumProvidersA(dwIndex, pdwReserved, dwFlags, pdwProvType, szProvName, pcbProvName); |
b32b8144 FG |
142 | } |
143 | ||
144 | BOOST_FORCEINLINE BOOL_ crypt_acquire_context( | |
145 | HCRYPTPROV_ *phProv, | |
146 | LPCSTR_ pszContainer, | |
147 | LPCSTR_ pszProvider, | |
148 | DWORD_ dwProvType, | |
149 | DWORD_ dwFlags) | |
150 | { | |
151 | return ::CryptAcquireContextA(phProv, pszContainer, pszProvider, dwProvType, dwFlags); | |
152 | } | |
153 | #endif | |
154 | ||
b32b8144 FG |
155 | BOOST_FORCEINLINE BOOL_ crypt_enum_providers( |
156 | DWORD_ dwIndex, | |
157 | DWORD_ *pdwReserved, | |
158 | DWORD_ dwFlags, | |
159 | DWORD_ *pdwProvType, | |
160 | LPWSTR_ szProvName, | |
161 | DWORD_ *pcbProvName) | |
162 | { | |
92f5a8d4 | 163 | return ::CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, szProvName, pcbProvName); |
b32b8144 FG |
164 | } |
165 | ||
166 | BOOST_FORCEINLINE BOOL_ crypt_acquire_context( | |
167 | HCRYPTPROV_ *phProv, | |
168 | LPCWSTR_ szContainer, | |
169 | LPCWSTR_ szProvider, | |
170 | DWORD_ dwProvType, | |
171 | DWORD_ dwFlags) | |
172 | { | |
173 | return ::CryptAcquireContextW(phProv, szContainer, szProvider, dwProvType, dwFlags); | |
174 | } | |
175 | ||
176 | #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
177 | ||
178 | #if BOOST_WINAPI_PARTITION_APP_SYSTEM | |
179 | BOOST_FORCEINLINE BOOL_ CryptReleaseContext(HCRYPTPROV_ hProv, DWORD_ dwFlags) | |
180 | { | |
181 | return ::CryptReleaseContext(hProv, dwFlags); | |
182 | } | |
183 | #endif | |
184 | ||
185 | } | |
186 | } | |
187 | ||
188 | #endif // BOOST_WINAPI_CRYPT_HPP_INCLUDED_ |