anchor.diff:      U = bin_to_int(crypto:hash(sha, [int_to_bin(ClientPublic), int_to_bin(ServerPublic)])),
       V = get_verifier(Username, Password, Salt),
       VU = bin_to_int(crypto:mod_pow(V, U, get_prime())),
  -    AVU = (ClientPublic * VU) rem get_prime(),
  +    AVU = remainder(ClientPublic * VU, get_prime()),
       SessionSecret = crypto:mod_pow(AVU, ServerPrivate, get_prime()),
       crypto:hash(sha, SessionSecret).
   
  
positive.code: server_seed(V) ->
      PrivateKey = get_private_key(),
      GB = bin_to_int(crypto:mod_pow(get_generator(), PrivateKey, get_prime())),
      KV = (get_k() * V) rem get_prime(),
      PublicKey = (KV + GB) rem get_prime(),
      {PublicKey, PrivateKey}.
  
  %% client session key
  
negative.code: get_k() ->
      1277432915985975349439481660349303019122249719989.
  
  -spec remainder(integer(), integer()) -> integer().
  remainder(A, B) ->
      Rem = A rem B,
      if Rem < 0 -> Rem + B; Rem >= 0 -> Rem end.
  
  %% x = H(salt, H(username, :, password))
  -spec get_user_hash(binary(), binary(), binary()) -> binary().
  