anchor.diff:  %% The milenage internal functions
   %%----------------------------------------------------------------------
   
  +-spec f2345(OPc, K, RAND) -> {RES, CK, IK, AK}
  +	when
  +		OPc :: opc(),
  +		K :: k(),
  +		RAND :: rand(),
  +		RES :: res(),
  +		CK :: ck(),
  +		IK :: ik(),
  +		AK :: ak().
  +%% @doc Computes response and keys.
  +%%
  +%% 	Takes as input the derived OPc, subscriber key K and random
  +%% 	challenge RAND.  Returns response RES, confidentiality key CK,
  +%% 	integrity key IK and anonymity key AK.
  +%%
  +f2345(OPc, K, RAND) ->
  +	TEMP = temp(OPc, K, RAND),
  +	<<AK:6/binary, _:2/binary, RES:8/binary>> = out2(OPc, K, TEMP),
  +	CK = out3(OPc, K, TEMP),
  +	IK = out4(OPc, K, TEMP),
  +	{RES, CK, IK, AK}.
  +
   -spec temp(OPc, K, RAND) -> TEMP
   	when
   		OPc :: opc(),
  
positive.code: %%% @doc This module implements the MILENAGE algorithm set.
  %%%
  %%% 	Within the security architecture of the 3GPP system there are
  %%% 	seven security functions; f1, f1*, f2, f3, f4, f5 and f5* used for
  %%% 	authentication and key generation.  The operation of these functions
  %%% 	is to be specified by each operator and as such is not fully
  %%% 	standardised.  The algorithms implemented here follow the examples 
  %%% 	produced on request from 3GPP by <a href="http://portal.etsi.org/sage">
  %%% 	ETSI SAGE Task Force</a> and are based on the block cipher Rinjindael
  %%% 	now known as Advanced Encryption Standard (AES).
  
negative.code: 		SQN :: sqn(),
  		AMF :: amf(),
  		MAC_S :: mac().
  %% @doc Re-synchronisation message authentication function.
  %%
  %% 	Takes as input the derived OPc, subscriber key K, random
  %% 	challenge RAND, sequence number SQN and authentication management
  