static hi(password, salt, iterations, digestDefinition) {
    return new Promise((resolve, reject) => {
      crypto.pbkdf2(
        password,
        salt,
        iterations,
        digestDefinition.length,
        digestDefinition.type,
        (err, derivedKey) => (err ? reject(err) : resolve(derivedKey))
      )
    })
  }
Hi() is, essentially, PBKDF2 [RFC2898] with HMAC() as the
pseudorandom function (PRF) and with dkLen == output length of
HMAC() == output length of H()

@returns {Promise<Buffer>}