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
}