anchor.diff:  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().
  
positive.code:     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(),
      SessionSecret = crypto:mod_pow(AVU, ServerPrivate, get_prime()),
      crypto:hash(sha, SessionSecret).
  
  
negative.code: server_seed(V) ->
      PrivateKey = get_private_key(),
      GB = bin_to_int(crypto:mod_pow(get_generator(), PrivateKey, get_prime())),
      KV = remainder(get_k() * V, get_prime()),
      PublicKey = remainder(KV + GB, get_prime()),
      {PublicKey, PrivateKey}.
  
  %% client session key
  