public Type3Message(Type2Message type2){
  setFlags(getDefaultFlags(type2));
  setWorkstation(getDefaultWorkstation());
  String domain=getDefaultDomain();
  setDomain(domain);
  String user=getDefaultUser();
  setUser(user);
  String password=getDefaultPassword();
switch (LM_COMPATIBILITY) {
case 0:
case 1:
    setLMResponse(getLMResponse(type2,password));
  setNTResponse(getNTResponse(type2,password));
break;
case 2:
byte[] nt=getNTResponse(type2,password);
setLMResponse(nt);
setNTResponse(nt);
break;
case 3:
case 4:
case 5:
byte[] clientChallenge=new byte[8];
RANDOM.nextBytes(clientChallenge);
setLMResponse(getLMv2Response(type2,domain,user,password,clientChallenge));
break;
default :
setLMResponse(getLMResponse(type2,password));
setNTResponse(getNTResponse(type2,password));
}
}

public Type3Message ( Type2Message type2 ) { setFlags ( getDefaultFlags ( type2 ) ) ; setWorkstation ( getDefaultWorkstation ( ) ) ; String domain = getDefaultDomain ( ) ; setDomain ( domain ) ; String user = getDefaultUser ( ) ; setUser ( user ) ; String password = getDefaultPassword ( ) ; switch ( LM_COMPATIBILITY ) { case 0 : case 1 : setLMResponse ( getLMResponse ( type2 , password ) ) ; setNTResponse ( getNTResponse ( type2 , password ) ) ; break ; case 2 : byte [ ] nt = getNTResponse ( type2 , password ) ; setLMResponse ( nt ) ; setNTResponse ( nt ) ; break ; case 3 : case 4 : case 5 : byte [ ] clientChallenge = new byte [ 8 ] ; RANDOM . nextBytes ( clientChallenge ) ; setLMResponse ( getLMv2Response ( type2 , domain , user , password , clientChallenge ) ) ; break ; default : setLMResponse ( getLMResponse ( type2 , password ) ) ; setNTResponse ( getNTResponse ( type2 , password ) ) ; } }
creates a type - 3 message in response to the given type - 2 message using default values from the current environment .
