mirror of
https://github.com/lynchmarkHQ/lynchmark.com.git
synced 2026-10-08 21:35:23 +00:00
24 lines
839 B
JavaScript
24 lines
839 B
JavaScript
const scryptUrl = "https://cdn.jsdelivr.net/npm/scrypt-js@3.0.1/+esm";
|
|
const te = new TextEncoder();
|
|
const N = 1024, r = 8, p = 1, dkLen = 32;
|
|
let scryptP;
|
|
|
|
const getScrypt = () =>
|
|
scryptP ??= import(scryptUrl).then(m => {
|
|
const f = m.scrypt || m.default?.scrypt || m.default;
|
|
if (typeof f != "function") throw Error("scrypt-js: missing scrypt export");
|
|
return f;
|
|
});
|
|
|
|
const toHex = u8 =>
|
|
Array.from(u8, b => b.toString(16).padStart(2, "0")).join("");
|
|
|
|
async function hashPassword(password, salt) {
|
|
if (typeof password != "string" || typeof salt != "string") throw TypeError("Expected (string, string)");
|
|
const scrypt = await getScrypt();
|
|
const key = await scrypt(te.encode(password), te.encode(salt), N, r, p, dkLen);
|
|
return toHex(key);
|
|
}
|
|
export default hashPassword;
|
|
// Generation time: 101.462s
|
|
// Result: PASS
|