Package jcifs.ntlmssp
Class Type3Message
- java.lang.Object
-
- jcifs.ntlmssp.NtlmMessage
-
- jcifs.ntlmssp.Type3Message
-
- All Implemented Interfaces:
NtlmFlags
public class Type3Message extends NtlmMessage
Represents an NTLMSSP Type-3 message.
-
-
Field Summary
-
Fields inherited from class jcifs.ntlmssp.NtlmMessage
NTLMSSP_SIGNATURE, NTLMSSP_TYPE1, NTLMSSP_TYPE2, NTLMSSP_TYPE3, NTLMSSP_VERSION, UNI_ENCODING
-
Fields inherited from interface jcifs.ntlmssp.NtlmFlags
NTLMSSP_NEGOTIATE_128, NTLMSSP_NEGOTIATE_56, NTLMSSP_NEGOTIATE_ALWAYS_SIGN, NTLMSSP_NEGOTIATE_ANONYMOUS, NTLMSSP_NEGOTIATE_DATAGRAM_STYLE, NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY, NTLMSSP_NEGOTIATE_KEY_EXCH, NTLMSSP_NEGOTIATE_LM_KEY, NTLMSSP_NEGOTIATE_LOCAL_CALL, NTLMSSP_NEGOTIATE_NETWARE, NTLMSSP_NEGOTIATE_NTLM, NTLMSSP_NEGOTIATE_OEM, NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED, NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED, NTLMSSP_NEGOTIATE_SEAL, NTLMSSP_NEGOTIATE_SIGN, NTLMSSP_NEGOTIATE_TARGET_INFO, NTLMSSP_NEGOTIATE_UNICODE, NTLMSSP_NEGOTIATE_VERSION, NTLMSSP_REQUEST_ACCEPT_RESPONSE, NTLMSSP_REQUEST_INIT_RESPONSE, NTLMSSP_REQUEST_NON_NT_SESSION_KEY, NTLMSSP_REQUEST_TARGET, NTLMSSP_TARGET_TYPE_DOMAIN, NTLMSSP_TARGET_TYPE_SERVER, NTLMSSP_TARGET_TYPE_SHARE
-
-
Constructor Summary
Constructors Constructor Description Type3Message(byte[] material)
Creates a Type-3 message using the given raw Type-3 material.Type3Message(int flags, byte[] lmResponse, byte[] ntResponse, String domain, String user, String workstation)
Creates a Type-3 message with the specified parameters.Type3Message(CIFSContext tc)
Creates a Type-3 message using default values from the current environment.Type3Message(CIFSContext tc, Type2Message type2, String targetName, byte[] passwordHash, String domain, String user, String workstation, int flags)
Creates a Type-3 message in response to the given Type-2 message.Type3Message(CIFSContext tc, Type2Message type2, String targetName, byte[] passwordHash, String password, String domain, String user, String workstation, int flags, boolean nonAnonymous)
Creates a Type-3 message in response to the given Type-2 message.Type3Message(CIFSContext tc, Type2Message type2, String targetName, String password, String domain, String user, String workstation, int flags)
Creates a Type-3 message in response to the given Type-2 message.Type3Message(CIFSContext tc, Type2Message type2, String targetName, String password, String domain, String user, String workstation, int flags, boolean nonAnonymous)
Creates a Type-3 message in response to the given Type-2 message.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static int
getDefaultFlags(CIFSContext tc)
Returns the default flags for a generic Type-3 message in the current environment.static int
getDefaultFlags(CIFSContext tc, Type2Message type2)
Returns the default flags for a Type-3 message created in response to the given Type-2 message in the current environment.String
getDomain()
Returns the domain in which the user has an account.byte[]
getEncryptedSessionKey()
Returns the session key.byte[]
getLMResponse()
Returns the LanManager/LMv2 response.static byte[]
getLMResponse(CIFSContext tc, Type2Message type2, String password)
Constructs the LanManager response to the given Type-2 message using the supplied password.static byte[]
getLMv2Response(CIFSContext tc, Type2Message type2, String domain, String user, byte[] passwordHash, byte[] clientChallenge)
static byte[]
getLMv2Response(CIFSContext tc, Type2Message type2, String domain, String user, String password, byte[] clientChallenge)
byte[]
getMasterKey()
The real session key if the regular session key is actually the encrypted version used for key exchange.byte[]
getMic()
static byte[]
getNTLMv2Response(CIFSContext tc, Type2Message type2, byte[] responseKeyNT, byte[] clientChallenge, byte[] clientChallengeInfo, long ts)
byte[]
getNTResponse()
Returns the NT/NTLMv2 response.static byte[]
getNTResponse(CIFSContext tc, Type2Message type2, byte[] passwordHash)
Constructs the NT response to the given Type-2 message using the supplied password.static byte[]
getNTResponse(CIFSContext tc, Type2Message type2, String password)
Constructs the NT response to the given Type-2 message using the supplied password.String
getUser()
Returns the username for the authenticating user.String
getWorkstation()
Returns the workstation from which authentication is being performed.boolean
isMICRequired()
void
setDomain(String domain)
Sets the domain for this message.void
setEncryptedSessionKey(byte[] sessionKey)
Sets the session key.void
setLMResponse(byte[] lmResponse)
Sets the LanManager/LMv2 response for this message.void
setMic(byte[] mic)
void
setNTResponse(byte[] ntResponse)
Sets the NT/NTLMv2 response for this message.void
setupMIC(byte[] type1, byte[] type2)
Sets the MICvoid
setUser(String user)
Sets the user for this message.void
setWorkstation(String workstation)
Sets the workstation for this message.byte[]
toByteArray()
Returns the raw byte representation of this message.String
toString()
-
Methods inherited from class jcifs.ntlmssp.NtlmMessage
getFlag, getFlags, setFlag, setFlags
-
-
-
-
Constructor Detail
-
Type3Message
public Type3Message(CIFSContext tc)
Creates a Type-3 message using default values from the current environment.- Parameters:
tc
- context to use
-
Type3Message
public Type3Message(CIFSContext tc, Type2Message type2, String targetName, String password, String domain, String user, String workstation, int flags) throws GeneralSecurityException, CIFSException
Creates a Type-3 message in response to the given Type-2 message.- Parameters:
tc
- context to usetype2
- The Type-2 message which this represents a response to.targetName
- SPN of the target system, optionalpassword
- The password to use when constructing the response.domain
- The domain in which the user has an account.user
- The username for the authenticating user.workstation
- The workstation from which authentication is taking place.flags
-- Throws:
GeneralSecurityException
CIFSException
-
Type3Message
public Type3Message(CIFSContext tc, Type2Message type2, String targetName, String password, String domain, String user, String workstation, int flags, boolean nonAnonymous) throws GeneralSecurityException, CIFSException
Creates a Type-3 message in response to the given Type-2 message.- Parameters:
tc
- context to usetype2
- The Type-2 message which this represents a response to.targetName
- SPN of the target system, optionalpassword
- The password to use when constructing the response.domain
- The domain in which the user has an account.user
- The username for the authenticating user.workstation
- The workstation from which authentication is taking place.flags
-nonAnonymous
- actually perform authentication with empty password- Throws:
GeneralSecurityException
CIFSException
-
Type3Message
public Type3Message(CIFSContext tc, Type2Message type2, String targetName, byte[] passwordHash, String domain, String user, String workstation, int flags) throws CIFSException, GeneralSecurityException
Creates a Type-3 message in response to the given Type-2 message.- Parameters:
tc
- context to usetype2
- The Type-2 message which this represents a response to.targetName
- SPN of the target system, optionalpasswordHash
- The NT password hash to use when constructing the response.domain
- The domain in which the user has an account.user
- The username for the authenticating user.workstation
- The workstation from which authentication is taking place.flags
-- Throws:
GeneralSecurityException
CIFSException
-
Type3Message
public Type3Message(CIFSContext tc, Type2Message type2, String targetName, byte[] passwordHash, String password, String domain, String user, String workstation, int flags, boolean nonAnonymous) throws GeneralSecurityException, CIFSException
Creates a Type-3 message in response to the given Type-2 message.- Parameters:
tc
- context to usetype2
- The Type-2 message which this represents a response to.targetName
- SPN of the target system, optionalpasswordHash
- The NT password hash, takes precedence over password (which is no longer required unless legacy LM authentication is needed)password
- The password to use when constructing the response.domain
- The domain in which the user has an account.user
- The username for the authenticating user.workstation
- The workstation from which authentication is taking place.flags
-nonAnonymous
- actually perform authentication with empty password- Throws:
GeneralSecurityException
CIFSException
-
Type3Message
public Type3Message(int flags, byte[] lmResponse, byte[] ntResponse, String domain, String user, String workstation)
Creates a Type-3 message with the specified parameters.- Parameters:
flags
- The flags to apply to this message.lmResponse
- The LanManager/LMv2 response.ntResponse
- The NT/NTLMv2 response.domain
- The domain in which the user has an account.user
- The username for the authenticating user.workstation
- The workstation from which authentication is taking place.
-
Type3Message
public Type3Message(byte[] material) throws IOException
Creates a Type-3 message using the given raw Type-3 material.- Parameters:
material
- The raw Type-3 material used to construct this message.- Throws:
IOException
- If an error occurs while parsing the material.
-
-
Method Detail
-
setupMIC
public void setupMIC(byte[] type1, byte[] type2) throws GeneralSecurityException, IOException
Sets the MIC- Parameters:
type1
-type2
-- Throws:
GeneralSecurityException
IOException
-
getDefaultFlags
public static int getDefaultFlags(CIFSContext tc)
Returns the default flags for a generic Type-3 message in the current environment.- Parameters:
tc
- context to use- Returns:
- An
int
containing the default flags.
-
getDefaultFlags
public static int getDefaultFlags(CIFSContext tc, Type2Message type2)
Returns the default flags for a Type-3 message created in response to the given Type-2 message in the current environment.- Parameters:
tc
- context to usetype2
- The Type-2 message.- Returns:
- An
int
containing the default flags.
-
getLMResponse
public byte[] getLMResponse()
Returns the LanManager/LMv2 response.- Returns:
- A
byte[]
containing the LanManager response.
-
setLMResponse
public void setLMResponse(byte[] lmResponse)
Sets the LanManager/LMv2 response for this message.- Parameters:
lmResponse
- The LanManager response.
-
getNTResponse
public byte[] getNTResponse()
Returns the NT/NTLMv2 response.- Returns:
- A
byte[]
containing the NT/NTLMv2 response.
-
setNTResponse
public void setNTResponse(byte[] ntResponse)
Sets the NT/NTLMv2 response for this message.- Parameters:
ntResponse
- The NT/NTLMv2 response.
-
getDomain
public String getDomain()
Returns the domain in which the user has an account.- Returns:
- A
String
containing the domain for the user.
-
setDomain
public void setDomain(String domain)
Sets the domain for this message.- Parameters:
domain
- The domain.
-
getUser
public String getUser()
Returns the username for the authenticating user.- Returns:
- A
String
containing the user for this message.
-
setUser
public void setUser(String user)
Sets the user for this message.- Parameters:
user
- The user.
-
getWorkstation
public String getWorkstation()
Returns the workstation from which authentication is being performed.- Returns:
- A
String
containing the workstation.
-
setWorkstation
public void setWorkstation(String workstation)
Sets the workstation for this message.- Parameters:
workstation
- The workstation.
-
getMasterKey
public byte[] getMasterKey()
The real session key if the regular session key is actually the encrypted version used for key exchange.- Returns:
- A
byte[]
containing the session key.
-
getEncryptedSessionKey
public byte[] getEncryptedSessionKey()
Returns the session key. This is the encrypted session key included in the message, if the actual session key is desired usegetMasterKey()
instead.- Returns:
- A
byte[]
containing the encrypted session key.
-
setEncryptedSessionKey
public void setEncryptedSessionKey(byte[] sessionKey)
Sets the session key.- Parameters:
sessionKey
- The session key.
-
getMic
public byte[] getMic()
- Returns:
- A
byte[]
containing the message integrity code.
-
setMic
public void setMic(byte[] mic)
- Parameters:
mic
- NTLM mic to set (16 bytes)
-
isMICRequired
public boolean isMICRequired()
- Returns:
- whether a MIC should be calulated
-
toByteArray
public byte[] toByteArray() throws IOException
Description copied from class:NtlmMessage
Returns the raw byte representation of this message.- Specified by:
toByteArray
in classNtlmMessage
- Returns:
- A
byte[]
containing the raw message material. - Throws:
IOException
-
getLMResponse
public static byte[] getLMResponse(CIFSContext tc, Type2Message type2, String password) throws GeneralSecurityException
Constructs the LanManager response to the given Type-2 message using the supplied password.- Parameters:
tc
- context to usetype2
- The Type-2 message.password
- The password.- Returns:
- A
byte[]
containing the LanManager response. - Throws:
GeneralSecurityException
-
getLMv2Response
public static byte[] getLMv2Response(CIFSContext tc, Type2Message type2, String domain, String user, String password, byte[] clientChallenge) throws GeneralSecurityException
- Parameters:
tc
-type2
-domain
-user
-password
-clientChallenge
-- Returns:
- the calculated response
- Throws:
GeneralSecurityException
-
getLMv2Response
public static byte[] getLMv2Response(CIFSContext tc, Type2Message type2, String domain, String user, byte[] passwordHash, byte[] clientChallenge) throws GeneralSecurityException
- Parameters:
tc
-type2
-domain
-user
-passwordHash
- NT password hashclientChallenge
-- Returns:
- the calculated response
- Throws:
GeneralSecurityException
-
getNTLMv2Response
public static byte[] getNTLMv2Response(CIFSContext tc, Type2Message type2, byte[] responseKeyNT, byte[] clientChallenge, byte[] clientChallengeInfo, long ts)
- Parameters:
tc
- context to usetype2
- The Type-2 message.responseKeyNT
-clientChallenge
-clientChallengeInfo
-ts
- timestamp (nanos since 1601)- Returns:
- A
byte[]
containing the NTLMv2 response.
-
getNTResponse
public static byte[] getNTResponse(CIFSContext tc, Type2Message type2, String password) throws GeneralSecurityException
Constructs the NT response to the given Type-2 message using the supplied password.- Parameters:
tc
- context to usetype2
- The Type-2 message.password
- The password.- Returns:
- A
byte[]
containing the NT response. - Throws:
GeneralSecurityException
-
getNTResponse
public static byte[] getNTResponse(CIFSContext tc, Type2Message type2, byte[] passwordHash) throws GeneralSecurityException
Constructs the NT response to the given Type-2 message using the supplied password.- Parameters:
tc
- context to usetype2
- The Type-2 message.passwordHash
- The NT password hash.- Returns:
- A
byte[]
containing the NT response. - Throws:
GeneralSecurityException
-
-