anchor.diff:  
   client_key(ClientProof, ClientSignature) ->
       list_to_binary(lists:zipwith(fun (X, Y) -> X bxor Y end,
  -				 binary_to_list(ClientProof),
  -				 binary_to_list(ClientSignature))).
  +                                 binary_to_list(ClientProof),
  +                                 binary_to_list(ClientSignature))).
   
   -spec server_signature(binary(), binary()) -> binary().
   
  
positive.code: %% External exports
  %% ejabberd doesn't implement SASLPREP, so we use the similar RESOURCEPREP instead
  -export([salted_password/3, stored_key/1, server_key/1,
  	 server_signature/2, client_signature/2, client_key/1,
  	 client_key/2]).
  
  -spec salted_password(binary(), binary(), non_neg_integer()) -> binary().
  
  
negative.code: hi(Password, Salt, IterationCount) ->
      U1 = crypto_hmac(sha, Password, <<Salt/binary, 0, 0, 0, 1>>),
      list_to_binary(lists:zipwith(fun (X, Y) -> X bxor Y end,
                                   binary_to_list(U1),
                                   binary_to_list(hi_round(Password, U1,
                                                           IterationCount - 1)))).
  
  hi_round(Password, UPrev, 1) ->
      crypto_hmac(sha, Password, UPrev);
  hi_round(Password, UPrev, IterationCount) ->
      U = crypto_hmac(sha, Password, UPrev),
      list_to_binary(lists:zipwith(fun (X, Y) -> X bxor Y end,
                                   binary_to_list(U),
                                   binary_to_list(hi_round(Password, U,
                                                           IterationCount - 1)))).
  
  -ifdef(no_crypto_hmac).
  crypto_hmac(sha, Key, Data) ->
  