FreeRDP
Loading...
Searching...
No Matches
include/winpr/ncrypt.h
1
20#ifndef WINPR_INCLUDE_WINPR_NCRYPT_H_
21#define WINPR_INCLUDE_WINPR_NCRYPT_H_
22
23#ifdef _WIN32
24#include <wincrypt.h>
25#include <ncrypt.h>
26#else
27
28#include <winpr/wtypes.h>
29#include <winpr/winpr.h>
30
31WINPR_PRAGMA_DIAG_PUSH
32WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO
33
34#ifndef __SECSTATUS_DEFINED__
35typedef LONG SECURITY_STATUS;
36// NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
37#define __SECSTATUS_DEFINED__
38#endif
39
40WINPR_PRAGMA_DIAG_POP
41
42typedef ULONG_PTR NCRYPT_HANDLE;
43typedef ULONG_PTR NCRYPT_PROV_HANDLE;
44typedef ULONG_PTR NCRYPT_KEY_HANDLE;
45
46#define MS_KEY_STORAGE_PROVIDER \
47 (const WCHAR*)"M\x00i\x00" \
48 "c\x00r\x00o\x00s\x00o\x00" \
49 "f\x00t\x00 " \
50 "\x00S\x00o\x00" \
51 "f\x00t\x00w\x00" \
52 "a\x00r\x00" \
53 "e\x00 \x00K\x00" \
54 "e\x00y\x00 " \
55 "\x00S\x00t\x00o\x00r\x00" \
56 "a\x00g\x00" \
57 "e\x00 " \
58 "\x00P\x00r\x00o\x00v\x00i\x00" \
59 "d\x00" \
60 "e\x00r\x00\x00"
61#define MS_SMART_CARD_KEY_STORAGE_PROVIDER \
62 (const WCHAR*)"M\x00i\x00" \
63 "c\x00r\x00o\x00s\x00o\x00" \
64 "f\x00t\x00 \x00S\x00m\x00" \
65 "a\x00r\x00t\x00 " \
66 "\x00" \
67 "C\x00" \
68 "a\x00r\x00" \
69 "d\x00 \x00K\x00" \
70 "e\x00y\x00 " \
71 "\x00S\x00t\x00o\x00r\x00" \
72 "a\x00g\x00" \
73 "e\x00 " \
74 "\x00P\x00r\x00o\x00v\x00i\x00" \
75 "d\x00" \
76 "e\x00r\x00\x00"
77
78#define MS_SCARD_PROV_A "Microsoft Base Smart Card Crypto Provider"
79#define MS_SCARD_PROV \
80 (const WCHAR*)("M\x00i\x00" \
81 "c\x00r\x00o\x00s\x00o\x00" \
82 "f\x00t\x00 \x00" \
83 "B\x00" \
84 "a\x00s\x00" \
85 "e\x00 " \
86 "\x00S\x00m\x00" \
87 "a\x00r\x00t\x00 \x00" \
88 "C\x00" \
89 "a\x00r\x00" \
90 "d\x00 " \
91 "\x00" \
92 "C\x00r\x00y\x00p\x00t\x00o\x00 " \
93 "\x00P\x00r\x00o\x00v\x00i\x00" \
94 "d\x00" \
95 "e\x00r\x00\x00")
96
97#define MS_PLATFORM_KEY_STORAGE_PROVIDER \
98 (const WCHAR*)"M\x00i\x00" \
99 "c\x00r\x00o\x00s\x00o\x00" \
100 "f\x00t\x00 " \
101 "\x00P\x00l\x00" \
102 "a\x00t\x00" \
103 "f\x00o\x00r\x00m\x00 " \
104 "\x00" \
105 "C\x00r\x00y\x00p\x00t\x00o\x00 " \
106 "\x00P\x00r\x00o\x00v\x00i\x00" \
107 "d\x00" \
108 "e\x00r\x00\x00"
109
110#define NCRYPT_CERTIFICATE_PROPERTY \
111 (const WCHAR*)"S\x00m\x00" \
112 "a\x00r\x00t\x00" \
113 "C\x00" \
114 "a\x00r\x00" \
115 "d\x00K\x00" \
116 "e\x00y\x00" \
117 "C\x00" \
118 "e\x00r\x00t" \
119 "\x00i\x00" \
120 "f\x00i\x00" \
121 "c\x00" \
122 "a\x00t\x00" \
123 "e\x00\x00"
124#define NCRYPT_NAME_PROPERTY (const WCHAR*)"N\x00a\x00m\x00e\x00\x00"
125#define NCRYPT_UNIQUE_NAME_PROPERTY \
126 (const WCHAR*)"U\x00n\x00i\x00q\x00u\x00" \
127 "e\x00 \x00N\x00" \
128 "a\x00m\x00" \
129 "e\x00\x00"
130#define NCRYPT_READER_PROPERTY \
131 (const WCHAR*)"S\x00m\x00" \
132 "a\x00r\x00t\x00" \
133 "C\x00" \
134 "a\x00r\x00" \
135 "d\x00R\x00" \
136 "e\x00" \
137 "a\x00" \
138 "d\x00" \
139 "e\x00r\x00\x00"
140
141/* winpr specific properties */
142#define NCRYPT_WINPR_SLOTID (const WCHAR*)"S\x00l\x00o\x00t\x00\x00"
143
144#define NCRYPT_MACHINE_KEY_FLAG 0x20
145#define NCRYPT_SILENT_FLAG 0x40
146
148typedef struct NCryptKeyName
149{
150 LPWSTR pszName;
151 LPWSTR pszAlgid;
152 DWORD dwLegacyKeySpec;
153 DWORD dwFlags;
155
157typedef struct NCryptProviderName
158{
159 LPWSTR pszName;
160 LPWSTR pszComment;
162
163#ifdef __cplusplus
164extern "C"
165{
166#endif
167
168 WINPR_API SECURITY_STATUS NCryptEnumStorageProviders(DWORD* wProviderCount,
169 NCryptProviderName** ppProviderList,
170 DWORD dwFlags);
171
172 WINPR_API SECURITY_STATUS NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE* phProvider,
173 LPCWSTR pszProviderName, DWORD dwFlags);
174
175 WINPR_API SECURITY_STATUS NCryptEnumKeys(NCRYPT_PROV_HANDLE hProvider, LPCWSTR pszScope,
176 NCryptKeyName** ppKeyName, PVOID* ppEnumState,
177 DWORD dwFlags);
178
179 WINPR_API SECURITY_STATUS NCryptOpenKey(NCRYPT_PROV_HANDLE hProvider, NCRYPT_KEY_HANDLE* phKey,
180 LPCWSTR pszKeyName, DWORD dwLegacyKeySpec,
181 DWORD dwFlags);
182
183 WINPR_API SECURITY_STATUS NCryptGetProperty(NCRYPT_HANDLE hObject, LPCWSTR pszProperty,
184 PBYTE pbOutput, DWORD cbOutput, DWORD* pcbResult,
185 DWORD dwFlags);
186
187 WINPR_API SECURITY_STATUS NCryptFreeObject(NCRYPT_HANDLE hObject);
188 WINPR_API SECURITY_STATUS NCryptFreeBuffer(PVOID pvInput);
189
190#ifdef __cplusplus
191}
192#endif
193
194#endif /* _WIN32 */
195
196#ifdef __cplusplus
197extern "C"
198{
199#endif
200
209 WINPR_API SECURITY_STATUS winpr_NCryptOpenStorageProviderEx(NCRYPT_PROV_HANDLE* phProvider,
210 LPCWSTR pszProviderName,
211 DWORD dwFlags, LPCSTR* modulePaths);
212
219 WINPR_API const char* winpr_NCryptSecurityStatusError(SECURITY_STATUS status);
220
228 WINPR_API const char* winpr_NCryptGetModulePath(NCRYPT_PROV_HANDLE phProvider);
229
230#ifdef __cplusplus
231}
232#endif
233
234#endif /* WINPR_INCLUDE_WINPR_NCRYPT_H_ */
a key name descriptor
a provider name descriptor