{"version":3,"sources":["jsdelivr-header.js","/npm/password-hash@1.2.2/lib/password-hash.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,IAAI,OAAS,QAAQ,UAEjB,UAAY,iEACZ,eAAiB,UAAU,OAE/B,SAAS,aAAa,GACpB,GAAkB,iBAAP,GAAmB,GAAO,GAAK,IAAQ,SAAS,EAAK,IAAK,MAAM,IAAI,MAAM,uBACrF,GAAI,OAAO,YACT,OAAO,OAAO,YAAY,KAAK,KAAK,EAAM,IAAI,SAAS,OAAO,UAAU,EAAG,GAE3E,IAAK,IAAI,EAAI,EAAG,EAAO,GAAI,EAAI,EAAK,IAClC,GAAQ,UAAU,OAAO,KAAK,MAAM,KAAK,SAAW,iBAEtD,OAAO,CAEX,CAEA,SAAS,aAAa,EAAW,EAAM,EAAU,GAC/C,EAAa,GAAc,EAC3B,IAEE,IADA,IAAI,EAAO,EACH,EAAE,EAAG,EAAE,IAAc,EAC3B,EAAO,OAAO,WAAW,EAAW,GAAM,OAAO,GAAM,OAAO,OAGhE,OAAO,EAAY,IAAM,EAAO,IAAM,EAAa,IAAM,CAC3D,CAAE,MAAO,GACP,MAAM,IAAI,MAAM,mCAClB,CACF,CAEA,SAAS,uBAAuB,GAC9B,IAAI,EAAQ,EAAe,MAAM,KAMjC,OALoB,IAAjB,EAAM,SACP,EAAM,OAAO,EAAE,EAAE,GACjB,EAAiB,EAAM,KAAK,MAGvB,CACT,CAEA,OAAO,QAAQ,SAAW,SAAS,EAAU,GAC3C,GAAuB,iBAAZ,EAAsB,MAAM,IAAI,MAAM,oBACjD,IAAY,EAAU,CAAC,GACvB,EAAQ,YAAc,EAAQ,UAAY,QAC1C,EAAQ,YAAoC,GAAtB,EAAQ,aAAoB,EAAQ,WAAa,GACvE,EAAQ,aAAe,EAAQ,WAAa,GAC5C,IAAI,EAAO,aAAa,EAAQ,YAChC,OAAO,aAAa,EAAQ,UAAW,EAAM,EAAU,EAAQ,WACjE,EAEA,OAAO,QAAQ,OAAS,SAAS,EAAU,GACzC,IAAK,IAAa,EAAgB,OAAO,EAEzC,IAAI,GADJ,EAAiB,uBAAuB,IACb,MAAM,KACjC,GAAoB,GAAhB,EAAM,OAAa,OAAO,EAC9B,IACE,OAAO,aAAa,EAAM,GAAI,EAAM,GAAI,EAAU,EAAM,KAAO,CACjE,CAAE,MAAO,GAAI,CACb,OAAO,CACT,EAEA,OAAO,QAAQ,SAAW,SAAS,GACjC,QAAK,GACgC,GAA9B,EAAS,MAAM,KAAK,MAC7B","file":"/npm/password-hash@1.2.2/lib/password-hash.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/password-hash@1.2.2/lib/password-hash.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var crypto = require('crypto');\n\nvar saltChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\nvar saltCharsCount = saltChars.length;\n\nfunction generateSalt(len) {\n  if (typeof len != 'number' || len <= 0 || len !== parseInt(len, 10)) throw new Error('Invalid salt length');\n  if (crypto.randomBytes) {\n    return crypto.randomBytes(Math.ceil(len / 2)).toString('hex').substring(0, len);\n  } else {\n    for (var i = 0, salt = ''; i < len; i++) {\n      salt += saltChars.charAt(Math.floor(Math.random() * saltCharsCount));\n    }\n    return salt;\n  }\n}\n\nfunction generateHash(algorithm, salt, password, iterations) {\n  iterations = iterations || 1;\n  try {\n    var hash = password;\n    for(var i=0; i<iterations; ++i) {\n      hash = crypto.createHmac(algorithm, salt).update(hash).digest('hex');\n    }\n    \n    return algorithm + '$' + salt + '$' + iterations + '$' + hash;\n  } catch (e) {\n    throw new Error('Invalid message digest algorithm');\n  }\n}\n\nfunction makeBackwardCompatible(hashedPassword) {\n  var parts = hashedPassword.split('$');\n  if(parts.length === 3) {\n    parts.splice(2,0,1);\n    hashedPassword = parts.join(\"$\");\n  }\n  \n  return hashedPassword;\n}\n\nmodule.exports.generate = function(password, options) {\n  if (typeof password != 'string') throw new Error('Invalid password');\n  options || (options = {});\n  options.algorithm || (options.algorithm = 'sha1');\n  options.saltLength || options.saltLength == 0 || (options.saltLength = 8);\n  options.iterations || (options.iterations = 1);\n  var salt = generateSalt(options.saltLength);\n  return generateHash(options.algorithm, salt, password, options.iterations);\n};\n\nmodule.exports.verify = function(password, hashedPassword) {\n  if (!password || !hashedPassword) return false;\n  hashedPassword = makeBackwardCompatible(hashedPassword);\n  var parts = hashedPassword.split('$');\n  if (parts.length != 4) return false;\n  try {\n    return generateHash(parts[0], parts[1], password, parts[2]) == hashedPassword;\n  } catch (e) {}\n  return false;\n};\n\nmodule.exports.isHashed = function(password) {\n  if (!password) return false;\n  return password.split('$').length == 4;\n}\n"]}