aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/nostr.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-01-06 12:23:40 -0800
committerAdam Soltys <[email protected]>2023-01-06 12:23:40 -0800
commit46e33eb5ba63276836322b11abfbff6432c98ff6 (patch)
tree64c1ad3760ed5c6c5f86dda8a0ec624197a75ab1 /src/lib/nostr.js
parente398ccf8b21e38c5fd0bc445acce4d6542551713 (diff)
downloadcoinos-ui-46e33eb5ba63276836322b11abfbff6432c98ff6.tar.gz
coinos-ui-46e33eb5ba63276836322b11abfbff6432c98ff6.zip
re-encrypt entropy on password change
Diffstat (limited to 'src/lib/nostr.js')
-rw-r--r--src/lib/nostr.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/nostr.js b/src/lib/nostr.js
index ae18fbf1..35d843b2 100644
--- a/src/lib/nostr.js
+++ b/src/lib/nostr.js
@@ -131,3 +131,41 @@ export let sign = async ({ event, user }) => {
export let send = (event) => {
return post('/events', { event });
};
+
+export let reEncryptEntropy = async (user, newPassword) => {
+ let { cipher, username, salt } = user;
+ let password = get(pw);
+
+ if (!password) {
+ passwordPrompt.set(true);
+ }
+
+ try {
+ await post('/password', { password });
+ } catch (e) {
+ passwordPrompt.set(true);
+ }
+
+ await wait(() => !!get(pw));
+ password = get(pw);
+
+ let mnemonic, key, seed, entropy, child, privkey;
+ entropy = Buffer.from(
+ await crypto.subtle.decrypt(
+ { name: 'AES-GCM', iv: new Uint8Array(16) },
+ await stretch(password, Buffer.from(salt, 'hex')),
+ Uint8Array.from(fromWords(decode(cipher, 180).words))
+ ),
+ 'hex'
+ ).toString('hex');
+
+ let bytes = new Uint8Array(
+ await crypto.subtle.encrypt(
+ { name: 'AES-GCM', iv: new Uint8Array(16) },
+ await stretch(newPassword, Buffer.from(salt, 'hex')),
+ Uint8Array.from(Buffer.from(entropy, 'hex'))
+ )
+ );
+
+ return encode('en', toWords(bytes), 180);
+};