code: function hasher(opts, callback) {
      if (typeof opts.password !== 'string') {
        passNeeded(opts, callback);
      } else if (typeof opts.salt !== 'string') {
        saltNeeded(opts, callback);
      } else {
        opts.salt = new Buffer(opts.salt, 'base64');
        genHash(opts, callback);
      }
    }
docs: Hash a password, using a hash and the pbkd2
  crypto module.
  
  Options:
  - `password`, the password to hash.
  - `salt`, the salt to use, as a base64 string.
  
  If the `password` is left undefined, a new
  10-bytes password will be generated, and converted
  to base64.
  
  If the `salt` is left undefined, a new salt is generated.
  
  The callback will be called with the following arguments:
  - the error, if something when wrong.
  - the password.
  - the salt, encoded in base64.
  - the hash, encoded in base64.
  
  @param {Object} opts The options (optional)
  @param {Function} callback