var crypto = require('crypto');

module.exports = function (stringOrBuffer, opts) {
  var md5sum = crypto.createHash('md5');

  if (typeof(opts) == 'number') {
    opts = {length: opts};
  }
  opts = opts || {};

  if (opts.salt) {
    md5sum.update(opts.salt);
  }

  if (opts.saltPrefix) {
    md5sum.update(opts.saltPrefix);
  }

  md5sum.update(stringOrBuffer);

  if (opts.saltSuffix) {
    md5sum.update(opts.saltSuffix);
  }

  var digest = md5sum.digest('hex');

  if (opts.length == null) {
    return digest;
  } else {
    return digest.substr(0, opts.length);
  }

};