forked from Qortal/qortal-ui
24 lines
923 B
JavaScript
24 lines
923 B
JavaScript
import Base58 from './deps/Base58.js'
|
|
import { kdf } from './kdf.js'
|
|
import { HmacSha512, AES_CBC } from 'asmcrypto.js'
|
|
|
|
export const decryptStoredWallet = async (password, wallet, statusFn = () => { }) => {
|
|
statusFn('Decoding saved data')
|
|
const encryptedSeedBytes = Base58.decode(wallet.encryptedSeed)
|
|
const iv = Base58.decode(wallet.iv)
|
|
const salt = Base58.decode(wallet.salt)
|
|
statusFn('Generating decryption key')
|
|
const key = await kdf(password, salt, statusFn)
|
|
const encryptionKey = key.slice(0, 32)
|
|
const macKey = key.slice(32, 63)
|
|
|
|
statusFn('Checking key')
|
|
const mac = new HmacSha512(macKey).process(encryptedSeedBytes).finish().result
|
|
if (Base58.encode(mac) !== wallet.mac) {
|
|
throw new Error('Incorrect password')
|
|
}
|
|
statusFn('Decrypting')
|
|
const decryptedBytes = AES_CBC.decrypt(encryptedSeedBytes, encryptionKey, false, iv)
|
|
return decryptedBytes
|
|
}
|