It offers scrypt + aes-gcm, encoded into 256 emoji; all the crypto is in https://github.com/aurorabbit/libemojicrypt/blob/master/prot... (I could have went without a subrepo, but in theory it makes non-web integration or alternate interfaces simple.)
It's based off of ricmoo's scrypt.js, pfrazee's base-emoji, and WebCrypto.
Output contains a header (with N/r parameters), salt, IV, and HMAC. Room for a dozen more protocol versions as well.
It's abandoned, looking for a loving home! Work for some new (and some unimplemented) features is laid out here: https://github.com/aurorabbit/emojicrypt.com/issues
With a slight difference, it works 100% in the browser, you can use it here:
But you need to store the output somewhere safe.
Mine was originally in-browser, but thanks to some contributors (Zoltán Gálli and Nial Francis) it has Python and PowerShell CLIs now.
I like your use of async to make sure the work stays off the main thread.
If we assume that this determined attacker is calculating these hashes 100.000 faster than the average browser, it should be enough if the user has to wait for one second, not one minute.
On the other hand everyone has different security requirements so perhaps making it configurable is the best way to go proceed (with some recommendations).
PS according to https://github.com/analsec/hashcatbenchmark/blob/master/Nvid... a RTX 2080Ti can crack 750k WPA-EAPOL-PBKDF2 with 4096 rounds per second.
Edit: add more details.
You can easily make it faster or instantaneous by lowering the number of PBKDF2 rounds in the html-vault script. The default of 20 million seems a bit excessive based on the feedback so far.