Module jcifs

Class Type3Message

java.lang.Object
org.codelibs.jcifs.smb.ntlmssp.NtlmMessage
org.codelibs.jcifs.smb.ntlmssp.Type3Message
All Implemented Interfaces:
NtlmFlags

public class Type3Message extends NtlmMessage
Represents an NTLMSSP Type-3 message.
  • Constructor Details

    • 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 use
      type2 - The Type-2 message which this represents a response to.
      targetName - SPN of the target system, optional
      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 - the flags to use for the Type-3 message
      Throws:
      GeneralSecurityException - if a cryptographic error occurs
      CIFSException - if a CIFS protocol error occurs
    • 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 use
      type2 - The Type-2 message which this represents a response to.
      targetName - SPN of the target system, optional
      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 - the flags to use for the Type-3 message
      nonAnonymous - actually perform authentication with empty password
      Throws:
      GeneralSecurityException - if a cryptographic error occurs
      CIFSException - if a CIFS protocol error occurs
    • 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 use
      type2 - The Type-2 message which this represents a response to.
      targetName - SPN of the target system, optional
      passwordHash - 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 - the flags to use for the Type-3 message
      Throws:
      GeneralSecurityException - if a cryptographic error occurs
      CIFSException - if a CIFS protocol error occurs
    • 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 use
      type2 - The Type-2 message which this represents a response to.
      targetName - SPN of the target system, optional
      passwordHash - 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 - the flags to use for the Type-3 message
      nonAnonymous - actually perform authentication with empty password
      Throws:
      GeneralSecurityException - if a cryptographic error occurs
      CIFSException - if a CIFS protocol error occurs
    • 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 Details

    • setupMIC

      public void setupMIC(byte[] type1, byte[] type2) throws GeneralSecurityException, IOException
      Sets the MIC
      Parameters:
      type1 - the Type-1 message bytes
      type2 - the Type-2 message bytes
      Throws:
      GeneralSecurityException - if a cryptographic error occurs
      IOException - if an I/O error occurs
    • 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 use
      type2 - 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 use getMasterKey() 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 the message integrity code (MIC) for this Type-3 message.
      Returns:
      A byte[] containing the message integrity code.
    • setMic

      public void setMic(byte[] mic)
      Sets the message integrity code (MIC) for this Type-3 message.
      Parameters:
      mic - NTLM mic to set (16 bytes)
    • isMICRequired

      public boolean isMICRequired()
      Checks whether a message integrity code (MIC) should be calculated for this message.
      Returns:
      whether a MIC should be calculated
    • toByteArray

      public byte[] toByteArray() throws IOException
      Description copied from class: NtlmMessage
      Returns the raw byte representation of this message.
      Specified by:
      toByteArray in class NtlmMessage
      Returns:
      A byte[] containing the raw message material.
      Throws:
      IOException - if an error occurs during message serialization
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • 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 use
      type2 - The Type-2 message.
      password - The password.
      Returns:
      A byte[] containing the LanManager response.
      Throws:
      GeneralSecurityException - if a cryptographic error occurs
    • getLMv2Response

      public static byte[] getLMv2Response(CIFSContext tc, Type2Message type2, String domain, String user, String password, byte[] clientChallenge) throws GeneralSecurityException
      Calculates the LMv2 response for NTLM authentication.
      Parameters:
      tc - the CIFS context
      type2 - the Type-2 message containing the server challenge
      domain - the domain name
      user - the username
      password - the user's password
      clientChallenge - the client challenge bytes
      Returns:
      the calculated response
      Throws:
      GeneralSecurityException - if a cryptographic error occurs
    • getLMv2Response

      public static byte[] getLMv2Response(CIFSContext tc, Type2Message type2, String domain, String user, byte[] passwordHash, byte[] clientChallenge) throws GeneralSecurityException
      Calculates the LMv2 response using a pre-computed NT password hash.
      Parameters:
      tc - the CIFS context
      type2 - the Type-2 message containing the server challenge
      domain - the domain name
      user - the username
      passwordHash - NT password hash
      clientChallenge - the client challenge bytes
      Returns:
      the calculated response
      Throws:
      GeneralSecurityException - if a cryptographic error occurs
    • getNTLMv2Response

      public static byte[] getNTLMv2Response(CIFSContext tc, Type2Message type2, byte[] responseKeyNT, byte[] clientChallenge, byte[] clientChallengeInfo, long ts)
      Calculates the NTLMv2 response for authentication.
      Parameters:
      tc - context to use
      type2 - The Type-2 message.
      responseKeyNT - the NT response key
      clientChallenge - the client challenge bytes
      clientChallengeInfo - additional client challenge information
      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 use
      type2 - The Type-2 message.
      password - The password.
      Returns:
      A byte[] containing the NT response.
      Throws:
      GeneralSecurityException - if a cryptographic error occurs
    • 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 use
      type2 - The Type-2 message.
      passwordHash - The NT password hash.
      Returns:
      A byte[] containing the NT response.
      Throws:
      GeneralSecurityException - if a cryptographic error occurs