{"version":3,"file":"safe.cjs","sources":["../../src/safe.ts"],"sourcesContent":["/**\n * @ Author: Hanrea\n * @ version: 2023-03-06 13:14:21\n * @ copyright: Vecmat (c) - <hi(at)vecmat.com>\n */\n\n\n// 安全相关工具类\n\n// 单个字符的比较是很快的，攻击者可以细化测量时间精度到微秒，\n// 通过响应时间的差异推算出是从哪一个字符开始错误，快速破解\n\nimport { createHash } from \"node:crypto\";\n// 安全比对密码\n// https://www.npmjs.com/package/secure-compare\nexport const verifyPass = (pass: string, salt: string, check: string): boolean => {\n    check = createHash(\"md5\").update(`${salt}${check}${salt}`).digest(\"hex\");\n    console.log(check);\n    if (typeof pass !== \"string\" || typeof check !== \"string\") {\n        return false;\n    }\n    let mismatch = pass.length === check.length ? 0 : 1;\n    for (let i = 0, il = pass.length; i < il; ++i) {\n        // 不等可能会为-1或正整数\n        mismatch |= pass.charCodeAt(i) ^ check.charCodeAt(i);\n    }\n    return mismatch === 0;\n};\n"],"names":["createHash"],"mappings":";;;;AAAA;;;;AAIG;AAGH;AAEA;AACA;AAGA;AACA;AACa,MAAA,UAAU,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa,KAAa;IAC7E,KAAK,GAAGA,sBAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAG,EAAA,IAAI,GAAG,KAAK,CAAA,EAAG,IAAI,CAAE,CAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzE,IAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvD,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACpD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;;AAE3C,QAAA,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACxD;IACD,OAAO,QAAQ,KAAK,CAAC,CAAC;AAC1B;;;;"}