anchor.diff:  				more = false, pwd_exch = commit, data = CommitReqBody},
   		CommitEAPData = ocs_eap_codec:eap_pwd(CommitReqHeader),
   		NewEAPID = EapID + 1,
  -		Packet = #eap_packet{code = ?Request, identifier = NewEAPID, data = CommitEAPData},
  -		EAPPacketData = ocs_eap_codec:eap_packet(Packet),
  -		AttributeList0 = radius_attributes:new(),
  -		AttributeList1 = radius_attributes:store(?EAPMessage,
  -				EAPPacketData, AttributeList0),
  -		AttributeList2 = radius_attributes:store(?MessageAuthenticator,
  -				<<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>, AttributeList1),
  -		AttrList2bin = radius_attributes:codec(AttributeList2),
  -		Response1 = #radius{code = ?AccessChallenge, id = RadiusID,
  -				authenticator = RequestAuthenticator, attributes = AttrList2bin},
  -		ResponsePacket1 = radius:codec(Response1),
  -		MessageAuthenticator = crypto:hmac(md5, Secret, ResponsePacket1),
  -		AttributeList3 = radius_attributes:store(?MessageAuthenticator,
  -				MessageAuthenticator, AttributeList1),
  -		AttributeData = radius_attributes:codec(AttributeList3),
  -		Length = size(AttributeData) + 20,
  -		ResponseAuthenticator = crypto:hash(md5,[<<?AccessChallenge, RadiusID,
  -				Length:16>>, RequestAuthenticator, AttributeData, Secret]),
  -		Response = #radius{code = ?AccessChallenge, id = RadiusID,
  -				authenticator = ResponseAuthenticator, attributes = AttributeData},
  -		ResponsePacket = radius:codec(Response),
  -		radius:response(RadiusFsm, {response, ResponsePacket}),
  +		send_radius_challenge(NewEAPID, CommitEAPData, RadiusID, RequestAuthenticator, Secret, RadiusFsm),
   		NewStateData = StateData#statedata{pwe = PWE, s_rand = S_rand, peer_id = PeerID,
   			eap_id = NewEAPID, scalar_s = ScalarS, element_s = ElementS},
   		{next_state, wait_for_commit, NewStateData, ?TIMEOUT}
  
positive.code: 	Response = #radius{code = ?AccessChallenge, id = RadiusID,
  			authenticator = ResponseAuthenticator, attributes = AttributeData},
  	ResponsePacket = radius:codec(Response),
  	radius:response(RadiusFsm, {response, ResponsePacket}).
  
  
negative.code: 			ok ->
  				Ks = ocs_eap_pwd:compute_ks(<<S_rand:256>>, PWE, ScalarP, ElementP),
  				Input = [<<Ks/binary, ElementS/binary, ScalarS/binary, ElementP/binary,
  						ScalarP/binary, 0, <<GrpDec>>, <<RandomFunc>>, <<PRF>> >>],
  				ConfirmS = ocs_eap_pwd:h(Input),
  				ConfirmBody = #eap_pwd_confirm{confirm = ConfirmS},
  				ConfirmBodyData = ocs_eap_codec:eap_pwd_confirm(ConfirmBody),
  				ConfirmHeader = #eap_pwd{type = ?PWD, length = false,
  						more = false, pwd_exch = confirm, data = ConfirmBodyData},
  				ConfirmEAPData = ocs_eap_codec:eap_pwd(ConfirmHeader),
  				NewEAPID = EapID + 1,
  				ConfirmPacket = #eap_packet{code = ?Request, identifier = NewEAPID, data = ConfirmEAPData},
  				ConfirmEAPPacketData = ocs_eap_codec:eap_packet(ConfirmPacket),
  				AttributeList0 = radius_attributes:new(),
  				AttributeList1 = radius_attributes:store(?EAPMessage,
  						ConfirmEAPPacketData, AttributeList0),
  				AttributeList2 = radius_attributes:store(?MessageAuthenticator,
  						<<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>, AttributeList1),
  				AttrList2bin = radius_attributes:codec(AttributeList2),
  