anchor.diff:  	end;
   challenge({#radius{id = RadiusID, authenticator = RequestAuthenticator,
   		attributes = RequestAttributes} = Request, RadiusFsm},
  -		#statedata{eap_id = EapID, session_id = SessionID,
  -		res = RES, kaut = Kaut} = StateData) ->
  +		#statedata{eap_id = EapID, session_id = SessionID, secret = Secret,
  +		identity = Identity, msk = MSK, res = RES, kaut = Kaut} = StateData) ->
   	NewStateData = StateData#statedata{request = Request,
   			radius_fsm = RadiusFsm},
   	try
  
positive.code: 	T2 = crypto:hmac(sha256, K, <<T1/binary, S/binary, P>>),
  	prf(K, S, N, P + 1, T2, [T2 | Acc]).
  
  
negative.code: 				EapMessage1 = ocs_eap_codec:eap_packet(EapPacket#eap_packet{data = Data1}),
  				case crypto:hmac(sha256, Kaut, EapMessage1, 16) of
  					MAC ->
  						Salt = crypto:rand_uniform(16#8000, 16#ffff),
  						<<MSK1, MSK2>> = MSK,
  						MsMppeRecvKey = encrypt_key(Secret, RequestAuthenticator, Salt, MSK1),
  						MsMppeSendKey = encrypt_key(Secret, RequestAuthenticator, Salt, MSK2),
  						UserName = binary_to_list(Identity),
  						Attributes = radius_attributes:new(),
  						Attr1 = radius_attributes:store(?UserName, UserName, Attributes),
  						Attr2 = radius_attributes:store(?Microsoft,
  								?MsMppeRecvKey, {Salt, MsMppeRecvKey}, Attr1),
  						Attr3 = radius_attributes:store(?Microsoft,
  								?MsMppeSendKey, {Salt, MsMppeSendKey}, Attr2),
  						EapPacket = #eap_packet{code = success, identifier = EapID},
  						send_radius_response(EapPacket, ?AccessAccept, Attr3, RadiusID,
  								RequestAuthenticator, RequestAttributes, NewStateData),
  						{stop, {shutdown, SessionID}, NewStateData};
  					_ ->
  