/**
   * Once the server sends the salt (value s in the docs), call this method to save the value
   *
   * @param salt salt from the server
   */
  public void setSalt_s(BigInteger salt) {
    fPrivateKey_x = SRPUtils.makePrivateKey(fPassword, salt);
    fRandom_a = SRPUtils.random(fConstants);
    fCommonValue_S = null;
    fEvidenceValue_M1 = null;
    fSessionKey_K = null;

    // A = g^a
    fPublicKey_A = fConstants.primitiveRoot_g.modPow(fRandom_a, fConstants.largePrime_N);
  }
  /**
   * @param constants constants to use
   * @param verifier the verifier as returned from {@link SRPFactory#makeVerifier(byte[])}
   */
  public SRPServerSession(SRPConstants constants, SRPVerifier verifier) {
    fConstants = constants;
    fVerifier = verifier;
    fRandom_b = SRPUtils.random(fConstants);
    fSRP6_u = null;
    fPublicKey_A = null;
    fCommonValue_S = null;
    fEvidenceValue_M1 = null;
    fSessionKey_K = null;

    // B = 3v + g^b
    fPublicKey_B =
        fVerifier
            .verifier_v
            .multiply(constants.srp6Multiplier_k)
            .add(fConstants.primitiveRoot_g.modPow(fRandom_b, fConstants.largePrime_N));
  }