]> git.codecow.com Git - libnemo.git/commitdiff
Simplify secret verification and ensure byte lengths are equal.
authorChris Duncan <chris@codecow.com>
Mon, 3 Aug 2026 00:33:12 +0000 (17:33 -0700)
committerChris Duncan <chris@codecow.com>
Mon, 3 Aug 2026 00:33:12 +0000 (17:33 -0700)
src/lib/vault/vault-worker.ts

index e056f29b26b440bdc465dc226ba29ea8ba9840c8..57c73b89fa40f6618fd695be2bf3d4f183fa5d9d 100644 (file)
@@ -363,25 +363,14 @@ function verify (seed?: ArrayBuffer, mnemonicPhrase?: string): Promise<Record<st
                if (seed != null && mnemonicPhrase != null) {
                        throw new Error('Seed or mnemonic phrase must be verified separately')
                }
+               const expected = seed != null ? new Uint8Array(seed) : utf8.toBytes(mnemonicPhrase ?? '')
+               const actual = seed != null ? new Uint8Array(_seed) : new Uint8Array(_mnemonic ?? [])
                let isVerified = false
-               if (seed != null) {
-                       let diff = 0
-                       const userSeed = new Uint8Array(seed)
-                       const thisSeed = new Uint8Array(_seed)
-                       for (let i = 0; i < userSeed.byteLength; i++) {
-                               diff |= userSeed[i] ^ thisSeed[i]
-                       }
-                       isVerified = diff === 0
-               }
-               if (mnemonicPhrase != null) {
-                       let diff = 0
-                       const userMnemonic = utf8.toBytes(mnemonicPhrase)
-                       const thisMnemonic = new Uint8Array(_mnemonic ?? [])
-                       for (let i = 0; i < userMnemonic.byteLength; i++) {
-                               diff |= userMnemonic[i] ^ thisMnemonic[i]
-                       }
-                       isVerified = diff === 0
+               let diff = 0
+               for (let i = 0; i < expected.byteLength; i++) {
+                       diff |= expected[i] ^ actual[i]
                }
+               isVerified = diff === 0 && expected.byteLength === actual.byteLength
                return Promise.resolve({ isVerified })
        } catch (err) {
                console.error(err)