forked from Qortal/qortal-ui
AlphaX-Projects
1 year ago
22 changed files with 450 additions and 31 deletions
@ -1,23 +1,32 @@ |
|||||||
import Base58 from './deps/Base58.js' |
import Base58 from './deps/Base58.js' |
||||||
import { kdf } from './kdf.js' |
import { kdf } from './kdf.js' |
||||||
import { HmacSha512, AES_CBC } from 'asmcrypto.js' |
import { HmacSha512, AES_CBC } from 'asmcrypto.js' |
||||||
|
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' |
||||||
|
|
||||||
|
registerTranslateConfig({ |
||||||
|
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) |
||||||
|
}) |
||||||
|
|
||||||
export const decryptStoredWallet = async (password, wallet, statusFn = () => { }) => { |
export const decryptStoredWallet = async (password, wallet, statusFn = () => { }) => { |
||||||
statusFn('Decoding saved data') |
const sfn1 = get("login.lp12") |
||||||
|
statusFn(sfn1) |
||||||
const encryptedSeedBytes = Base58.decode(wallet.encryptedSeed) |
const encryptedSeedBytes = Base58.decode(wallet.encryptedSeed) |
||||||
const iv = Base58.decode(wallet.iv) |
const iv = Base58.decode(wallet.iv) |
||||||
const salt = Base58.decode(wallet.salt) |
const salt = Base58.decode(wallet.salt) |
||||||
statusFn('Generating decryption key') |
const sfn2 = get("login.lp13") |
||||||
|
statusFn(sfn2) |
||||||
const key = await kdf(password, salt, statusFn) |
const key = await kdf(password, salt, statusFn) |
||||||
const encryptionKey = key.slice(0, 32) |
const encryptionKey = key.slice(0, 32) |
||||||
const macKey = key.slice(32, 63) |
const macKey = key.slice(32, 63) |
||||||
|
const sfn3 = get("login.lp14") |
||||||
statusFn('Checking key') |
statusFn(sfn3) |
||||||
const mac = new HmacSha512(macKey).process(encryptedSeedBytes).finish().result |
const mac = new HmacSha512(macKey).process(encryptedSeedBytes).finish().result |
||||||
|
const sfn4 = get("login.lp15") |
||||||
if (Base58.encode(mac) !== wallet.mac) { |
if (Base58.encode(mac) !== wallet.mac) { |
||||||
throw new Error('Incorrect password') |
throw new Error(sfn4) |
||||||
} |
} |
||||||
statusFn('Decrypting') |
const sfn5 = get("login.lp16") |
||||||
|
statusFn(sfn5) |
||||||
const decryptedBytes = AES_CBC.decrypt(encryptedSeedBytes, encryptionKey, false, iv) |
const decryptedBytes = AES_CBC.decrypt(encryptedSeedBytes, encryptionKey, false, iv) |
||||||
return decryptedBytes |
return decryptedBytes |
||||||
} |
} |
||||||
|
After Width: | Height: | Size: 53 KiB |
Loading…
Reference in new issue