23#include <winpr/platform.h>
24#include <winpr/winpr.h>
25#include <winpr/cast.h>
26#include <winpr/wtypes.h>
27#include <winpr/windows.h>
28#include <winpr/security.h>
41#if !defined(_WIN32) || defined(_UWP)
48typedef WCHAR SEC_WCHAR;
60WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO
62#ifndef __SECSTATUS_DEFINED__
63typedef LONG SECURITY_STATUS;
65#define __SECSTATUS_DEFINED__
93#define SecPkgInfo SecPkgInfoW
94#define PSecPkgInfo PSecPkgInfoW
96#define SecPkgInfo SecPkgInfoA
97#define PSecPkgInfo PSecPkgInfoA
102#define NTLM_SSP_NAME _T("NTLM")
103#define KERBEROS_SSP_NAME _T("Kerberos")
104#define NEGO_SSP_NAME _T("Negotiate")
106#define SECPKG_ID_NONE 0xFFFF
108#define SECPKG_FLAG_INTEGRITY 0x00000001
109#define SECPKG_FLAG_PRIVACY 0x00000002
110#define SECPKG_FLAG_TOKEN_ONLY 0x00000004
111#define SECPKG_FLAG_DATAGRAM 0x00000008
112#define SECPKG_FLAG_CONNECTION 0x00000010
113#define SECPKG_FLAG_MULTI_REQUIRED 0x00000020
114#define SECPKG_FLAG_CLIENT_ONLY 0x00000040
115#define SECPKG_FLAG_EXTENDED_ERROR 0x00000080
116#define SECPKG_FLAG_IMPERSONATION 0x00000100
117#define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200
118#define SECPKG_FLAG_STREAM 0x00000400
119#define SECPKG_FLAG_NEGOTIABLE 0x00000800
120#define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000
121#define SECPKG_FLAG_LOGON 0x00002000
122#define SECPKG_FLAG_ASCII_BUFFERS 0x00004000
123#define SECPKG_FLAG_FRAGMENT 0x00008000
124#define SECPKG_FLAG_MUTUAL_AUTH 0x00010000
125#define SECPKG_FLAG_DELEGATION 0x00020000
126#define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000
127#define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000
128#define SECPKG_FLAG_NEGO_EXTENDER 0x00100000
129#define SECPKG_FLAG_NEGOTIABLE2 0x00200000
133#define SEC_E_OK WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00000000)
134#define SEC_E_INSUFFICIENT_MEMORY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090300)
135#define SEC_E_INVALID_HANDLE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090301)
136#define SEC_E_UNSUPPORTED_FUNCTION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090302)
137#define SEC_E_TARGET_UNKNOWN WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090303)
138#define SEC_E_INTERNAL_ERROR WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090304)
139#define SEC_E_SECPKG_NOT_FOUND WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090305)
140#define SEC_E_NOT_OWNER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090306)
141#define SEC_E_CANNOT_INSTALL WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090307)
142#define SEC_E_INVALID_TOKEN WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090308)
143#define SEC_E_CANNOT_PACK WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090309)
144#define SEC_E_QOP_NOT_SUPPORTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030A)
145#define SEC_E_NO_IMPERSONATION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030B)
146#define SEC_E_LOGON_DENIED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030C)
147#define SEC_E_UNKNOWN_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030D)
148#define SEC_E_NO_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030E)
149#define SEC_E_MESSAGE_ALTERED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030F)
150#define SEC_E_OUT_OF_SEQUENCE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090310)
151#define SEC_E_NO_AUTHENTICATING_AUTHORITY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090311)
152#define SEC_E_BAD_PKGID WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090316)
153#define SEC_E_CONTEXT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090317)
154#define SEC_E_INCOMPLETE_MESSAGE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090318)
155#define SEC_E_INCOMPLETE_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090320)
156#define SEC_E_BUFFER_TOO_SMALL WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090321)
157#define SEC_E_WRONG_PRINCIPAL WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090322)
158#define SEC_E_TIME_SKEW WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090324)
159#define SEC_E_UNTRUSTED_ROOT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090325)
160#define SEC_E_ILLEGAL_MESSAGE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090326)
161#define SEC_E_CERT_UNKNOWN WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090327)
162#define SEC_E_CERT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090328)
163#define SEC_E_ENCRYPT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090329)
164#define SEC_E_DECRYPT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090330)
165#define SEC_E_ALGORITHM_MISMATCH WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090331)
166#define SEC_E_SECURITY_QOS_FAILED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090332)
167#define SEC_E_UNFINISHED_CONTEXT_DELETED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090333)
168#define SEC_E_NO_TGT_REPLY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090334)
169#define SEC_E_NO_IP_ADDRESSES WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090335)
170#define SEC_E_WRONG_CREDENTIAL_HANDLE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090336)
171#define SEC_E_CRYPTO_SYSTEM_INVALID WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090337)
172#define SEC_E_MAX_REFERRALS_EXCEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090338)
173#define SEC_E_MUST_BE_KDC WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090339)
174#define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033A)
175#define SEC_E_TOO_MANY_PRINCIPALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033B)
176#define SEC_E_NO_PA_DATA WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033C)
177#define SEC_E_PKINIT_NAME_MISMATCH WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033D)
178#define SEC_E_SMARTCARD_LOGON_REQUIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033E)
179#define SEC_E_SHUTDOWN_IN_PROGRESS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033F)
180#define SEC_E_KDC_INVALID_REQUEST WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090340)
181#define SEC_E_KDC_UNABLE_TO_REFER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090341)
182#define SEC_E_KDC_UNKNOWN_ETYPE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090342)
183#define SEC_E_UNSUPPORTED_PREAUTH WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090343)
184#define SEC_E_DELEGATION_REQUIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090345)
185#define SEC_E_BAD_BINDINGS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090346)
186#define SEC_E_MULTIPLE_ACCOUNTS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090347)
187#define SEC_E_NO_KERB_KEY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090348)
188#define SEC_E_CERT_WRONG_USAGE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090349)
189#define SEC_E_DOWNGRADE_DETECTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090350)
190#define SEC_E_SMARTCARD_CERT_REVOKED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090351)
191#define SEC_E_ISSUING_CA_UNTRUSTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090352)
192#define SEC_E_REVOCATION_OFFLINE_C WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090353)
193#define SEC_E_PKINIT_CLIENT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090354)
194#define SEC_E_SMARTCARD_CERT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090355)
195#define SEC_E_NO_S4U_PROT_SUPPORT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090356)
196#define SEC_E_CROSSREALM_DELEGATION_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090357)
197#define SEC_E_REVOCATION_OFFLINE_KDC WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090358)
198#define SEC_E_ISSUING_CA_UNTRUSTED_KDC WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090359)
199#define SEC_E_KDC_CERT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035A)
200#define SEC_E_KDC_CERT_REVOKED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035B)
201#define SEC_E_INVALID_PARAMETER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035D)
202#define SEC_E_DELEGATION_POLICY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035E)
203#define SEC_E_POLICY_NLTM_ONLY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035F)
204#define SEC_E_NO_CONTEXT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090361)
205#define SEC_E_PKU2U_CERT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090362)
206#define SEC_E_MUTUAL_AUTH_FAILED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090363)
208#define SEC_I_CONTINUE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090312)
209#define SEC_I_COMPLETE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090313)
210#define SEC_I_COMPLETE_AND_CONTINUE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090314)
211#define SEC_I_LOCAL_LOGON WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090315)
212#define SEC_I_CONTEXT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090317)
213#define SEC_I_INCOMPLETE_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090320)
214#define SEC_I_RENEGOTIATE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090321)
215#define SEC_I_NO_LSA_CONTEXT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090323)
216#define SEC_I_SIGNATURE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x0009035C)
217#define SEC_I_NO_RENEGOTIATION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090360)
222#ifndef SEC_E_INVALID_PARAMETER
223#define SEC_E_INVALID_PARAMETER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035D)
226#ifndef SEC_E_DELEGATION_POLICY
227#define SEC_E_DELEGATION_POLICY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035E)
230#ifndef SEC_E_POLICY_NLTM_ONLY
231#define SEC_E_POLICY_NLTM_ONLY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035F)
234#ifndef SEC_E_NO_CONTEXT
235#define SEC_E_NO_CONTEXT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090361)
238#ifndef SEC_E_PKU2U_CERT_FAILURE
239#define SEC_E_PKU2U_CERT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090362)
242#ifndef SEC_E_MUTUAL_AUTH_FAILED
243#define SEC_E_MUTUAL_AUTH_FAILED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090363)
246#ifndef SEC_I_SIGNATURE_NEEDED
247#define SEC_I_SIGNATURE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x0009035C)
250#ifndef SEC_I_NO_RENEGOTIATION
251#define SEC_I_NO_RENEGOTIATION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090360)
256#define SECURITY_NATIVE_DREP 0x00000010
257#define SECURITY_NETWORK_DREP 0x00000000
259#define SECPKG_CRED_INBOUND 0x00000001
260#define SECPKG_CRED_OUTBOUND 0x00000002
261#define SECPKG_CRED_BOTH 0x00000003
262#define SECPKG_CRED_AUTOLOGON_RESTRICTED 0x00000010
263#define SECPKG_CRED_PROCESS_POLICY_ONLY 0x00000020
267#define SECPKG_ATTR_SIZES 0
268#define SECPKG_ATTR_NAMES 1
269#define SECPKG_ATTR_LIFESPAN 2
270#define SECPKG_ATTR_DCE_INFO 3
271#define SECPKG_ATTR_STREAM_SIZES 4
272#define SECPKG_ATTR_KEY_INFO 5
273#define SECPKG_ATTR_AUTHORITY 6
274#define SECPKG_ATTR_PROTO_INFO 7
275#define SECPKG_ATTR_PASSWORD_EXPIRY 8
276#define SECPKG_ATTR_SESSION_KEY 9
277#define SECPKG_ATTR_PACKAGE_INFO 10
278#define SECPKG_ATTR_USER_FLAGS 11
279#define SECPKG_ATTR_NEGOTIATION_INFO 12
280#define SECPKG_ATTR_NATIVE_NAMES 13
281#define SECPKG_ATTR_FLAGS 14
282#define SECPKG_ATTR_USE_VALIDATED 15
283#define SECPKG_ATTR_CREDENTIAL_NAME 16
284#define SECPKG_ATTR_TARGET_INFORMATION 17
285#define SECPKG_ATTR_ACCESS_TOKEN 18
286#define SECPKG_ATTR_TARGET 19
287#define SECPKG_ATTR_AUTHENTICATION_ID 20
288#define SECPKG_ATTR_LOGOFF_TIME 21
289#define SECPKG_ATTR_NEGO_KEYS 22
290#define SECPKG_ATTR_PROMPTING_NEEDED 24
291#define SECPKG_ATTR_UNIQUE_BINDINGS 25
292#define SECPKG_ATTR_ENDPOINT_BINDINGS 26
293#define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET 27
294#define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30
295#define SECPKG_ATTR_NEGO_PKG_INFO 31
296#define SECPKG_ATTR_NEGO_STATUS 32
297#define SECPKG_ATTR_CONTEXT_DELETED 33
299#if !defined(_WIN32) || defined(_UWP)
315 char* sAuthorityName;
323typedef UINT32 ALG_ID;
329 UINT32 dwCipherStrength;
331 UINT32 dwHashStrength;
333 UINT32 dwExchStrength;
338 UINT32 AuthBufferLen;
350 UINT32 dwInitiatorAddrType;
351 UINT32 cbInitiatorLength;
352 UINT32 dwInitiatorOffset;
353 UINT32 dwAcceptorAddrType;
354 UINT32 cbAcceptorLength;
355 UINT32 dwAcceptorOffset;
356 UINT32 cbApplicationDataLength;
357 UINT32 dwApplicationDataOffset;
373 char* sSignatureAlgorithmName;
374 char* sEncryptAlgorithmName;
376 UINT32 SignatureAlgorithm;
377 UINT32 EncryptAlgorithm;
400 UINT32 NegotiationState;
406 UINT32 NegotiationState;
410#define SecPkgContext_NegotiationInfo SecPkgContext_NegotiationInfoW
412#define SecPkgContext_NegotiationInfo SecPkgContext_NegotiationInfoA
426#define SecPkgContext_PackageInfo SecPkgContext_PackageInfoW
428#define SecPkgContext_PackageInfo SecPkgContext_PackageInfoA
438 UINT32 SessionKeyLength;
446 BYTE rgbSessionId[32];
452 UINT32 cbMaxSignature;
454 UINT32 cbSecurityTrailer;
461 UINT32 cbMaximumMessage;
473 UINT16 cSignatureAndHashAlgorithms;
474 UINT16* pSignatureAndHashAlgorithms;
479 UINT32 MarshalledTargetInfoLength;
480 BYTE* MarshalledTargetInfo;
485#define SECPKG_CRED_ATTR_NAMES 1
486#define SECPKG_CRED_ATTR_SSI_PROVIDER 2
487#define SECPKG_CRED_ATTR_CERT 4
488#define SECPKG_CRED_ATTR_PAC_BYPASS 5
498 SEC_WCHAR* sUserName;
503#define SecPkgCredentials_Names SecPkgCredentials_NamesW
504#define PSecPkgCredentials_Names PSecPkgCredentials_NamesW
506#define SecPkgCredentials_Names SecPkgCredentials_NamesA
507#define PSecPkgCredentials_Names PSecPkgCredentials_NamesA
512 SEC_WCHAR* sProviderName;
513 unsigned long ProviderInfoLength;
519 SEC_CHAR* sProviderName;
520 unsigned long ProviderInfoLength;
525#define SecPkgCredentials_SSIProvider SecPkgCredentials_SSIProviderW
526#define PSecPkgCredentials_SSIProvider PSecPkgCredentials_SSIProviderW
528#define SecPkgCredentials_SSIProvider SecPkgCredentials_SSIProviderA
529#define PSecPkgCredentials_SSIProvider PSecPkgCredentials_SSIProviderA
534 unsigned long EncodedCertSize;
535 unsigned char* EncodedCert;
540#if !defined(_WIN32) || defined(_UWP) || (defined(__MINGW32__) && (__MINGW64_VERSION_MAJOR <= 8))
542#define SECPKG_CRED_ATTR_KDC_PROXY_SETTINGS 3
544#define KDC_PROXY_SETTINGS_V1 1
545#define KDC_PROXY_SETTINGS_FLAGS_FORCEPROXY 0x1
551 USHORT ProxyServerOffset;
552 USHORT ProxyServerLength;
553 USHORT ClientTlsCredOffset;
554 USHORT ClientTlsCredLength;
561 USHORT ProxyServerOffset;
562 USHORT ProxyServerLength;
563 USHORT ClientTlsCredOffset;
564 USHORT ClientTlsCredLength;
568#define SecPkgCredentials_KdcProxySettings SecPkgCredentials_KdcProxySettingsW
569#define PSecPkgCredentials_KdcProxySettings PSecPkgCredentials_KdcProxySettingsW
571#define SecPkgCredentials_KdcProxySettings SecPkgCredentials_KdcProxySettingsA
572#define PSecPkgCredentials_KdcProxySettings SecPkgCredentials_KdcProxySettingsA
577 UINT32 BindingsLength;
584#define ISC_REQ_DELEGATE 0x00000001
585#define ISC_REQ_MUTUAL_AUTH 0x00000002
586#define ISC_REQ_REPLAY_DETECT 0x00000004
587#define ISC_REQ_SEQUENCE_DETECT 0x00000008
588#define ISC_REQ_CONFIDENTIALITY 0x00000010
589#define ISC_REQ_USE_SESSION_KEY 0x00000020
590#define ISC_REQ_PROMPT_FOR_CREDS 0x00000040
591#define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080
592#define ISC_REQ_ALLOCATE_MEMORY 0x00000100
593#define ISC_REQ_USE_DCE_STYLE 0x00000200
594#define ISC_REQ_DATAGRAM 0x00000400
595#define ISC_REQ_CONNECTION 0x00000800
596#define ISC_REQ_CALL_LEVEL 0x00001000
597#define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000
598#define ISC_REQ_EXTENDED_ERROR 0x00004000
599#define ISC_REQ_STREAM 0x00008000
600#define ISC_REQ_INTEGRITY 0x00010000
601#define ISC_REQ_IDENTIFY 0x00020000
602#define ISC_REQ_NULL_SESSION 0x00040000
603#define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000
604#define ISC_REQ_RESERVED1 0x00100000
605#define ISC_REQ_FRAGMENT_TO_FIT 0x00200000
606#define ISC_REQ_FORWARD_CREDENTIALS 0x00400000
607#define ISC_REQ_NO_INTEGRITY 0x00800000
608#define ISC_REQ_USE_HTTP_STYLE 0x01000000
610#define ISC_RET_DELEGATE 0x00000001
611#define ISC_RET_MUTUAL_AUTH 0x00000002
612#define ISC_RET_REPLAY_DETECT 0x00000004
613#define ISC_RET_SEQUENCE_DETECT 0x00000008
614#define ISC_RET_CONFIDENTIALITY 0x00000010
615#define ISC_RET_USE_SESSION_KEY 0x00000020
616#define ISC_RET_USED_COLLECTED_CREDS 0x00000040
617#define ISC_RET_USED_SUPPLIED_CREDS 0x00000080
618#define ISC_RET_ALLOCATED_MEMORY 0x00000100
619#define ISC_RET_USED_DCE_STYLE 0x00000200
620#define ISC_RET_DATAGRAM 0x00000400
621#define ISC_RET_CONNECTION 0x00000800
622#define ISC_RET_INTERMEDIATE_RETURN 0x00001000
623#define ISC_RET_CALL_LEVEL 0x00002000
624#define ISC_RET_EXTENDED_ERROR 0x00004000
625#define ISC_RET_STREAM 0x00008000
626#define ISC_RET_INTEGRITY 0x00010000
627#define ISC_RET_IDENTIFY 0x00020000
628#define ISC_RET_NULL_SESSION 0x00040000
629#define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000
630#define ISC_RET_RESERVED1 0x00100000
631#define ISC_RET_FRAGMENT_ONLY 0x00200000
632#define ISC_RET_FORWARD_CREDENTIALS 0x00400000
633#define ISC_RET_USED_HTTP_STYLE 0x01000000
637#define ASC_REQ_DELEGATE 0x00000001
638#define ASC_REQ_MUTUAL_AUTH 0x00000002
639#define ASC_REQ_REPLAY_DETECT 0x00000004
640#define ASC_REQ_SEQUENCE_DETECT 0x00000008
641#define ASC_REQ_CONFIDENTIALITY 0x00000010
642#define ASC_REQ_USE_SESSION_KEY 0x00000020
643#define ASC_REQ_ALLOCATE_MEMORY 0x00000100
644#define ASC_REQ_USE_DCE_STYLE 0x00000200
645#define ASC_REQ_DATAGRAM 0x00000400
646#define ASC_REQ_CONNECTION 0x00000800
647#define ASC_REQ_CALL_LEVEL 0x00001000
648#define ASC_REQ_EXTENDED_ERROR 0x00008000
649#define ASC_REQ_STREAM 0x00010000
650#define ASC_REQ_INTEGRITY 0x00020000
651#define ASC_REQ_LICENSING 0x00040000
652#define ASC_REQ_IDENTIFY 0x00080000
653#define ASC_REQ_ALLOW_NULL_SESSION 0x00100000
654#define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000
655#define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000
656#define ASC_REQ_FRAGMENT_TO_FIT 0x00800000
657#define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000
658#define ASC_REQ_NO_TOKEN 0x01000000
659#define ASC_REQ_PROXY_BINDINGS 0x04000000
660#define ASC_REQ_ALLOW_MISSING_BINDINGS 0x10000000
662#define ASC_RET_DELEGATE 0x00000001
663#define ASC_RET_MUTUAL_AUTH 0x00000002
664#define ASC_RET_REPLAY_DETECT 0x00000004
665#define ASC_RET_SEQUENCE_DETECT 0x00000008
666#define ASC_RET_CONFIDENTIALITY 0x00000010
667#define ASC_RET_USE_SESSION_KEY 0x00000020
668#define ASC_RET_ALLOCATED_MEMORY 0x00000100
669#define ASC_RET_USED_DCE_STYLE 0x00000200
670#define ASC_RET_DATAGRAM 0x00000400
671#define ASC_RET_CONNECTION 0x00000800
672#define ASC_RET_CALL_LEVEL 0x00002000
673#define ASC_RET_THIRD_LEG_FAILED 0x00004000
674#define ASC_RET_EXTENDED_ERROR 0x00008000
675#define ASC_RET_STREAM 0x00010000
676#define ASC_RET_INTEGRITY 0x00020000
677#define ASC_RET_LICENSING 0x00040000
678#define ASC_RET_IDENTIFY 0x00080000
679#define ASC_RET_NULL_SESSION 0x00100000
680#define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000
681#define ASC_RET_FRAGMENT_ONLY 0x00800000
682#define ASC_RET_NO_TOKEN 0x01000000
683#define ASC_RET_NO_PROXY_BINDINGS 0x04000000
684#define ASC_RET_MISSING_BINDINGS 0x10000000
686#define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1
687#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
688#define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x4
689#define SEC_WINNT_AUTH_IDENTITY_ONLY 0x8
690#define SEC_WINNT_AUTH_IDENTITY_EXTENDED 0x100
692#define SEC_WINPR_AUTH_IDENTITY_PASSWORD_HASH 0x00800000
694#if !defined(_WIN32) || defined(_UWP) || defined(__MINGW32__)
696WINPR_PRAGMA_DIAG_PUSH
697WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO
699#ifndef _AUTH_IDENTITY_DEFINED
701#define _AUTH_IDENTITY_DEFINED
710 ULONG PasswordLength;
721 ULONG PasswordLength;
728#define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W
729#define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W
731#define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W
732#define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W
737#ifndef SEC_WINNT_AUTH_IDENTITY_VERSION
738#define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200
749 UINT32 PasswordLength;
752 UINT32 PackageListLength;
764 UINT32 PasswordLength;
767 UINT32 PackageListLength;
771#define SEC_WINNT_AUTH_IDENTITY_EX SEC_WINNT_AUTH_IDENTITY_EXW
772#define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXW
774#define SEC_WINNT_AUTH_IDENTITY_EX SEC_WINNT_AUTH_IDENTITY_EXA
775#define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXA
780#ifndef SEC_WINNT_AUTH_IDENTITY_VERSION_2
781#define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x201
786 UINT16 cbHeaderLength;
787 UINT32 cbStructureLength;
792 UINT32 PackedCredentialsOffset;
793 UINT16 PackedCredentialsLength;
795 UINT32 PackageListOffset;
796 UINT16 PackageListLength;
801#ifndef _AUTH_IDENTITY_INFO_DEFINED
803#define _AUTH_IDENTITY_INFO_DEFINED
816#define SEC_WINNT_AUTH_IDENTITY_FLAGS_PROCESS_ENCRYPTED 0x10
817#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_PROTECTED 0x20
818#define SEC_WINNT_AUTH_IDENTITY_FLAGS_USER_PROTECTED 0x40
819#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_ENCRYPTED 0x80
820#define SEC_WINNT_AUTH_IDENTITY_FLAGS_RESERVED 0x10000
821#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_USER 0x20000
822#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_DOMAIN 0x40000
823#define SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER 0x80000
825#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_USE_MASK 0xFF000000
826#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE 0x80000000
827#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_CHECKED 0x40000000
828#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_NO_CHECKBOX 0x20000000
829#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_LOAD 0x10000000
831#define SEC_WINNT_AUTH_IDENTITY_FLAGS_VALID_SSPIPFC_FLAGS \
832 (SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE | \
833 SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_CHECKED | \
834 SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_NO_CHECKBOX | \
835 SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_LOAD)
841#if !defined(__MINGW32__)
854#define SecInvalidateHandle(x) \
855 ((PSecHandle)(x))->dwLower = ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1))
857#define SecIsValidHandle(x) \
858 ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)((INT_PTR)-1))) && \
859 (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)((INT_PTR)-1))))
900typedef SECURITY_STATUS (*psSspiNtlmHashCallback)(
void* client,
901 const SEC_WINNT_AUTH_IDENTITY* authIdentity,
903 const BYTE* randkey,
const BYTE* mic,
904 const SecBuffer* micvalue, BYTE* ntlmhash);
909 WINPR_ATTR_NODISCARD psSspiNtlmHashCallback
920 char* pkinitX509Anchors;
921 char* pkinitX509Identity;
936#define SECBUFFER_VERSION 0
939#define SECBUFFER_EMPTY 0
940#define SECBUFFER_DATA 1
941#define SECBUFFER_TOKEN 2
942#define SECBUFFER_PKG_PARAMS 3
943#define SECBUFFER_MISSING 4
944#define SECBUFFER_EXTRA 5
945#define SECBUFFER_STREAM_TRAILER 6
946#define SECBUFFER_STREAM_HEADER 7
947#define SECBUFFER_NEGOTIATION_INFO 8
948#define SECBUFFER_PADDING 9
949#define SECBUFFER_STREAM 10
950#define SECBUFFER_MECHLIST 11
951#define SECBUFFER_MECHLIST_SIGNATURE 12
952#define SECBUFFER_TARGET 13
953#define SECBUFFER_CHANNEL_BINDINGS 14
954#define SECBUFFER_CHANGE_PASS_RESPONSE 15
955#define SECBUFFER_TARGET_HOST 16
956#define SECBUFFER_ALERT 17
959#define SECBUFFER_ATTRMASK 0xF0000000
960#define SECBUFFER_READONLY 0x80000000
961#define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000
962#define SECBUFFER_RESERVED 0x60000000
964#if !defined(_WIN32) || defined(_UWP)
966typedef void(SEC_ENTRY* SEC_GET_KEY_FN)(
void* Arg,
void* Principal, UINT32 KeyVer,
void** Key,
967 SECURITY_STATUS* pStatus);
969typedef SECURITY_STATUS(SEC_ENTRY* ENUMERATE_SECURITY_PACKAGES_FN_A)(ULONG* pcPackages,
971typedef SECURITY_STATUS(SEC_ENTRY* ENUMERATE_SECURITY_PACKAGES_FN_W)(ULONG* pcPackages,
975#define EnumerateSecurityPackages EnumerateSecurityPackagesW
976#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W
978#define EnumerateSecurityPackages EnumerateSecurityPackagesA
979#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_A
982typedef SECURITY_STATUS(SEC_ENTRY* QUERY_CREDENTIALS_ATTRIBUTES_FN_A)(
PCredHandle phCredential,
985typedef SECURITY_STATUS(SEC_ENTRY* QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(
PCredHandle phCredential,
990#define QueryCredentialsAttributes QueryCredentialsAttributesW
991#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W
993#define QueryCredentialsAttributes QueryCredentialsAttributesA
994#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_A
997typedef SECURITY_STATUS(SEC_ENTRY* ACQUIRE_CREDENTIALS_HANDLE_FN_A)(
998 LPSTR pszPrincipal, LPSTR pszPackage, ULONG fCredentialUse,
void* pvLogonID,
void* pAuthData,
999 SEC_GET_KEY_FN pGetKeyFn,
void* pvGetKeyArgument,
PCredHandle phCredential,
1001typedef SECURITY_STATUS(SEC_ENTRY* ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
1002 LPWSTR pszPrincipal, LPWSTR pszPackage, ULONG fCredentialUse,
void* pvLogonID,
void* pAuthData,
1003 SEC_GET_KEY_FN pGetKeyFn,
void* pvGetKeyArgument,
PCredHandle phCredential,
1007#define AcquireCredentialsHandle AcquireCredentialsHandleW
1008#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W
1010#define AcquireCredentialsHandle AcquireCredentialsHandleA
1011#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_A
1014typedef SECURITY_STATUS(SEC_ENTRY* FREE_CREDENTIALS_HANDLE_FN)(
PCredHandle phCredential);
1016typedef SECURITY_STATUS(SEC_ENTRY* INITIALIZE_SECURITY_CONTEXT_FN_A)(
1018 ULONG Reserved1, ULONG TargetDataRep,
PSecBufferDesc pInput, ULONG Reserved2,
1020typedef SECURITY_STATUS(SEC_ENTRY* INITIALIZE_SECURITY_CONTEXT_FN_W)(
1022 ULONG Reserved1, ULONG TargetDataRep,
PSecBufferDesc pInput, ULONG Reserved2,
1026#define InitializeSecurityContext InitializeSecurityContextW
1027#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W
1029#define InitializeSecurityContext InitializeSecurityContextA
1030#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_A
1033typedef SECURITY_STATUS(SEC_ENTRY* ACCEPT_SECURITY_CONTEXT_FN)(
1038typedef SECURITY_STATUS(SEC_ENTRY* COMPLETE_AUTH_TOKEN_FN)(
PCtxtHandle phContext,
1041typedef SECURITY_STATUS(SEC_ENTRY* DELETE_SECURITY_CONTEXT_FN)(
PCtxtHandle phContext);
1043typedef SECURITY_STATUS(SEC_ENTRY* APPLY_CONTROL_TOKEN_FN)(
PCtxtHandle phContext,
1046typedef SECURITY_STATUS(SEC_ENTRY* QUERY_CONTEXT_ATTRIBUTES_FN_A)(
PCtxtHandle phContext,
1047 ULONG ulAttribute,
void* pBuffer);
1048typedef SECURITY_STATUS(SEC_ENTRY* QUERY_CONTEXT_ATTRIBUTES_FN_W)(
PCtxtHandle phContext,
1049 ULONG ulAttribute,
void* pBuffer);
1052#define QueryContextAttributes QueryContextAttributesW
1053#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W
1055#define QueryContextAttributes QueryContextAttributesA
1056#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_A
1059typedef SECURITY_STATUS(SEC_ENTRY* IMPERSONATE_SECURITY_CONTEXT_FN)(
PCtxtHandle phContext);
1061typedef SECURITY_STATUS(SEC_ENTRY* REVERT_SECURITY_CONTEXT_FN)(
PCtxtHandle phContext);
1063typedef SECURITY_STATUS(SEC_ENTRY* MAKE_SIGNATURE_FN)(
PCtxtHandle phContext, ULONG fQOP,
1066typedef SECURITY_STATUS(SEC_ENTRY* VERIFY_SIGNATURE_FN)(
PCtxtHandle phContext,
1070typedef SECURITY_STATUS(SEC_ENTRY* FREE_CONTEXT_BUFFER_FN)(
void* pvContextBuffer);
1072typedef SECURITY_STATUS(SEC_ENTRY* QUERY_SECURITY_PACKAGE_INFO_FN_A)(SEC_CHAR* pszPackageName,
1074typedef SECURITY_STATUS(SEC_ENTRY* QUERY_SECURITY_PACKAGE_INFO_FN_W)(SEC_WCHAR* pszPackageName,
1078#define QuerySecurityPackageInfo QuerySecurityPackageInfoW
1079#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W
1081#define QuerySecurityPackageInfo QuerySecurityPackageInfoA
1082#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_A
1085typedef SECURITY_STATUS(SEC_ENTRY* EXPORT_SECURITY_CONTEXT_FN)(
PCtxtHandle phContext, ULONG fFlags,
1089typedef SECURITY_STATUS(SEC_ENTRY* IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR* pszPackage,
1093typedef SECURITY_STATUS(SEC_ENTRY* IMPORT_SECURITY_CONTEXT_FN_W)(SEC_WCHAR* pszPackage,
1099#define ImportSecurityContext ImportSecurityContextW
1100#define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_W
1102#define ImportSecurityContext ImportSecurityContextA
1103#define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_A
1106typedef SECURITY_STATUS(SEC_ENTRY* ADD_CREDENTIALS_FN_A)(
1107 PCredHandle hCredentials, SEC_CHAR* pszPrincipal, SEC_CHAR* pszPackage, UINT32 fCredentialUse,
1108 void* pAuthData, SEC_GET_KEY_FN pGetKeyFn,
void* pvGetKeyArgument,
PTimeStamp ptsExpiry);
1109typedef SECURITY_STATUS(SEC_ENTRY* ADD_CREDENTIALS_FN_W)(
1110 PCredHandle hCredentials, SEC_WCHAR* pszPrincipal, SEC_WCHAR* pszPackage, UINT32 fCredentialUse,
1111 void* pAuthData, SEC_GET_KEY_FN pGetKeyFn,
void* pvGetKeyArgument,
PTimeStamp ptsExpiry);
1114#define AddCredentials AddCredentialsW
1115#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_W
1117#define AddCredentials AddCredentialsA
1118#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_A
1121typedef SECURITY_STATUS(SEC_ENTRY* QUERY_SECURITY_CONTEXT_TOKEN_FN)(
PCtxtHandle phContext,
1124typedef SECURITY_STATUS(SEC_ENTRY* ENCRYPT_MESSAGE_FN)(
PCtxtHandle phContext, ULONG fQOP,
1127typedef SECURITY_STATUS(SEC_ENTRY* DECRYPT_MESSAGE_FN)(
PCtxtHandle phContext,
1131typedef SECURITY_STATUS(SEC_ENTRY* SET_CONTEXT_ATTRIBUTES_FN_A)(
PCtxtHandle phContext,
1132 ULONG ulAttribute,
void* pBuffer,
1134typedef SECURITY_STATUS(SEC_ENTRY* SET_CONTEXT_ATTRIBUTES_FN_W)(
PCtxtHandle phContext,
1135 ULONG ulAttribute,
void* pBuffer,
1139#define SetContextAttributes SetContextAttributesW
1140#define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_W
1142#define SetContextAttributes SetContextAttributesA
1143#define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_A
1146typedef SECURITY_STATUS(SEC_ENTRY* SET_CREDENTIALS_ATTRIBUTES_FN_A)(
PCredHandle phCredential,
1148 void* pBuffer, ULONG cbBuffer);
1150typedef SECURITY_STATUS(SEC_ENTRY* SET_CREDENTIALS_ATTRIBUTES_FN_W)(
PCredHandle phCredential,
1152 void* pBuffer, ULONG cbBuffer);
1155#define SetCredentialsAttributes SetCredentialsAttributesW
1156#define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_W
1158#define SetCredentialsAttributes SetCredentialsAttributesA
1159#define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_A
1162#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION \
1164#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 \
1166#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 \
1168#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 \
1174 WINPR_ATTR_NODISCARD ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA;
1175 WINPR_ATTR_NODISCARD QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;
1176 WINPR_ATTR_NODISCARD ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA;
1177 FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
1179 WINPR_ATTR_NODISCARD INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA;
1180 WINPR_ATTR_NODISCARD ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
1181 WINPR_ATTR_NODISCARD COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
1182 DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
1183 WINPR_ATTR_NODISCARD APPLY_CONTROL_TOKEN_FN ApplyControlToken;
1184 WINPR_ATTR_NODISCARD QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA;
1185 WINPR_ATTR_NODISCARD IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
1186 WINPR_ATTR_NODISCARD REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
1187 WINPR_ATTR_NODISCARD MAKE_SIGNATURE_FN MakeSignature;
1188 WINPR_ATTR_NODISCARD VERIFY_SIGNATURE_FN VerifySignature;
1189 FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
1190 WINPR_ATTR_NODISCARD QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA;
1193 WINPR_ATTR_NODISCARD EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
1194 WINPR_ATTR_NODISCARD IMPORT_SECURITY_CONTEXT_FN_A ImportSecurityContextA;
1195 WINPR_ATTR_NODISCARD ADD_CREDENTIALS_FN_A AddCredentialsA;
1197 WINPR_ATTR_NODISCARD QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
1198 WINPR_ATTR_NODISCARD ENCRYPT_MESSAGE_FN EncryptMessage;
1199 WINPR_ATTR_NODISCARD DECRYPT_MESSAGE_FN DecryptMessage;
1200 WINPR_ATTR_NODISCARD SET_CONTEXT_ATTRIBUTES_FN_A SetContextAttributesA;
1201 WINPR_ATTR_NODISCARD SET_CREDENTIALS_ATTRIBUTES_FN_A SetCredentialsAttributesA;
1208 WINPR_ATTR_NODISCARD ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
1209 WINPR_ATTR_NODISCARD QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
1210 WINPR_ATTR_NODISCARD ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
1211 FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
1213 WINPR_ATTR_NODISCARD INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
1214 WINPR_ATTR_NODISCARD ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
1215 WINPR_ATTR_NODISCARD COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
1216 DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
1217 WINPR_ATTR_NODISCARD APPLY_CONTROL_TOKEN_FN ApplyControlToken;
1218 WINPR_ATTR_NODISCARD QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
1219 WINPR_ATTR_NODISCARD IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
1220 WINPR_ATTR_NODISCARD REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
1221 WINPR_ATTR_NODISCARD MAKE_SIGNATURE_FN MakeSignature;
1222 WINPR_ATTR_NODISCARD VERIFY_SIGNATURE_FN VerifySignature;
1223 FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
1224 WINPR_ATTR_NODISCARD QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
1227 WINPR_ATTR_NODISCARD EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
1228 WINPR_ATTR_NODISCARD IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
1229 WINPR_ATTR_NODISCARD ADD_CREDENTIALS_FN_W AddCredentialsW;
1231 WINPR_ATTR_NODISCARD QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
1232 WINPR_ATTR_NODISCARD ENCRYPT_MESSAGE_FN EncryptMessage;
1233 WINPR_ATTR_NODISCARD DECRYPT_MESSAGE_FN DecryptMessage;
1234 WINPR_ATTR_NODISCARD SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
1235 WINPR_ATTR_NODISCARD SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW;
1243#define InitSecurityInterface InitSecurityInterfaceW
1244#define SecurityFunctionTable SecurityFunctionTableW
1245#define PSecurityFunctionTable PSecurityFunctionTableW
1246#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W
1248#define InitSecurityInterface InitSecurityInterfaceA
1249#define SecurityFunctionTable SecurityFunctionTableA
1250#define PSecurityFunctionTable PSecurityFunctionTableA
1251#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_A
1263 WINPR_ATTR_NODISCARD
1264 WINPR_API SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesA(ULONG* pcPackages,
1267 WINPR_ATTR_NODISCARD
1268 WINPR_API SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesW(ULONG* pcPackages,
1271 WINPR_ATTR_NODISCARD
1274 WINPR_ATTR_NODISCARD
1277 WINPR_ATTR_NODISCARD
1278 WINPR_API SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoA(SEC_CHAR* pszPackageName,
1281 WINPR_ATTR_NODISCARD
1282 WINPR_API SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoW(SEC_WCHAR* pszPackageName,
1287 WINPR_ATTR_NODISCARD
1288 WINPR_API SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleA(
1289 SEC_CHAR* pszPrincipal, SEC_CHAR* pszPackage, ULONG fCredentialUse,
void* pvLogonID,
1290 void* pAuthData, SEC_GET_KEY_FN pGetKeyFn,
void* pvGetKeyArgument,
PCredHandle phCredential,
1293 WINPR_ATTR_NODISCARD
1294 WINPR_API SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleW(
1295 SEC_WCHAR* pszPrincipal, SEC_WCHAR* pszPackage, ULONG fCredentialUse,
void* pvLogonID,
1296 void* pAuthData, SEC_GET_KEY_FN pGetKeyFn,
void* pvGetKeyArgument,
PCredHandle phCredential,
1299 WINPR_ATTR_NODISCARD
1300 WINPR_API SECURITY_STATUS SEC_ENTRY ExportSecurityContext(
PCtxtHandle phContext, ULONG fFlags,
1304 WINPR_ATTR_NODISCARD
1305 WINPR_API SECURITY_STATUS SEC_ENTRY FreeCredentialsHandle(
PCredHandle phCredential);
1307 WINPR_ATTR_NODISCARD
1308 WINPR_API SECURITY_STATUS SEC_ENTRY ImportSecurityContextA(SEC_CHAR* pszPackage,
1313 WINPR_ATTR_NODISCARD
1314 WINPR_API SECURITY_STATUS SEC_ENTRY ImportSecurityContextW(SEC_WCHAR* pszPackage,
1319 WINPR_ATTR_NODISCARD
1320 WINPR_API SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesA(
PCredHandle phCredential,
1324 WINPR_ATTR_NODISCARD
1325 WINPR_API SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesW(
PCredHandle phCredential,
1331 WINPR_ATTR_NODISCARD
1332 WINPR_API SECURITY_STATUS SEC_ENTRY
1334 ULONG fContextReq, ULONG TargetDataRep,
PCtxtHandle phNewContext,
1337 WINPR_ATTR_NODISCARD
1338 WINPR_API SECURITY_STATUS SEC_ENTRY ApplyControlToken(
PCtxtHandle phContext,
1341 WINPR_ATTR_NODISCARD
1342 WINPR_API SECURITY_STATUS SEC_ENTRY CompleteAuthToken(
PCtxtHandle phContext,
1345 WINPR_ATTR_NODISCARD
1346 WINPR_API SECURITY_STATUS SEC_ENTRY DeleteSecurityContext(
PCtxtHandle phContext);
1348 WINPR_ATTR_NODISCARD
1349 WINPR_API SECURITY_STATUS SEC_ENTRY FreeContextBuffer(
void* pvContextBuffer);
1351 WINPR_ATTR_NODISCARD
1352 WINPR_API SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(
PCtxtHandle phContext);
1354 WINPR_ATTR_NODISCARD
1355 WINPR_API SECURITY_STATUS SEC_ENTRY InitializeSecurityContextA(
1357 ULONG Reserved1, ULONG TargetDataRep,
PSecBufferDesc pInput, ULONG Reserved2,
1361 WINPR_ATTR_NODISCARD
1362 WINPR_API SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW(
1364 ULONG fContextReq, ULONG Reserved1, ULONG TargetDataRep,
PSecBufferDesc pInput,
1368 WINPR_ATTR_NODISCARD
1369 WINPR_API SECURITY_STATUS SEC_ENTRY QueryContextAttributes(
PCtxtHandle phContext,
1370 ULONG ulAttribute,
void* pBuffer);
1372 WINPR_ATTR_NODISCARD
1373 WINPR_API SECURITY_STATUS SEC_ENTRY QuerySecurityContextToken(
PCtxtHandle phContext,
1376 WINPR_ATTR_NODISCARD
1377 WINPR_API SECURITY_STATUS SEC_ENTRY SetContextAttributes(
PCtxtHandle phContext,
1378 ULONG ulAttribute,
void* pBuffer,
1381 WINPR_ATTR_NODISCARD
1382 WINPR_API SECURITY_STATUS SEC_ENTRY RevertSecurityContext(
PCtxtHandle phContext);
1386 WINPR_ATTR_NODISCARD
1387 WINPR_API SECURITY_STATUS SEC_ENTRY DecryptMessage(
PCtxtHandle phContext,
1391 WINPR_ATTR_NODISCARD
1392 WINPR_API SECURITY_STATUS SEC_ENTRY EncryptMessage(
PCtxtHandle phContext, ULONG fQOP,
1395 WINPR_ATTR_NODISCARD
1396 WINPR_API SECURITY_STATUS SEC_ENTRY MakeSignature(
PCtxtHandle phContext, ULONG fQOP,
1399 WINPR_ATTR_NODISCARD
1400 WINPR_API SECURITY_STATUS SEC_ENTRY VerifySignature(
PCtxtHandle phContext,
1420#define SECPKG_ATTR_AUTH_IDENTITY 1001
1421#define SECPKG_ATTR_AUTH_PASSWORD 1002
1422#define SECPKG_ATTR_AUTH_NTLM_HASH 1003
1423#define SECPKG_ATTR_AUTH_NTLM_MESSAGE 1100
1424#define SECPKG_ATTR_AUTH_NTLM_TIMESTAMP 1101
1425#define SECPKG_ATTR_AUTH_NTLM_CLIENT_CHALLENGE 1102
1426#define SECPKG_ATTR_AUTH_NTLM_SERVER_CHALLENGE 1103
1427#define SECPKG_ATTR_AUTH_NTLM_NTPROOF_VALUE 1104
1428#define SECPKG_ATTR_AUTH_NTLM_RANDKEY 1105
1429#define SECPKG_ATTR_AUTH_NTLM_MIC 1106
1430#define SECPKG_ATTR_AUTH_NTLM_MIC_VALUE 1107
1432#define SECPKG_CRED_ATTR_TICKET_LOGON 1200
1437 char Domain[256 + 1];
1442 char Password[256 + 1];
1454 BOOL ChallengeOrResponse;
1459 BYTE ClientChallenge[8];
1464 BYTE ServerChallenge[8];
1474#define SSPI_INTERFACE_WINPR 0x00000001
1475#define SSPI_INTERFACE_NATIVE 0x00000002
1480 WINPR_API
void sspi_GlobalInit(
void);
1481 WINPR_API
void sspi_GlobalFinish(
void);
1483 WINPR_ATTR_NODISCARD
1487#define sspi_SetAuthIdentity sspi_SetAuthIdentityA
1488 WINPR_ATTR_NODISCARD
1489 WINPR_API
int sspi_SetAuthIdentityA(SEC_WINNT_AUTH_IDENTITY* identity,
const char* user,
1490 const char* domain,
const char* password);
1492 WINPR_ATTR_NODISCARD
1493 WINPR_API
int sspi_SetAuthIdentityW(SEC_WINNT_AUTH_IDENTITY* identity,
const WCHAR* user,
1494 const WCHAR* domain,
const WCHAR* password);
1496 WINPR_ATTR_NODISCARD
1497 WINPR_API
int sspi_SetAuthIdentityWithLengthW(SEC_WINNT_AUTH_IDENTITY* identity,
1498 const WCHAR* user,
size_t userLen,
1499 const WCHAR* domain,
size_t domainLen,
1500 const WCHAR* password,
size_t passwordLen);
1502 WINPR_ATTR_NODISCARD
1503 WINPR_API UINT32 sspi_GetAuthIdentityVersion(
const void* identity);
1505 WINPR_ATTR_NODISCARD
1506 WINPR_API UINT32 sspi_GetAuthIdentityFlags(
const void* identity);
1508 WINPR_ATTR_NODISCARD
1509 WINPR_API BOOL sspi_GetAuthIdentityUserDomainW(
const void* identity,
const WCHAR** pUser,
1510 UINT32* pUserLength,
const WCHAR** pDomain,
1511 UINT32* pDomainLength);
1513 WINPR_ATTR_NODISCARD
1514 WINPR_API BOOL sspi_GetAuthIdentityUserDomainA(
const void* identity,
const char** pUser,
1515 UINT32* pUserLength,
const char** pDomain,
1516 UINT32* pDomainLength);
1518 WINPR_ATTR_NODISCARD
1519 WINPR_API BOOL sspi_GetAuthIdentityPasswordW(
const void* identity,
const WCHAR** pPassword,
1520 UINT32* pPasswordLength);
1522 WINPR_ATTR_NODISCARD
1523 WINPR_API BOOL sspi_GetAuthIdentityPasswordA(
const void* identity,
const char** pPassword,
1524 UINT32* pPasswordLength);
1526 WINPR_ATTR_NODISCARD
1528 char** pUser,
char** pDomain,
char** pPassword);
1530 WINPR_ATTR_NODISCARD
1532 WCHAR** pUser, WCHAR** pDomain, WCHAR** pPassword);
1534 WINPR_ATTR_NODISCARD
1536 char** pPackageList);
1538 WINPR_ATTR_NODISCARD
1539 WINPR_API
int sspi_CopyAuthIdentity(SEC_WINNT_AUTH_IDENTITY* identity,
1542 WINPR_API
void sspi_FreeAuthIdentity(SEC_WINNT_AUTH_IDENTITY* identity);
1544 WINPR_ATTR_NODISCARD
1545 WINPR_API
const char* GetSecurityStatusString(SECURITY_STATUS status);
1547 WINPR_ATTR_NODISCARD
1550 WINPR_ATTR_NODISCARD
1554#define InitSecurityInterfaceEx InitSecurityInterfaceExW
1555#define INIT_SECURITY_INTERFACE_EX INIT_SECURITY_INTERFACE_EX_W
1557#define InitSecurityInterfaceEx InitSecurityInterfaceExA
1558#define INIT_SECURITY_INTERFACE_EX INIT_SECURITY_INTERFACE_EX_A
WINPR_ATTR_NODISCARD psSspiNtlmHashCallback hashCallback