FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

core/worker: only cache kdf of correct password · javascriptit/sync2@5d54612 · GitHub

Repository navigation

Commit 5d54612

Browse files
committed
core/worker: only cache kdf of correct password
1 parent 8831717 commit 5d54612

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

‎src/core/worker/handler.ts‎

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,19 @@ const kdfCache: Record<string, Buffer> = {}
7373

7474
function kdf(password: string, salt: Buffer, n: number) {
7575
const cacheKey = `${blake2b256(salt, password).toString('hex')}-${n}`
76-
let cached = kdfCache[cacheKey]
77-
if (!cached) {
78-
cached = kdfCache[cacheKey] = pbkdf2Sync(password, salt, n, 32, 'sha256')
76+
const key = kdfCache[cacheKey] || pbkdf2Sync(password, salt, n, 32, 'sha256')
77+
return {
78+
key: key,
79+
cache: () => {
80+
kdfCache[cacheKey] = key
81+
}
7982
}
80-
return cached
8183
}
8284

8385
function kdfEncrypt(clearText: Buffer, password: string, salt: Buffer): KdfCipherGlob {
8486
const iterations = 5000
85-
const key = kdf(password, salt, iterations)
87+
const { key, cache } = kdf(password, salt, iterations)
88+
cache()
8689
const glob = encrypt(clearText, key)
8790
return {
8891
...glob,
@@ -95,8 +98,13 @@ function kdfEncrypt(clearText: Buffer, password: string, salt: Buffer): KdfCiphe
9598

9699
function kdfDecrypt(glob: KdfCipherGlob, password: string): Buffer {
97100
const { salt, n } = glob.kdf
98-
const key = kdf(password, Buffer.from(salt, 'hex'), n)
99-
return decrypt(glob, key)
101+
const { key, cache } = kdf(password, Buffer.from(salt, 'hex'), n)
102+
try {
103+
const clearText = decrypt(glob, key)
104+
cache()
105+
return clearText
106+
} finally {
107+
}
100108
}
101109

102110
async function handleCommand(cmd: CommandName, arg: any) {

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL