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 }