code: function getx(params, salt, I, P) {
    assertIsBuffer(salt, "salt (salt)");
    assertIsBuffer(I, "identity (I)");
    assertIsBuffer(P, "password (P)");
    var hashIP = crypto.createHash(params.hash)
      .update(Buffer.concat([I, new Buffer(':'), P]))
      .digest();
    var hashX = crypto.createHash(params.hash)
      .update(salt)
      .update(hashIP)
      .digest();
    return bignum.fromBuffer(hashX);
  }
docs: /*
  compute the intermediate value x as a hash of three buffers:
  salt, identity, and password.  And a colon.  FOUR buffers.
  
  x = H(s | H(I | ":" | P))
  
  params:
  salt (buffer)    salt
  I (buffer)       user identity
  P (buffer)       user password
  
  returns: x (bignum)      user secret