30 lines
692 B
TypeScript
30 lines
692 B
TypeScript
import logger from 'log'
|
|
|
|
const log = logger('crypto:pbkdf')
|
|
|
|
export async function pbkdf(password: string, salt: Uint8Array, usages: KeyUsage[]): Promise<CryptoKey> {
|
|
log.trace('derive')
|
|
log.debug(`Usages : ${usages}`)
|
|
|
|
const keyMaterial = await window.crypto.subtle.importKey(
|
|
"raw",
|
|
new TextEncoder().encode(password),
|
|
"PBKDF2",
|
|
false,
|
|
["deriveBits", "deriveKey"],
|
|
)
|
|
|
|
return crypto.subtle.deriveKey(
|
|
{
|
|
name: "PBKDF2",
|
|
iterations: 250_000,
|
|
hash: "SHA-512",
|
|
salt,
|
|
},
|
|
keyMaterial,
|
|
{name: "AES-GCM", length: 256},
|
|
false,
|
|
usages,
|
|
)
|
|
}
|