anchor.diff:  	end,
   	lists:filtermap(F, Attributes).
   
  --spec codec(In :: binary() | attributes()) -> attributes() | binary().
  +-spec codec(Attributes) -> Attributes
  +	when
  +		Attributes :: binary() | attributes().
   %% @doc Encode or decode a binary RADIUS protocol attributes field.
   %%
  -codec(In) when is_binary(In) ->
  -	attributes(In, 0, new());
  -codec(In) when is_list(In) ->
  -	attributes(In, <<>>).
  -
  --spec hide(SharedSecret :: string() | binary(),
  +codec(Attributes) when is_binary(Attributes) ->
  +	attributes(Attributes, 0, new());
  +codec(Attributes) when is_list(Attributes) ->
  +	attributes(Attributes, <<>>).
  +
  +-spec hide(SharedSecret, Authenticator, Password) -> UserPassword
  +	when
  +		SharedSecret :: string() | binary(),
   		Authenticator :: [byte()] | binary(),
  -		Password :: string() | binary()) ->
  -	UserPassword :: string().
  +		Password :: string() | binary(),
  +		UserPassword :: string().
   %% @doc Hide the password in the User-Password attribute.
   %%
   hide(SharedSecret, Authenticator, Password)
  
positive.code: new() ->
  	[].
  
  -spec store(Attribute :: byte(), Value :: term(),
  	Attributes :: attributes()) -> NewAttributes :: attributes().
  %% @doc Add a new attribute to a RADIUS protocol attributes list.
  %% 	If `Attribute' exists it is overwritten with the new `Value'.
  %%
  
negative.code: 		is_list(Attributes) ->
  	Attributes ++ [{Attribute, Value}].
  
  -spec add(Vendor, Attribute, Value, Attributes) -> Attributes
  	when
  		Vendor :: byte(),
  		Attribute :: byte(),
  		Value :: term(),
  		Attributes :: attributes().
  %% @doc Add vendor specific attribute to a RADIUS protocol attributes list.
  %% 	Multiple `Attribute's are allowed.
  %%
  