Ntlm PHP ActiveX Reference Documentation
Ntlm
Current Version: 11.5.0
Chilkat.Ntlm
Generate the client-to-server message that begins the NTLM exchange and
advertises supported options.
Generate the server challenge response, including target name, server
challenge, and optional target-info fields.
Generate the final client response using the username and password
without sending the password itself.
Load a received Type 3 message, extract embedded fields, recompute the
response, and compare the result with
Set or inspect 8-byte client and server challenges using encodings such
as hex, Base64, Base32, quoted-printable, URL encoding, and others.
Select NTLMv1 or NTLMv2, adjust negotiate flags when required, parse
messages for readable diagnostics, and check Generate, parse, and verify NTLM authentication messages.
Chilkat.Ntlm implements the NTLM challenge/response message
workflow. It can generate Type 1, Type 2, and Type 3 NTLM messages, parse
those messages for inspection, compare Type 3 responses on the server side,
and control key authentication inputs such as username, password, domain,
workstation, target name, client challenge, server challenge, NTLM version,
encoding mode, and negotiate flags.
Type 1 negotiate message
Type 2 challenge message
Type 3 authenticate message
Server-side verification
CompareType3.
Challenges and encoding
Version, flags, and diagnostics
LastErrorText.
GenType1 and sends the Type 1 message to the
server. The server calls GenType2 and sends the Type 2 challenge
back. The client sets UserName and Password, calls
GenType3, and sends the Type 3 message. The server calls
LoadType3, looks up the user's password, recomputes the Type 3
response, and uses CompareType3 to verify authentication.
Flags value is intended for normal use. Only modify
negotiate flags with SetFlag or by setting Flags
directly when the application has specific NTLM protocol requirements and
the meaning of the affected flags is understood.
Object Creation
Chilkat v10.0.0 or greater:
$obj = new COM("Chilkat.Ntlm");
Chilkat v9.5.0.*:
$obj = new COM("Chilkat_9_5_0.Ntlm");
Properties
ClientChallenge
Specifies the 8-byte client challenge used when generating the Type 3 authenticate message. Because this property is a string, the bytes are represented using EncodingMode. For example, when EncodingMode is hex, set this property to exactly 16 hexadecimal characters.
Setting this property is optional. If it is empty when GenType3 is called, Chilkat generates eight random bytes automatically.
DebugLogFilePath
If set to a file path, this property logs the LastErrorText of each Chilkat method or property call to the specified file. This logging helps identify the context and history of Chilkat calls leading up to any crash or hang, aiding in debugging.
Enabling the VerboseLogging property provides more detailed information. This property is mainly used for debugging rare instances where a Chilkat method call causes a hang or crash, which should generally not happen.
Possible causes of hangs include:
- A timeout property set to 0, indicating an infinite timeout.
- A hang occurring within an event callback in the application code.
- An internal bug in the Chilkat code causing the hang.
DnsComputerName
Specifies the server's DNS computer name for inclusion in the MsvAvDnsComputerName entry of the Type 2 message's TargetInfo block.
This property is optional and is used by server-side code when constructing the TargetInfo AV-pair sequence in a Type 2 challenge message.
If any of the optional target-information name properties are supplied, Chilkat requires both NetBiosComputerName and NetBiosDomainName to be set.
DnsDomainName
Specifies the server's DNS domain name for inclusion in the MsvAvDnsDomainName entry of the Type 2 message's TargetInfo block.
This property is optional and is used by server-side code when constructing the TargetInfo AV-pair sequence in a Type 2 challenge message.
If any of the optional target-information name properties are supplied, Chilkat requires both NetBiosComputerName and NetBiosDomainName to be set.
Domain
Specifies the client's domain or workgroup name. When provided, it can be included in the Type 1 negotiate message and is used as the domain component of the identity in the Type 3 authenticate message.
For a domain account, use the account's Windows domain name. For a local account, the expected value depends on the authenticating server and protocol.
Domain is separate from TargetName. Domain identifies the account's domain in the client identity, whereas TargetName is supplied by the server in the Type 2 challenge.EncodingMode
Controls the textual encoding used when Chilkat exposes binary NTLM values as strings or accepts them from strings. This includes generated and parsed NTLM message tokens and binary-valued properties such as ClientChallenge and ServerChallenge.
The mode name is case-insensitive. Supported values include base64, modBase64, base32, UU, QP, URL, hex, Q, B, url_oauth, url_rfc1738, url_rfc2396, and url_rfc3986.
Authorization or WWW-Authenticate headers are conventionally Base64 encoded. Use the same EncodingMode for both the producer and consumer of a token.Flags
Specifies the NTLM negotiate flags as a compact string in which each letter represents one bit. The flags advertise or select character encoding, target information, session security, and other protocol capabilities.
The default is ABCHMQ, which enables Unicode, OEM compatibility, target-name request, NTLM authentication, always-sign behavior, and extended session security.
| Letter | Bit value | Microsoft flag name |
|---|---|---|
A | 0x00000001 | NTLMSSP_NEGOTIATE_UNICODE |
B | 0x00000002 | NTLM_NEGOTIATE_OEM |
C | 0x00000004 | NTLMSSP_REQUEST_TARGET |
D | 0x00000010 | NTLMSSP_NEGOTIATE_SIGN |
E | 0x00000020 | NTLMSSP_NEGOTIATE_SEAL |
F | 0x00000040 | NTLMSSP_NEGOTIATE_DATAGRAM |
G | 0x00000080 | NTLMSSP_NEGOTIATE_LM_KEY |
H | 0x00000200 | NTLMSSP_NEGOTIATE_NTLM |
I | 0x00000400 | Reserved / unused |
J | 0x00000800 | NTLMSSP_NEGOTIATE_ANONYMOUS |
K | 0x00001000 | NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED |
L | 0x00002000 | NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED |
M | 0x00008000 | NTLMSSP_NEGOTIATE_ALWAYS_SIGN |
N | 0x00010000 | NTLMSSP_TARGET_TYPE_DOMAIN |
O | 0x00020000 | NTLMSSP_TARGET_TYPE_SERVER |
P | 0x00040000 | Reserved / unused |
Q | 0x00080000 | NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY |
R | 0x00100000 | NTLMSSP_NEGOTIATE_IDENTIFY |
S | 0x00400000 | NTLMSSP_REQUEST_NON_NT_SESSION_KEY |
T | 0x00800000 | NTLMSSP_NEGOTIATE_TARGET_INFO |
U | 0x02000000 | NTLMSSP_NEGOTIATE_VERSION |
V | 0x20000000 | NTLMSSP_NEGOTIATE_128 |
W | 0x40000000 | NTLMSSP_NEGOTIATE_KEY_EXCH |
X | 0x80000000 | NTLMSSP_NEGOTIATE_56 |
SetFlag when changing a single option.LastBinaryResult
This property is mainly used in SQL Server stored procedures to retrieve binary data from the last method call that returned binary data. It is only accessible if Chilkat.Global.KeepBinaryResult is set to true. This feature allows for the retrieval of large varbinary results in an SQL Server environment, which has restrictions on returning large data via method calls, though temp tables can handle binary properties.
LastErrorHtml
Provides HTML-formatted information about the last called method or property. If a method call fails or behaves unexpectedly, check this property for details. Note that information is available regardless of the method call's success.
topLastErrorText
Provides plain text information about the last called method or property. If a method call fails or behaves unexpectedly, check this property for details. Note that information is available regardless of the method call's success.
LastErrorXml
Provides XML-formatted information about the last called method or property. If a method call fails or behaves unexpectedly, check this property for details. Note that information is available regardless of the method call's success.
topLastMethodSuccess
Indicates the success or failure of the most recent method call: true means success, false means failure. This property remains unchanged by property setters or getters. This method is present to address challenges in checking for null or Nothing returns in certain programming languages. Note: This property does not apply to methods that return integer values or to boolean-returning methods where the boolean does not indicate success or failure.
LastStringResult
In SQL Server stored procedures, this property holds the string return value of the most recent method call that returns a string. It is accessible only when Chilkat.Global.KeepStringResult is set to TRUE. SQL Server has limitations on string lengths returned from methods and properties, but temp tables can be used to access large strings.
LastStringResultLen
The length, in characters, of the string contained in the LastStringResult property.
topNetBiosComputerName
Specifies the server's NetBIOS computer name for inclusion in the MsvAvNbComputerName entry of the Type 2 message's TargetInfo block.
This property is optional and is used by server-side code when constructing the TargetInfo AV-pair sequence in a Type 2 challenge message.
If any of the optional target-information name properties are supplied, Chilkat requires both NetBiosComputerName and NetBiosDomainName to be set.
NetBiosDomainName
Specifies the server's NetBIOS domain name for inclusion in the MsvAvNbDomainName entry of the Type 2 message's TargetInfo block.
This property is optional and is used by server-side code when constructing the TargetInfo AV-pair sequence in a Type 2 challenge message.
If any of the optional target-information name properties are supplied, Chilkat requires both NetBiosComputerName and NetBiosDomainName to be set.
NtlmVersion
Selects the challenge-response algorithm used to generate and verify the authentication response.
| Value | Behavior |
|---|---|
1 | Use NTLMv1. This is the default for backward compatibility. |
2 | Use NTLMv2. |
The client and server must use compatible response algorithms. This setting is not negotiated by the three NTLM messages.
2 for modern deployments. NTLMv1 is obsolete and has been removed from Windows 11 version 24H2 and Windows Server 2025. Use NTLM only where compatibility requires it; Kerberos through Negotiate is preferred in Active Directory environments.OemCodePage
Specifies the OEM code page used to encode NTLM text fields when Unicode negotiation is disabled. The default is the local computer's OEM code page.
This property applies only when flag A (NTLMSSP_NEGOTIATE_UNICODE) is clear and OEM encoding is selected. With the default flags, Unicode is used and this setting has no effect.
Password
Specifies the password for UserName. Client-side code must set it before calling GenType3. Server-side verification code sets it after LoadType3, typically after looking up the account identified by the loaded username and domain.
The password itself is not placed in the Type 3 message. It is used to derive the challenge-response proof.
ServerChallenge
Specifies the 8-byte server challenge carried in the Type 2 challenge message. Because this property is a string, the bytes are represented using EncodingMode. For example, with EncodingMode set to hex, provide exactly 16 hexadecimal characters.
Setting this property is optional. If it is empty when GenType2 is called, Chilkat generates eight random bytes automatically. Server-side verification must use the same challenge that was sent to the client.
TargetName
Specifies the server-provided authentication target placed in the Type 2 challenge message. Depending on the target-type flags, it commonly identifies a Windows domain or the server handling local-account authentication.
This is not the client account's domain; use Domain for that purpose.
UserName
Specifies the account name to authenticate. Client-side code must set it before calling GenType3. After server-side code calls LoadType3, this property contains the username extracted from the received Type 3 message.
Use Domain separately when the account belongs to a Windows domain or workgroup.
VerboseLogging
If set to true, then the contents of LastErrorText (or LastErrorXml, or LastErrorHtml) may contain more verbose information. The default value is false. Verbose logging should only be used for debugging. The potentially large quantity of logged information may adversely affect peformance.
Version
Workstation
Specifies the optional client workstation name. When supplied, Chilkat can include it in the Type 1 negotiate message and the Type 3 authenticate message. After LoadType3, it contains the workstation value reported by the client.
Methods
CompareType3
Compares two encoded Type 3 authenticate messages and returns true when their LM and NT challenge-response fields match. A server commonly passes the Type 3 message received from the client as one argument and the expected Type 3 message recomputed with GenType3 as the other.
The messages must use the encoding selected by EncodingMode. Other Type 3 metadata, such as username or workstation text, is not the basis of this comparison.
false result means the response fields do not match; inspect LastMethodSuccess and LastErrorText if malformed input or another processing error is possible.GenType1
Generates the client-to-server Type 1 Negotiate message that starts an NTLM authentication exchange. The message advertises the capabilities in Flags and can include the optional Domain and Workstation values.
The returned token is encoded according to EncodingMode. Check LastMethodSuccess before using the returned string.
Returns null on failure
GenType2
Generates the server-to-client Type 2 Challenge message from the encoded Type 1 message in type1Msg. Before calling, server-side code normally sets TargetName and may set ServerChallenge and the target-information name properties.
If ServerChallenge is empty, Chilkat generates a random 8-byte challenge. The input and returned token use EncodingMode. Check LastMethodSuccess before sending the result.
Returns null on failure
GenType3
Generates the client-to-server Type 3 Authenticate message from the encoded Type 2 message in type2Msg. Client-side code must set UserName and Password; set Domain and Workstation when required by the account and peer.
Chilkat computes the response using NtlmVersion, the server challenge and target information from Type 2, and the client challenge. If ClientChallenge is empty, Chilkat generates it automatically. The password itself is not transmitted.
The input and returned token use EncodingMode. Check LastMethodSuccess before using the returned string.
Returns null on failure
LoadType3
Parses an encoded Type 3 authenticate message received by server-side code and loads its client-supplied fields into this object. On success, UserName, Domain, Workstation, and ClientChallenge are populated from the message.
This method parses the message; it does not authenticate the client. After loading, look up the account's password, set Password, recompute the expected Type 3 response with GenType3 using the original Type 2 message, and compare the response fields with CompareType3.
Returns true for success, false for failure.
ParseType1
Parses an encoded Type 1 negotiate message and returns human-readable XML describing its fields, including negotiation flags and any supplied domain or workstation information.
The input token is decoded according to EncodingMode. The returned text is diagnostic XML intended for inspection and troubleshooting; parsing a message does not verify its authenticity. Check LastMethodSuccess before using the returned string.
Returns null on failure
ParseType2
Parses an encoded Type 2 challenge message and returns human-readable XML describing its fields, including flags, target name, server challenge, and target-information AV pairs when present.
The input token is decoded according to EncodingMode. The returned text is diagnostic XML intended for inspection and troubleshooting; parsing a message does not verify its authenticity. Check LastMethodSuccess before using the returned string.
Returns null on failure
ParseType3
Parses an encoded Type 3 authenticate message and returns human-readable XML describing its fields, including the reported username, domain, workstation, and challenge-response data.
The input token is decoded according to EncodingMode. The returned text is diagnostic XML intended for inspection and troubleshooting; parsing a message does not verify its authenticity. Check LastMethodSuccess before using the returned string.
Returns null on failure
SetFlag
Turns one Chilkat flag letter on or off in Flags. flagLetter is a single letter listed in the Flags table, and onOrOff is true to set the bit or false to clear it.
Returns true when the flag letter is accepted and the value is updated; otherwise returns false.
Returns true for success, false for failure.
top