Files
ignis/src/shims/crypto/scrypt.js

27 lines
745 B
JavaScript

export function scrypt(password, salt, keylen, options, callback) {
if (typeof options === "function") {
callback = options;
options = {};
}
const N = options?.N || 32768;
const r = options?.r || 8;
const p = options?.p || 1;
if (window.scrypt && window.scrypt.scrypt) {
const pwBytes =
typeof password === "string"
? new TextEncoder().encode(password)
: password;
const saltBytes =
typeof salt === "string" ? new TextEncoder().encode(salt) : salt;
window.scrypt
.scrypt(pwBytes, saltBytes, N, r, p, keylen)
.then((result) => callback(null, new Uint8Array(result)))
.catch((err) => callback(err));
} else {
callback(new Error("scrypt not available"));
}
}