Walletwasabi: Wallet inconsistently handles authentication with complex passwords (loss of access to funds)

Created on 6 Aug 2019  ·  13Comments  ·  Source: zkSNACKs/WalletWasabi

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Bug General Description

Wallet inconsistently handles authentication with complex passwords (loss of access to funds)

Description:

After initializing a wallet with a complex password, confirming correctness with "Test Password" feature; the wallet returns "Wrong password" when attempting to CoinJoin or use the "Test Password" feature after coins are sent to a receiving address.

While trying to diagnose the issue, I noticed extremely inconsistent handling of passwords by the wallet. When a complex password is pasted into the password box, the password displayed, when using the password "peak" button, is often truncated and sometimes has blank characters appended to the end.

Reproduce steps

Steps to reproduce loss of access to funds:

  1. Generate complex password (with password manager KeePassXC)

    • 128 characters

    • ExtendedASCII

  2. Start "Generate Wallet" flow

    1. Wallet Name: "Wallet0"

    2. Paste password from step 1. into password field

    3. Complete wallet-generation flow

  3. Test Password correctness

    1. Paste password from password manager (KeePassXC)

    2. Receive positive correctness reply from GUI

  4. Generate Receiving address
  5. Transactions confirm on blockchain
  6. Begin CoinJoin

    1. Select coins for CoinJoin

    2. Enter password to Enqueue coins (Paste from password manager KeePassXC)

  7. Bug/Fault Occurs:

    1. Software Behavior:



      1. CoinJoin doesn't start


      2. UI presents wrong password notice.


      3. All funds are unspendable because previously correct password isn't recognized as correct by WasabiWallet



    2. Expected Behavior:



      1. Password authentication works because of positive correctness during testing


      2. CoinJoin ensues



Short Insturctions to show UI is mishandling passwords

  1. Start "Generate Wallet" flow
  2. Wallet Name: "Wallet1"
  3. Paste Complex Password into password field (not the same password used above)
    e.g.

        w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\]§,à±H7«®È4nèNmæo4.qØ-¾ûda¯ºíö¾,¥¢½\¹õèKeÁìÍSÈ@r±ØÙ2[r©UQÞ¶xN"?:Ö@°&
    
  4. Click "Show Password." UI button

  5. Bug/Fault Occurs:

    1. Software Behavior (Wallet mishandles password):

      1. When clicking "Show Password." UI button, Wallet displays ~86 (below) of the 128 password characters

        w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\]§,à±H7«®È4nèNmæo4.qØ-¾ûda

    2. Expected Behavior:

      1. Clicking "Show Password." UI button displays full 128 character password:

        w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\]§,à±H7«®È4nèNmæo4.qØ-¾ûda¯ºíö¾,¥¢½\¹õèKeÁìÍSÈ@r±ØÙ2[r©UQÞ¶xN"?:Ö@°&

  6. Subsequent testing:

    1. Theory: Is the UI truncating the 128 password to ~86 characters?

      1. Test pasting the ~86 character password into password field
          w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\]§,à±H7«®È4nèNmæo4.qØ-¾ûda
      
      1. Bug/Fault Occurs:

        1. Software Behavior:

          1. When clicking "Show Password." UI button, Wallet displays ~57 (below) of the 86 password characters

              w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf

        2. Expected Behavior

          1. Clicking "Show Password." UI button displays full 128 character password:

              w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\]§,à±H7«®È4nèNmæo4.qØ-¾ûda












    2. Conclusion: Password is being mishandled in way other than simple truncation.




Environment:

$ system_profiler SPSoftwareDataType

Software:

    System Software Overview:

      System Version: macOS 10.14.6 (18G84)
      Kernel Version: Darwin 18.7.0
      Boot Volume: Macintosh HD
      Boot Mode: Normal
      Secure Virtual Memory: Enabled
      System Integrity Protection: Enabled

$ wassabee -v

Wasabi Client Version: 1.1.6
Compatible Coordinator Version: 3

Visual proof:

UI image of mishandled password https://i.ibb.co/0JyjBZX/mishandled-password.png

Severity:

  1. Major?

    1. Loss of access to funds

    2. Possibly loss of funds

      -----BEGIN PGP SIGNATURE-----

iHUEAREIAB0WIQRw5kH+nJpFRXQ9tS4OzKtyz0kVQgUCXUjEKAAKCRAOzKtyz0kV
QmnWAP92VdZocvGxmkbb+l49Regz2mgtujz+NpTZmbMrxQRHngD8Cox2QdD1ypkq
c9dNoGADANuDgU6HUqXgMd4pN0cdsGs=
=PnRn
-----END PGP SIGNATURE-----

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
VIZ2EurEVQCl1d6fns8=
=p46O
-----END PGP PUBLIC KEY BLOCK-----

debug priority

Most helpful comment

I think it'd be useful to notify the public about this issue in the form of a WVE (Wasabi Vulnerabilities and Exposures) Similarly to this issue: https://medium.com/@molnardavid84/wasabireport-704616de55d1

Some people may ended up thinking they lost their money, because of this.

All 13 comments

Given the reported severity I have tested this carefully and all the tests pass okay. I was always able to spend my coins.

These tests were executed on Linux instead of macos. @molnard could you take a look at this one, please?

Note: this is a very time consuming task. @doorpost-refold could you share the mnemonics and password of your test wallet, please? Without a reproducible case this issue will be closed given the lack of evidence.

Test 1

I've tested it with three different wallets before starting to save the passwords and it always worked properly.

In this case the password was generated with KeePassXC 128 char length:

Test PASS

Wallet file

{
  "EncryptedSecret": "6PYM2Uj2v3vcWxzD5PGjJsnkEAy3e87i1jep9xZgP47NmRAQBCBtwzCrHR",
  "ChainCode": "hSS1s0r9bb1c/a3rhuhRfZz9qccw1xd4MgsKSfFb0l0=",
  "MasterFingerprint": "ef715f28",
  "ExtPubKey": "xpub6CAQFY1tDhTEc9QT6n15irjCcKBuhcwSidT9SrZwwwSb8dmXMkTm5SLsCT5SNdRqPHYFdDbyEFMthGAZKFQzgtnTupQedTn89G6KqfrUDFh",
  "PasswordVerified": true,
  "MinGapLimit": 21,
  "AccountKeyPath": "84'/0'/0'",
  "BlockchainState": {
    "Network": "TestNet",
    "BestHeight": "1572638",
    "BlockStates": []
  },
  "HdPubKeys": [
    {
      "PubKey": "03dffef2e4f8285266a41257b00c7b9e7b6841478be647dfaee89946d22c58bd86",
      "FullKeyPath": "84'/0'/0'/1/0",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03653926789fe3910bea035b1a383de084404694c9f7b51312c683118d0de713bb",
      "FullKeyPath": "84'/0'/0'/1/1",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "029f50a92421c8cfc7fed5a7558abdd35a23a6f55baa175ab9b53e9d5f7def4784",
      "FullKeyPath": "84'/0'/0'/1/2",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "031919810e0157f3cdf8e9df6ae8bcb85acb58b7f9eac1103398a5e9a4aeec8d6d",
      "FullKeyPath": "84'/0'/0'/1/3",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "031184aaaf6be2db8c84741c4b355e5e2bd2a6539221dddca3de6b7d8f9bc4a8a1",
      "FullKeyPath": "84'/0'/0'/1/4",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02ca29ea2b0bba847e64e4620572241f22c68332d92d0986702cfa4ea71fcd2404",
      "FullKeyPath": "84'/0'/0'/1/5",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0211e9a93d5d7c6423c41373d4c95150fe423722974720db70e28555f28d388394",
      "FullKeyPath": "84'/0'/0'/1/6",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "021432ddc8938ad6b618d0c85c8026d5bed4b0782ebd36666caaa668264bba31d9",
      "FullKeyPath": "84'/0'/0'/1/7",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0255fa08ed4122b69dc6cbb67ce2eb93d5847c4f01577c89a010d074e7551b3849",
      "FullKeyPath": "84'/0'/0'/1/8",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02298e48afbc03aa40ea284bc184fba06f8778c59bd5575d12f0231f8f80d9d889",
      "FullKeyPath": "84'/0'/0'/1/9",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "022a04d81ff0e439d551592e8fde680478dbb1ad79bf7395edb240393dbacde7bd",
      "FullKeyPath": "84'/0'/0'/1/10",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02f326c7a9f3b932ee73a7c02e81e09087f39d64dc8555e8b7bdf759a94b55f01a",
      "FullKeyPath": "84'/0'/0'/1/11",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02e1c214b82d4e4389abbdea2fb6b48ec942e6a269a1773b75cc2b70e95e4fc2d0",
      "FullKeyPath": "84'/0'/0'/1/12",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "033491ad5578b133c4eff586385a18ce7f6e60564b704aa2ce3103674e37f0a1fa",
      "FullKeyPath": "84'/0'/0'/1/13",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03bb83f56fb3a80cc70d049dca111b94fee717138a2c811ab3fb220da7cff1ae14",
      "FullKeyPath": "84'/0'/0'/1/14",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02feb94a8e18c6dac61abf0f99130fab2216fb6c6d37d68f1287be61afe9b2d53b",
      "FullKeyPath": "84'/0'/0'/1/15",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02aaa256437e0b8126aff9f0a2a10efa21bf62055c75f3a618c430a1904a858d2c",
      "FullKeyPath": "84'/0'/0'/1/16",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02bedcd0a1edc466a36e5caa03ae07aa63085a6fb444554b2cd9015a29c569de70",
      "FullKeyPath": "84'/0'/0'/1/17",
      "Label": "change of ()",
      "KeyState": 0
    },
    {
      "PubKey": "022c34f2e3e41f395d9aa61e79c4091c23984cb166b2677ae95d719d05df2d020f",
      "FullKeyPath": "84'/0'/0'/1/18",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "021d165c571a4b9d56f6a58667141fa9e663d0dba441c6f833e4b44758ee5267ca",
      "FullKeyPath": "84'/0'/0'/1/19",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03bdad9685af6629eca630a9db18c22a733b213349deedc81380b52ad4a680de02",
      "FullKeyPath": "84'/0'/0'/1/20",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02d0266c6bf791d3bf2006759d942523c813b96543cf5880d9f141c7b35f03b423",
      "FullKeyPath": "84'/0'/0'/0/0",
      "Label": "test-2",
      "KeyState": 2
    },
    {
      "PubKey": "03d0feb88ff0be51d2da1c114e9efe9dda71d6c095f7e9a1110426eface02c506c",
      "FullKeyPath": "84'/0'/0'/0/1",
      "Label": "otra",
      "KeyState": 2
    },
    {
      "PubKey": "029fa7dd2c2ec5721ee578e3bef4ae82761cd5b18167191d16fe1d7cc506337734",
      "FullKeyPath": "84'/0'/0'/0/2",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02e5c76e6fb1ed930407e99e6f510c6a65779074803d83c21b95ca38e7269c38d6",
      "FullKeyPath": "84'/0'/0'/0/3",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "037399e40b3d714bfefb7e9bdf0e8c22ddc1ceee7ab0813178f7430da98899ff1e",
      "FullKeyPath": "84'/0'/0'/0/4",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02ae76768793aaf436a0c4d2fbf672429fb53de26c951351a6b94795058a8b1ee8",
      "FullKeyPath": "84'/0'/0'/0/5",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02b371cc33e9c944b191f86cb3515211a841172043d2fa80ad4d009ae2c58f98a7",
      "FullKeyPath": "84'/0'/0'/0/6",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0319466144c91403365a817266735956d1f0e73d1bd63eb3c2fbc7a78ad211ce9c",
      "FullKeyPath": "84'/0'/0'/0/7",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03090a8d283ebdf1bccb9652c3b16b6821e3c5e2d7181e84511e969dd3d940dd9b",
      "FullKeyPath": "84'/0'/0'/0/8",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02bdc412cc1245c21d68156905ca7f243249e3a14b7a69d5dcf292abc761be984b",
      "FullKeyPath": "84'/0'/0'/0/9",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03a644fc60f473496decfda7459e2753d447c4e0ecd2ec325cc0b2070777770daa",
      "FullKeyPath": "84'/0'/0'/0/10",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "020441d9e3bd623037d51fb503b581e0539dd7faf8d4b025d19e32116215f51783",
      "FullKeyPath": "84'/0'/0'/0/11",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "027f61b2725ec3db4a12ca79eb119bea7bb6e5d433b47c75bf3a93e65dd3f857fc",
      "FullKeyPath": "84'/0'/0'/0/12",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "037c2c55de069b2116eb4491d5ee4e97d72193e8a0635f7a4c141498de31589499",
      "FullKeyPath": "84'/0'/0'/0/13",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0313a4c6d5d67f536dbfe29c094afad339bbbfbfe07a4f192b91d8594f9e15b222",
      "FullKeyPath": "84'/0'/0'/0/14",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03c4f7bcbef65e83351093951f02b40b22abf61c2e2cf2cb25bbbc387e976060f7",
      "FullKeyPath": "84'/0'/0'/0/15",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02d4e43260ee89577966dde14f3dcece4b67ececfc8d269505c8011cfeea455cce",
      "FullKeyPath": "84'/0'/0'/0/16",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03936d0c2ba740ec4795cefe7ecc5332bf62639c00fb2ed8699c9d927705ffdaa8",
      "FullKeyPath": "84'/0'/0'/0/17",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "026c4452ff4e46403458eecd114f68faa7cfcf872097d226f2d5c8e23ee68c9fd2",
      "FullKeyPath": "84'/0'/0'/0/18",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02210e38b828cf3e3c85e6d439c220bb29ae1e05ff6e46d647bb234dc0faaf1083",
      "FullKeyPath": "84'/0'/0'/0/19",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "032734788f91d5796dd4e6e535ec0ace557173106bff11a61bd3d112849992971f",
      "FullKeyPath": "84'/0'/0'/0/20",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "027e8a4fdfeec69a23a58faff07736d83776691897372b2cd2a6dd365f3dc6b0be",
      "FullKeyPath": "84'/0'/0'/1/21",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "030752afb2b79ed2a39b281f02db2273e62c298ec1ade220dc2a1960f7e434e992",
      "FullKeyPath": "84'/0'/0'/1/22",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03cf69f07a7eced883d300f029c458842234eaefc3425f2a51e349308613c52c55",
      "FullKeyPath": "84'/0'/0'/1/23",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02dd241380fe7aaa7e4c4b9069326a74fd1c614321bd5fb670c07bc9216af0e8b4",
      "FullKeyPath": "84'/0'/0'/1/24",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "038aadfcd212d7029170be847802baa4bc23e75a7b3f5ea46b284874cc77fd0066",
      "FullKeyPath": "84'/0'/0'/1/25",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0234d46497e45474816074363d657c6f4a8c048f62768fb8bf1364432283da0450",
      "FullKeyPath": "84'/0'/0'/1/26",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02455a978f95edbe6c2f942a35a5ef67e5f68afbf5e92af65dcd78c66ef1c8dad3",
      "FullKeyPath": "84'/0'/0'/1/27",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03751b652595dd0d63def84026df022db9ac494737774f868c7a9caba7a0ef5a49",
      "FullKeyPath": "84'/0'/0'/1/28",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02df1f205887d8a295a9039020ee1b2477426689dbe9046f42fd28de01f8bdf438",
      "FullKeyPath": "84'/0'/0'/1/29",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02289fa7a4216ca1d9fdc5da35ebf99996da51b2fb933f03f80d6bc2c71ec34f18",
      "FullKeyPath": "84'/0'/0'/1/30",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03dc6beaec2ff6514f839ccde8c61db78834523c4ff987d76ee69e8f8633935d8e",
      "FullKeyPath": "84'/0'/0'/1/31",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03d8cd95a4e81c1a68839744754fbfd919a5255affd39c2e5a651d2178b7fd6417",
      "FullKeyPath": "84'/0'/0'/1/32",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0345f82d43b55f108aeb59eac21b655f1528b58697c8d06666cbac8356c7d9212c",
      "FullKeyPath": "84'/0'/0'/1/33",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03092cde65e1e441b976296eb4d48ea980611cb40c233d940ac910069a990c66df",
      "FullKeyPath": "84'/0'/0'/1/34",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03c153e62a16b1c09002fc8ea34e198d36727a1ee62a5a8570bbdc04e0a97430b7",
      "FullKeyPath": "84'/0'/0'/0/21",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03a08a8ca2622793161a40dc6e0319cb2a12a9ac143e7e8a34279185cc89afd98e",
      "FullKeyPath": "84'/0'/0'/0/22",
      "Label": "",
      "KeyState": 0
    }
  ]
}

Password: [teB={L)fnK^fwJd6jyrDMT5_Kwi^<unn{D3M;{~s[r_/aa]KX^)^Rh]jS#Kb>`FR>E[otT>n!K?fQCJu$Qb'>xR^:Y4{V[^m$zH={vS[=4%+v8o*^t4{6!6iyU&4y5X

Test 2

Tested with password provided by the @doorpost

Test PASS

Wallet file

{
  "EncryptedSecret": "6PYSjYRKCUXLN18mLVVzXcVL6mKuYnmW2icwPAvqbCLMyt8pqr6Ph8ad6c",
  "ChainCode": "d4bLZl7UHuK+pbclocXWnn8bFLvaQ3nk0CVG+vhygC0=",
  "MasterFingerprint": "48855b99",
  "ExtPubKey": "xpub6D3oU6qZnx97enWC6QFtvoWrtA2S41uavTfPN4CuLH5GKwPRV6JPBkLSdBtd79CtXKijKai9X4gVwTYsJ8iwGbiW735xfPY5ZLTHodwQvDh",
  "PasswordVerified": true,
  "MinGapLimit": 21,
  "AccountKeyPath": "84'/0'/0'",
  "BlockchainState": {
    "Network": "TestNet",
    "BestHeight": "1567767",
    "BlockStates": []
  },
  "HdPubKeys": [
    {
      "PubKey": "029634c50ad45c44a156374efe7bb44f7af2faf5275510b0f5be6dbd7a49b4c746",
      "FullKeyPath": "84'/0'/0'/1/0",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "039df8ae74187b5989da17781e332a1f5d6800f93e7b2676ced6e6a5d712eb6b21",
      "FullKeyPath": "84'/0'/0'/1/1",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "029c8ff3414cb8275a281d11b6ab70c5519ff5b34d9424b35fba19100024ad64ae",
      "FullKeyPath": "84'/0'/0'/1/2",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0234563cac903dc1f126eaad7252f1772283e46fba27504ebbc85429f27920b202",
      "FullKeyPath": "84'/0'/0'/1/3",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02058596d6e4eb7a0f6a39fc8f4d3edac3180882e4c0a2d4bf8f0f0c8761d32c70",
      "FullKeyPath": "84'/0'/0'/1/4",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02a6ec7d85ee5f82b9d53a3a6984b6a824e8a719c12da45ff8e91b8221a5e92a3d",
      "FullKeyPath": "84'/0'/0'/1/5",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03768820f6bbd3d4f06c0fc016b95910d12e0e2577d0100dd948415fca1084a2e8",
      "FullKeyPath": "84'/0'/0'/1/6",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "020106b1140ba5e367e5ec8e5ff5a857ea34f68bae4a5aba73909e33c4b378bc32",
      "FullKeyPath": "84'/0'/0'/1/7",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "039f7f006640cb4d06d1a5da7eb230d8b5b7ef5955060a2b79bb9d763e2f2d2d88",
      "FullKeyPath": "84'/0'/0'/1/8",
      "Label": "change of ()",
      "KeyState": 0
    },
    {
      "PubKey": "028ded3f267514ae56c5cfb1b6c03cb640650c99854181e15aac99eb4581620006",
      "FullKeyPath": "84'/0'/0'/1/9",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02381d617711245ff3a63118fa40b1a60261c0d112a186db57de1fc21d7d31ee04",
      "FullKeyPath": "84'/0'/0'/1/10",
      "Label": "change of ()",
      "KeyState": 0
    },
    {
      "PubKey": "036728da81f29079bb0cd2ec7bd4c896e1ba4296ccde655f07c2438b08097a347b",
      "FullKeyPath": "84'/0'/0'/1/11",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03d4ae955435e69601c9cea1c6547c531c98e1ccf4fc6e42edf0ac23cb8c3377d8",
      "FullKeyPath": "84'/0'/0'/1/12",
      "Label": "change of ()",
      "KeyState": 0
    },
    {
      "PubKey": "037596d20e250d45ebb2cefb4d813843ab3a43f47a0d72907673407df93cf0319f",
      "FullKeyPath": "84'/0'/0'/1/13",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02ebfaf33e66c002d19bac36f8b5c3573dbccd13dc9104660e9d904ddb401657d3",
      "FullKeyPath": "84'/0'/0'/1/14",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02138bb4a2762d4b8bd62b5f95f24add7542f4d5c7cd6e3accd45bbdb1fb44dd2e",
      "FullKeyPath": "84'/0'/0'/1/15",
      "Label": "change of ()",
      "KeyState": 0
    },
    {
      "PubKey": "030ed6f189bc9b7f1217e4cf2bd082366961a05d8ee35e615eee2acea3f03d650c",
      "FullKeyPath": "84'/0'/0'/1/16",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0307cc4a47b756b9d9c44eb154fb004accebc5264d1fdba22172810f0891d03372",
      "FullKeyPath": "84'/0'/0'/1/17",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03d63066fffa68ca4e1c8b99b2a94bc2fb59b0f6f214f97ad3707237c76f77e03c",
      "FullKeyPath": "84'/0'/0'/1/18",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0285c15f577992f247b23bfd36b31adf777098f0cf966b84829690a8e03fcf27a6",
      "FullKeyPath": "84'/0'/0'/1/19",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0375ff2c15aabb35d32263a91a7bda9a333d69f92f4ab846afa8f25e2ff075a1d2",
      "FullKeyPath": "84'/0'/0'/1/20",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0286ffcebbffe71ea29ba576820bf071b458266284729a6bc64ac55c4c03812750",
      "FullKeyPath": "84'/0'/0'/0/0",
      "Label": "test3",
      "KeyState": 2
    },
    {
      "PubKey": "03b22384c798edcc70195737ac7b9ab1b083968eda6c3fb24021f803f9dc9ae106",
      "FullKeyPath": "84'/0'/0'/0/1",
      "Label": "otra",
      "KeyState": 2
    },
    {
      "PubKey": "036b1235aff24a9bb06fc5dd159005bb7191166b7bf6c204f2b6759a9483cfab9f",
      "FullKeyPath": "84'/0'/0'/0/2",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "025abdeef7889aec2d25e46385802ad9ec748dc70ce2b12f71b642601f12851026",
      "FullKeyPath": "84'/0'/0'/0/3",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02374117d09c5d46c6be9ac7a8143950a001b01f1b0d9745680132647ad5001db5",
      "FullKeyPath": "84'/0'/0'/0/4",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02041e247af939a60907423de3c2955b7c1573a939ce33bac504c1167ca46b23c3",
      "FullKeyPath": "84'/0'/0'/0/5",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "031bba7194a66ff5e0a35ac087a47f918c769d4059091abdb6611d5bb9a3843175",
      "FullKeyPath": "84'/0'/0'/0/6",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "031f7033b73d1b94c84fb075c326043529815d359c98804bd6c056a05b6db2fab0",
      "FullKeyPath": "84'/0'/0'/0/7",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0334b113b7e37c3d4af64de94ade4a44b0046edcf1be4b041812a88bfa31529320",
      "FullKeyPath": "84'/0'/0'/0/8",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "036574e738bf57154e80bee65c9f8f5d290b403e40746057ea195be3bc148819fa",
      "FullKeyPath": "84'/0'/0'/0/9",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03900c2793e6bdb24d13fca6b4023d2e99ced526e8beb8cba541f30f55823735db",
      "FullKeyPath": "84'/0'/0'/0/10",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "039d4aa95d375f443f7197f452313e6ae380c8868b584f517fc39a18d96883176e",
      "FullKeyPath": "84'/0'/0'/0/11",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03a0d2b10311b82c545a14c6c9d312f6b0175ea2480ba983e21daa547e117bc56c",
      "FullKeyPath": "84'/0'/0'/0/12",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02f62b353dfce986626833584ade8c0bfb28fdcce3b5dde1c50e132cf06e4143b2",
      "FullKeyPath": "84'/0'/0'/0/13",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0293ce65b8d08c8bbe2ebfb1528e5e93f86f36c08da4794a0a84e02583135b4ca7",
      "FullKeyPath": "84'/0'/0'/0/14",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02a4b80f8b0ec78822ebb1a720c1e7598965f8fe509f486cc822ea96d23d65800e",
      "FullKeyPath": "84'/0'/0'/0/15",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0338fbf1f8e2a973a9a88955209ae543cb54f5bfe7d16875b12761d53fbca9e4d9",
      "FullKeyPath": "84'/0'/0'/0/16",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02bab3cd9b931ce5fd27d714a75d16057c3cbe27dddc00e8b5cfd9cb3d86c1efa3",
      "FullKeyPath": "84'/0'/0'/0/17",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0353179c237d33dcbe3e4b91b8bb699ee24ee33bb1d3dc744fd4b30f25bcf5be83",
      "FullKeyPath": "84'/0'/0'/0/18",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0382b6bdb3b89b68cda71c7def05bd948b15e7fa52123014d486562c35863b4a41",
      "FullKeyPath": "84'/0'/0'/0/19",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03039b460f474244064fa969b683c2da1c314f1bc068e85d32450facf5b547b18c",
      "FullKeyPath": "84'/0'/0'/0/20",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0273abc083b1a89c17246953428e07edd7eaf742409cf6398cdde526a457d707b3",
      "FullKeyPath": "84'/0'/0'/1/21",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02dcd08b11666a2104aa3e3fc134b4c6110ee4a0c9afe3b904534ce0eedf2c81e2",
      "FullKeyPath": "84'/0'/0'/1/22",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0362e1a24f1c7a0da235bfea9d72b8d1da8a02075050a4ff3f8f7b3d275770eda8",
      "FullKeyPath": "84'/0'/0'/1/23",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0388308f810cd5db6b7fe448b9a1b1c2854f759dcdd1f14181ad7a6c9974855b09",
      "FullKeyPath": "84'/0'/0'/1/24",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "020a3ac48e98a14459e97d67718a2ffd0805a001186e1984d1174de214b2d6a4b2",
      "FullKeyPath": "84'/0'/0'/1/25",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "032ab34747ab274d5357e13f9a31724d6182df6f60c605a989f642958d00f64531",
      "FullKeyPath": "84'/0'/0'/1/26",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0296ca7f27d2f4e9321061a62b24b0de41c58e6c981961ace7d3dd03169d4e1314",
      "FullKeyPath": "84'/0'/0'/1/27",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02efd436ec70971b9732401e56fdc392b6adeaf90ebcdafeeea6d89f8b42038810",
      "FullKeyPath": "84'/0'/0'/1/28",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03d977ec9f160d597abea666305c94ffcf3c12ff9c63f0151dbdf2482b5ba4e873",
      "FullKeyPath": "84'/0'/0'/1/29",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03bbf793eefb99cac3fdac72e6e3285b2d9be324dea7e995c556f5c9a95cb38041",
      "FullKeyPath": "84'/0'/0'/1/30",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03acaf3fccfd59241d8554b853246cb1207963c399b46c3e823c70cdaa76e8e8f1",
      "FullKeyPath": "84'/0'/0'/1/31",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03593c824e689682272457ceadb71402e02ef4d9b5aa29ec947a46ff7693e6638d",
      "FullKeyPath": "84'/0'/0'/1/32",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "029db82545b54684b316cea1598526a94693fe0239e0cde732c99ef17d66218109",
      "FullKeyPath": "84'/0'/0'/1/33",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0275dcb195340070ad2946f24f8db44b64c6f5153e0f28d1b718c6ce1568b3ea88",
      "FullKeyPath": "84'/0'/0'/1/34",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "034c4287eaaef90acc9bad57220521a5827cc665c39f04548e8dad53ed818ef97c",
      "FullKeyPath": "84'/0'/0'/0/21",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "031461f85f5aecb617675d7bbf45f30b6f0ff04ba7f01786437b1440e4efabbf8e",
      "FullKeyPath": "84'/0'/0'/0/22",
      "Label": "",
      "KeyState": 0
    }
  ]
}

Password: w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\]§,à±H7«®È4nèNmæo4.qØ-¾ûda¯ºíö¾,¥¢½\¹õèKeÁìÍSÈ@r±ØÙ2[r©UQÞ¶xN"?:Ö@°&

Test 3

Test with passwords with [A-Z][a-z][0-9][/*_.....][Extended ASCII]

Test PASS

Wallet file

{
  "EncryptedSecret": "6PYNg9BFsTBganh4mFJLeJNqv5R9xwMQkWoPR6LJng2CGKqHNYwTwzPwkn",
  "ChainCode": "2VsFSk7cM7NbS55ZMgRj6Qec22AMbkgk7MERiHPJxfk=",
  "MasterFingerprint": "3f650cd4",
  "ExtPubKey": "xpub6BphjDshJQfnPkgaRrS44qvjxKMeD1ZbEeT67RfxgY78JjdyWz6gG3JJKN5AxurjmZdW8321NsNKmdzdHfuwYMB94SqUX5UvFruETmy2AzR",
  "PasswordVerified": true,
  "MinGapLimit": 21,
  "AccountKeyPath": "84'/0'/0'",
  "BlockchainState": {
    "Network": "TestNet",
    "BestHeight": "1572641",
    "BlockStates": []
  },
  "HdPubKeys": [
    {
      "PubKey": "03127663164631dfef12e397a053966d1f06167a851ce6ddd5499bf43a5781fdf7",
      "FullKeyPath": "84'/0'/0'/1/0",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02af23d68ecf7b7047171cb252d7fb89493bb96c7421c10065e33991155a5164ae",
      "FullKeyPath": "84'/0'/0'/1/1",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0248279945e441a79839d7c4b3d755850a2c7fce9965982d739e928e9e668da2f8",
      "FullKeyPath": "84'/0'/0'/1/2",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0308b0327138008be994db31c020bd1026554fe0697e9e4076e547da800cb1484c",
      "FullKeyPath": "84'/0'/0'/1/3",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "020a74cd51f00644c97696681f824c8c96f720f9fc45556abe24de078de8d62b46",
      "FullKeyPath": "84'/0'/0'/1/4",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "036e365d07311772ddd81d6829f4812ca2bd38217ffc8d32d066509c4c49e0bc10",
      "FullKeyPath": "84'/0'/0'/1/5",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03c7405b4f3a8fcba63a4779990f36cdef95175f976f4d2b51740ce7431cdb812b",
      "FullKeyPath": "84'/0'/0'/1/6",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03f699b777fe10d4c94ad8be1d8f4dc9fad1551f3b5aa9550c6801dc83a15b27e3",
      "FullKeyPath": "84'/0'/0'/1/7",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0323b3305dab7e889fee32fa289d90b3eb96ae23cbb7b4d33f7f1261c7ad6f9d4a",
      "FullKeyPath": "84'/0'/0'/1/8",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03d52ed38ff3810ffa9ff9cb9f742718cfa607b48436c72c3823a47aaf8b186385",
      "FullKeyPath": "84'/0'/0'/1/9",
      "Label": "change of ()",
      "KeyState": 0
    },
    {
      "PubKey": "03aebd25c909e6759677e9e0e73c30671842da46a22f455a5aab99183171677d70",
      "FullKeyPath": "84'/0'/0'/1/10",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "025c137bf87c4fed51d81e2027a3bf047e26c1752d90b99b5ee70a4086db2ecb8b",
      "FullKeyPath": "84'/0'/0'/1/11",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0301680e7c535886df206f2d14bce05a7cc885278e976ebba8908dc444d09a1e67",
      "FullKeyPath": "84'/0'/0'/1/12",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0241d5353f721dd0b57276b07cb8c8cfbd5aadcfc0fb4f7192e7514287407a54d5",
      "FullKeyPath": "84'/0'/0'/1/13",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0281839a13d2522e1658c1fe2fa7e02c09dd291b07937f83bdae6fdbe1dbb93940",
      "FullKeyPath": "84'/0'/0'/1/14",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0328fbb43931d5d78fe0ef40962cedd6a947e337d5de9d5b0b21134f5f455f1946",
      "FullKeyPath": "84'/0'/0'/1/15",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02c1e7e6e385c7048b608d35e4988a0ae7036e1a780acda3f82b226b6859b680b5",
      "FullKeyPath": "84'/0'/0'/1/16",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03c3add2bfab78505482d3c6c44c83fb337fe55734f6c5fd805ce612640f4a3542",
      "FullKeyPath": "84'/0'/0'/1/17",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0348d8e50071888955bfaaf2e1b2027d648b0bf9e91b3488eabc27428784826c8c",
      "FullKeyPath": "84'/0'/0'/1/18",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02cabb07d22bfd27541f4a5873f7036e7bfb1a2525f4c3403f9ae8620d643220ce",
      "FullKeyPath": "84'/0'/0'/1/19",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03167a97f0c539b4d9b794ba0e3756f10ea8fde96211270849c1bb6719d40c87fc",
      "FullKeyPath": "84'/0'/0'/1/20",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "027221bac7c1570edfadf5c48f0ef4aa2eb72aca36b6f06db4dcf3eac358d1fe50",
      "FullKeyPath": "84'/0'/0'/0/0",
      "Label": "test3",
      "KeyState": 2
    },
    {
      "PubKey": "036d9082e5f17952cbcc5487e3e46c8e9b3215271c621d0728c881d674801a0485",
      "FullKeyPath": "84'/0'/0'/0/1",
      "Label": "otra vez",
      "KeyState": 2
    },
    {
      "PubKey": "02a87a276ab3a73c7d5dcaefb3128c957087dbb0aa76488dc010a49a601ee28aab",
      "FullKeyPath": "84'/0'/0'/0/2",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02b6d9c6a7408094e2cc2eb26253deae012dd33f32f7090edddea7c57c497e21f5",
      "FullKeyPath": "84'/0'/0'/0/3",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0329583d6801a95547614112f8920194207a8a7e2d563e6194f0147c7b03040f26",
      "FullKeyPath": "84'/0'/0'/0/4",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03cda9f525305326e896a84fa792f7e39a3a957689790e7ae68e569aabd7987a87",
      "FullKeyPath": "84'/0'/0'/0/5",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "029ce057608a28fc6b1dfe4e60c42bb08857d3f173e8b303f2e8bf6dafcdb2bdd7",
      "FullKeyPath": "84'/0'/0'/0/6",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02fbf000632013d0bf5eb86b40bcaa3ed6d1da756c0a77f255088e9cdde1573951",
      "FullKeyPath": "84'/0'/0'/0/7",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "036b3a36135c0817aebe042778acc35cd92c90bb72da26377b41e887aa60663552",
      "FullKeyPath": "84'/0'/0'/0/8",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "022d634baff64d925700212c97b7593846f0eaf7233dd504baeacb66204572f088",
      "FullKeyPath": "84'/0'/0'/0/9",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03ba1e3d72f65990c682ee5b9fb460d13eab5cb06bed134d708833f13225d901e0",
      "FullKeyPath": "84'/0'/0'/0/10",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02ed91576583f107b7c38e6bf2d68b67c5829a47721342cb29425d51a460c0b0c0",
      "FullKeyPath": "84'/0'/0'/0/11",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "027ea7002e5362b6c12adaa6e89b1e2a3e1b79880de73584d7e599ad98a87dddf0",
      "FullKeyPath": "84'/0'/0'/0/12",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02ad3299f6302c9748b12ba5c68bba9d61755da40b2fe00475fc5d4f3ec47f924d",
      "FullKeyPath": "84'/0'/0'/0/13",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0213d50dfdc4048fa0be7b8a621f9a8ad1b294f0a73a5572bc35f46373306d4ccb",
      "FullKeyPath": "84'/0'/0'/0/14",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02ca9e9f7b9fa1ea5ca7587dcea5bde1a2779b548380fd09c01831bbd8b393d01c",
      "FullKeyPath": "84'/0'/0'/0/15",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03dcce8f79597cbe78f53a8ce9dd7ac8540f19d98d3c1cea75013a5d76cf8df7ea",
      "FullKeyPath": "84'/0'/0'/0/16",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03adda59e805098421cb38ccbc098d1cfb1be9eff8c73f59186841ea44ee1a5470",
      "FullKeyPath": "84'/0'/0'/0/17",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "037eece018f668cad4e39f299cf78048be0876fdeb49ae259abbb96e5ba9e2d8ee",
      "FullKeyPath": "84'/0'/0'/0/18",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02851dad70de8db1e696ed65a4c46d1d6a0855cdc8862dc1d2f1f449c27682be2c",
      "FullKeyPath": "84'/0'/0'/0/19",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "029bd4c35964dd06cd04da83660d68841aee581af096d9e6c7c740ecfcd85a7cbb",
      "FullKeyPath": "84'/0'/0'/0/20",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02a3a04428251e8d9316a458ded8828664efe71b631f8c305782f00a818e043b4a",
      "FullKeyPath": "84'/0'/0'/1/21",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02105ff4af9a0e75dfedc6a688f5db176ae8c81a6af0fb5429a2a1de529d27dc16",
      "FullKeyPath": "84'/0'/0'/1/22",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02a8f1d48d5f5d64cc11901f74692d972c47b7cb798df8eb109011c7bb5f728ba9",
      "FullKeyPath": "84'/0'/0'/1/23",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02994faaf8e26efd3c9cdea4f41fb80adca1e1116111bb37fc2595068224b037ed",
      "FullKeyPath": "84'/0'/0'/1/24",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03ee6e608301dd2262b609ba6e9e8fdfa6642483b60afdc778ff6486667940b2e9",
      "FullKeyPath": "84'/0'/0'/1/25",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03d37f13387496ddcbb21fb975fd8fc999e5e7c60317771d82a06a7c4c35a1feda",
      "FullKeyPath": "84'/0'/0'/1/26",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "026f036e4ecb51e0a28a21d8177ef864c66acabdc5f59a5a2d4f085607864741fa",
      "FullKeyPath": "84'/0'/0'/1/27",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "028d690acff46bc36e7668d93a62d8c146d925e726cafd66e11fd9e41192bb4997",
      "FullKeyPath": "84'/0'/0'/1/28",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02903c789561d35546fe53e68911b51c954de54cd7ddbc296f3042647fae551ac4",
      "FullKeyPath": "84'/0'/0'/1/29",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02e9248156a3403e428d49fbb7394af069cbc5d2459e0e09e77571754640faad56",
      "FullKeyPath": "84'/0'/0'/1/30",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "031ae8a0c73ee6b275c7a8d4880e7ada9acf2b54ff4c8e540b07ec4d5a79111191",
      "FullKeyPath": "84'/0'/0'/1/31",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0362a513cd8ca4bf2d7a79f28370ae4b4ee0e56c4fce7c775edb3cff3e8d0acf52",
      "FullKeyPath": "84'/0'/0'/1/32",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02dc6e728dcd5995603ccab82553c43827152601d19cf140e0ad25812d673e6134",
      "FullKeyPath": "84'/0'/0'/1/33",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03a633d4bfb764a174bb4562b3b8fb5a87201b15e209434e23185039397043c8e3",
      "FullKeyPath": "84'/0'/0'/1/34",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "030f34a7dec5af405ffde50da66240c79e45c5645acd6b1c643b56cfa8e9188582",
      "FullKeyPath": "84'/0'/0'/0/21",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03ef401c72bb99937b81478c1c8331eb30d0884356e836c6bde96ebaf5b23d6743",
      "FullKeyPath": "84'/0'/0'/0/22",
      "Label": "",
      "KeyState": 0
    }
  ]
}

Password: _ÿt@ÔC¢Â»b·±vÚ83{D³rÿC&ª}u?ßwkT]Y¬9jvÙÁqôRÍ6k¾q[7)Úbòs[FE~ôÛ·aÿV~Ù¨´QųúuZx¸V`ìbw¿oäòî¤Pú,§4ðÐ(S[`gÂÕ3ÙÇ£rÝê{VëÕoZ×GÄ¢D}½Q]èâÝÀ

Test 4

Test with password provided by @doorpost-refold containing spaces at the beginning:

Test PASS

Wallet file

{
  "EncryptedSecret": "6PYUHtXXJza8Bk1tkxKARPQ4i91JHqtV8QXvcZMF5tbabmg37V4nKxh1Na",
  "ChainCode": "5eO65fs/pEEBe1M5C1Ut8FI3R5czylqAS5zW+MCgqXk=",
  "MasterFingerprint": "74448657",
  "ExtPubKey": "xpub6Bz2pVb44BtDwSaQ4Jsc9zSPE1s8HmTwR51fN4bS33M6NoJDCp7iWaen5VCEKvmKD6VbMW35VyxZUk8PK6pDU72oWqEnNBViZBYQBonU79E",
  "PasswordVerified": true,
  "MinGapLimit": 21,
  "AccountKeyPath": "84'/0'/0'",
  "BlockchainState": {
    "Network": "TestNet",
    "BestHeight": "1484820",
    "BlockStates": []
  },
  "HdPubKeys": [
    {
      "PubKey": "037e97ccc1e0d1cfb916b86683d77b60654ff2a69a53addeeaddaf81f460e3cff6",
      "FullKeyPath": "84'/0'/0'/1/0",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03e8f49a2e67486da91fedcf99f7daeeb3975fd185613192fdbbee9bd181428fd3",
      "FullKeyPath": "84'/0'/0'/1/1",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0390e3f16293c9a035b5b502f26eb7e1b7c1d76098e337dbf6d9cd62cf41fbf9c8",
      "FullKeyPath": "84'/0'/0'/1/2",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "038da47244eb2dbf879ee4ffdd58bcb03b8f33143ed763cd73ff7a9e0a0611a6be",
      "FullKeyPath": "84'/0'/0'/1/3",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02f0dbf86c089d2ae022df76179adf15b96361234ab07a1fc186f7b9619e9aedf6",
      "FullKeyPath": "84'/0'/0'/1/4",
      "Label": "change of ()",
      "KeyState": 0
    },
    {
      "PubKey": "03313751c17be63aeea3a3116e2ab8e325dac7457897029677f6d74dd73803d5ec",
      "FullKeyPath": "84'/0'/0'/1/5",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03f3e89777e46665e940d342cd82224653885f53ba3bb6f351b382b231442f28c9",
      "FullKeyPath": "84'/0'/0'/1/6",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03692b92123c26cd0c40847be065f304aae66ee43805c1536a0a772d0290bc29bd",
      "FullKeyPath": "84'/0'/0'/1/7",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0258a0faf05bda6479c7893d437394336fdbb8d56672e449db585084df44ce8f46",
      "FullKeyPath": "84'/0'/0'/1/8",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "028476e2b5e18caa25ed29b7dee77c9651e1b7ba8f4176df54676dca6bebd9a6db",
      "FullKeyPath": "84'/0'/0'/1/9",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0254955db817fdb6278760078861b8c0d19544cc331f6c73fd48e78098ae68b957",
      "FullKeyPath": "84'/0'/0'/1/10",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "034fc37a81b1d3ce004a8b8bf8d177f6fb01c903b581b3b3e9b8cbfc4b42dfeb42",
      "FullKeyPath": "84'/0'/0'/1/11",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "026d9fb627326c760b6857d8c9b65141aa2e0d1272f937d10a0809698f83ab3c45",
      "FullKeyPath": "84'/0'/0'/1/12",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02b844efb3f9d9a3fcdf354e748668c82f169c6dcde41f793fedbe1a7913ef5f44",
      "FullKeyPath": "84'/0'/0'/1/13",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02e417fa0e9bcd9ef1b6ef99b2edd9a3caf95280093ae56f4d86246faeeca1ab1c",
      "FullKeyPath": "84'/0'/0'/1/14",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02f9919a76923e9d689cfc9a70fecc4156120ce7cc02e16ec0b33ed73dc7fbccc1",
      "FullKeyPath": "84'/0'/0'/1/15",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "031f510650cc0a37cbe948423eeaad3aa523139c55d055a330cf8d6177cae5f8c9",
      "FullKeyPath": "84'/0'/0'/1/16",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "028e84a5b74e80d2b967206fab91c36c4ed4323546d62f63b1686a079cd6f68f9c",
      "FullKeyPath": "84'/0'/0'/1/17",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "020d5375ae8fee2e931a700cf80484d5855bbcc633ec22deef5927c6cc52eff916",
      "FullKeyPath": "84'/0'/0'/1/18",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "029ca1716b3e52c5f5b4bcb5b15db13fcbef2e70e67b4a334dbe6358c44c2639be",
      "FullKeyPath": "84'/0'/0'/1/19",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "027fccc327d17e4f1ec1146c41e05877bacb66df4e8d79d1c3541e0b97bb527c68",
      "FullKeyPath": "84'/0'/0'/1/20",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "020050643cfa7f6be99df2a9ee75d249e931638749ae64473b88a2b34503fc1a2c",
      "FullKeyPath": "84'/0'/0'/0/0",
      "Label": "test4",
      "KeyState": 2
    },
    {
      "PubKey": "0302a126b5d0dd61058d8875d4782c4abcc25a1771f1f506372ed5592fd638bab3",
      "FullKeyPath": "84'/0'/0'/0/1",
      "Label": "otra",
      "KeyState": 2
    },
    {
      "PubKey": "0245e1b60f5a6ca629192cc4aa2a14f5a006290f99526a6c301d025f428de49c07",
      "FullKeyPath": "84'/0'/0'/0/2",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0391bd328d5ec5ed59ac7250f16dbb187ac692ede8e23b082fbb83721045a27d76",
      "FullKeyPath": "84'/0'/0'/0/3",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03a97823e23bc7fbd7f653fa05347d711ec4af6c081a003493142bfe9878d8ea33",
      "FullKeyPath": "84'/0'/0'/0/4",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02c21386a6308ff353c30ed8683b002d6b6add04d2944f67fbed1a574c3284cfb8",
      "FullKeyPath": "84'/0'/0'/0/5",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02f271f540261e1f02c4b7e3ca92e46a298c7e0ecffc6f1ae092d13e0408daf06f",
      "FullKeyPath": "84'/0'/0'/0/6",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03fb5294f1dddb1efcac51ca3b99cf0b7084a657506ee08ab8e53a527e8c098138",
      "FullKeyPath": "84'/0'/0'/0/7",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02a8d04eecbb9acdd1281d7646220b4a051dec91a844eedfb26cb97c9616b4738f",
      "FullKeyPath": "84'/0'/0'/0/8",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03412fcb1b744f4edacd07e1ae71c12505e5b1c61d2485893c954ea2569b8890a9",
      "FullKeyPath": "84'/0'/0'/0/9",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "028c4040fd27a59e8be8dd47d1cc784444d4fb5d2700d5afd3a50e5f7ea4645d0a",
      "FullKeyPath": "84'/0'/0'/0/10",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03da91d62957000825e3fbd24d5b7639fb170fd6afefaf723fb0f58ef393b54907",
      "FullKeyPath": "84'/0'/0'/0/11",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "031c461c88f64cd697df1d3986be8b266f4c46387e4243ac033d0d92822e1443f8",
      "FullKeyPath": "84'/0'/0'/0/12",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "031b5b846cee185820acfb0a8c406bfc288557ed7599451a7e00bc6470c66d86f2",
      "FullKeyPath": "84'/0'/0'/0/13",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02250ac20d5d670d6d618b327460699d6c8019b69babde2bcd2423883366a4bb78",
      "FullKeyPath": "84'/0'/0'/0/14",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03dbc6c163b9309eeed6112513ea7dc4b4bcbaad462d4096dd6d64e4eba291886b",
      "FullKeyPath": "84'/0'/0'/0/15",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "023f17731c9e42d2e83e9724a231153f4a6aca9caf406b91d434ae49632f3ec4ef",
      "FullKeyPath": "84'/0'/0'/0/16",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "0201b4979af0ac051a3964587a469beec06d13716962ce4eaeae187f0d428df4c4",
      "FullKeyPath": "84'/0'/0'/0/17",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "03971f4dc4f856a6b28f19237846ef458a0e0a4b7a6c48f412f870d353f27a2cb9",
      "FullKeyPath": "84'/0'/0'/0/18",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "030060a698a419919b603496d209fc0259113fdc73b19256ef5ae31f5ea9c74a30",
      "FullKeyPath": "84'/0'/0'/0/19",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "021613bf8e7cc142cf306f17f702aa6ca898d2ed8d9460cae70ca0c397f3581b0f",
      "FullKeyPath": "84'/0'/0'/0/20",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "02c4836b4b3b6726216d1bf4d278af0c5c76c6bd218426d2c9c2fc88ab2da01762",
      "FullKeyPath": "84'/0'/0'/1/21",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03c56e7b84d9eb3e32f8800ea107a97449cc1a93ac0e8434f5bc3510159669be76",
      "FullKeyPath": "84'/0'/0'/1/22",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02024aa51a5e9cfbc5780822b31fbdfa33704791b4287c0c4decc025e0087dd08b",
      "FullKeyPath": "84'/0'/0'/1/23",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "02270a87c8763fd2238c313cceda07060b80d14cc2d9b27744d9b6a05831768b42",
      "FullKeyPath": "84'/0'/0'/1/24",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "034029e466c57ca9b883c724a15984cf88965d2a32bb2c02058fdb9e98c852178b",
      "FullKeyPath": "84'/0'/0'/1/25",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03632940b4aafe3f844afeadd9d41cc2534b54141bea167f63da46bfd3009e5655",
      "FullKeyPath": "84'/0'/0'/1/26",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03685f3e055680620d01a33e6a960d4ca3e0bb8dcb10b85337ed838e1cc27dd6de",
      "FullKeyPath": "84'/0'/0'/1/27",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0264b076d205c329ffe18e44685fb5d0581f3f6ea37ff4d09b8dacf3611c341cb4",
      "FullKeyPath": "84'/0'/0'/1/28",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "030c4acad87fa979a0db880ae4114d84395504e99774f8842bf0c055e09ff510d7",
      "FullKeyPath": "84'/0'/0'/1/29",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0275a27682a5f9ed20e634822a67f19f9ce675b6e8918100c8b2d202967b199863",
      "FullKeyPath": "84'/0'/0'/1/30",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03ba38bef2b68fca6cf144112343fa598ba8120f3a68214bac111b41a10370dc1a",
      "FullKeyPath": "84'/0'/0'/1/31",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03169a2132f7418add2f207f14e6c2c7240104b7a85f2b48f14280163e77ac6757",
      "FullKeyPath": "84'/0'/0'/1/32",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0325e1f7174bc0ca7012fe0dffe834f325e16310172ffaebde64f7f58b8a31823d",
      "FullKeyPath": "84'/0'/0'/1/33",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "03c537e9c8a7309010c60fc86928a9efd24617bc5da5ae98d6e6bae0542c30d68e",
      "FullKeyPath": "84'/0'/0'/1/34",
      "Label": "",
      "KeyState": 1
    },
    {
      "PubKey": "0270ee79101a6ea93fd1f8348638b72e2812aa7aa1eea9b3cb3289e3c424f625dc",
      "FullKeyPath": "84'/0'/0'/0/21",
      "Label": "",
      "KeyState": 0
    },
    {
      "PubKey": "032f4c5ffaf83998b12a141917ace03f45d254e1aa10e2969ec84e7f8745779f45",
      "FullKeyPath": "84'/0'/0'/0/22",
      "Label": "",
      "KeyState": 0
    }
  ]
}

Password:     w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\]§,à±H7«®È4nèNmæo4.qØ-¾ûda¯ºíö¾,¥¢½\¹õèKeÁìÍSÈ@r±ØÙ2[r©UQÞ¶xN"?:Ö@°&

Test 5

Test if the password is somehow cut:

Test PASS

Password is not cut and all the characters are displayed.

image

I did some very minor and basic tests on Qubes 4 in a Debian 9 qube, Wasabi master branch.
Could not reproduce, the password provided works without cutting or mishandling.

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Errata in original Issue #2079

Test with password [...] containing spaces at the beginning:

My original markdown had erroneously-included spaces in the code field, the passwords used in my testing had no spaces prepended to them. Though, I think these spaces are generally irrelevant to the issue.

Definition

For the sake of ease of communication, I'll delineate two (potential) bugs that could be being caused by similiar issues:

Issue #2079 Bug 1

Loss of Access to Funds (potentially due to password being mishandled by non UI elements)

Issue #2079 Bug 2

Aberant/unfaithful presentation/mapping by the UI of the password data into (or from) the password field

Successful reproduction of Issue #2079 Bug 2

I ran Wasabi Wallet on another MacOS machine, different than the machine originally producing Issue #2079 Bug 1 and Issue #2079 Bug 2.
I produced similar (but not exact) behavior regarding the password displayed being unfaithfully shown when clicking the "Show Password." UI button.
The password shown when clicking the "Show Password." UI button was both clipped/chopped at the front and end and appears to have uncopied white space at the begining
"password mangling.png"

Reproduced steps (MacOS)

  1. Start Wasabi Wallet
  2. Click "Tools"
  3. Click "Wallet Manager"
  4. Click "Test Password"
  5. Click on any wallet name
  6. Copy complex password
Ì_UÝçRòUJÀCE<ê-EÔnxĶpÛïWÉÅ4Jµ8,sø:9éØoDØt3ì¦m?AÙþ̰¦+dÖõ'бew¶7Wz~×ÚÞôs,Ì¥Q6ÌQÁþ÷ai¹VWPæ-³ÌªËÁ÷ÿï*oæqz«*9:¿Ãý®E±LtØoÆßësÓÄaÉ4æ
  1. Paste password into Wasabi Wallet's password field
  2. Click "Show Password." UI button.
  3. Bug/Fault Occurs:

    1. Software Behavior (Wallet mishandles password):



      1. When clicking "Show Password." UI button, Wallet displays an incomplete version of the password


        4Jµ8,sø:9éØoDØt3ì¦m?AÙþ̰¦+dÖõ'бew¶7Wz~×ÚÞôs,Ì¥Q6ÌQÁþ÷ai¹



    2. Expected Behavior:



      1. Clicking "Show Password." UI button displays full password faithfully.



Screenshot

password mangling

Environment on secondary MacOS machine

$ system_profiler SPSoftwareDataType
Software:

System Software Overview:

  System Version: macOS 10.14.6 (18G84)
  Kernel Version: Darwin 18.7.0
  Boot Mode: Normal
  Secure Virtual Memory: Enabled
  System Integrity Protection: Enabled

$ wassabee -v
Wasabi Client Version: 1.1.6
Compatible Coordinator Version: 3

Irreproducibility and other bugs on Debian via Qubes

I downloaded the tar.gz file in a Qubes disposable VM to try to reproduce the steps but when clicking on the "Show Password." UI button, the password-obfuscation characters don't go away to reveal the password (and the password obfuscation method is stars and not Chinese characters)

Response to Wasabi Team

@molnard Do you have the capability to attempt to reproduce on MacOS? this would be for a third machine and second user.

@doorpost-refold could you share the mnemonics and password of your test wallet, please?

The steps to reproduce Issue #2079 Bug 2 don't require a wallet to be initialized with a mnemonic+password (As summarized above). The only wallet that has exhibited Issue #2079 Bug 1 (i.e Create Wallet -> Verify Password -> Receive coins -> Unspendable Bug/Fault) isn't a testnet wallet but a mainnet wallet (with ~ 1 month's worth of wage in my country) :'(.

Note: this is a very time consuming task.

I agree! I've almost spent 2 days trying to figure out what the cause could be.

Without a reproducible case this issue will be closed given the lack of evidence.

Issue #2079 Bug 2 has been able to be reproduced (above). At minimum there is an bug in how Wasabi Wallet on MacOS is displaying passwords.

I have tested this carefully and all the tests pass okay. I was always able to spend my coins.

I couldn't follow what steps you took e.g

I've tested it with three different wallets

to determine what tests were passed or user expectations met.

Test 5

Test if the password is somehow cut:

Test PASS

Password is not cut and all the characters are displayed.

image

This Issue #2079 Bug 2 is where there is definite differences in reproducbility between Linux and MacOS.
-----BEGIN PGP SIGNATURE-----

iHUEAREIAB0WIQRw5kH+nJpFRXQ9tS4OzKtyz0kVQgUCXUozFgAKCRAOzKtyz0kV
QuhwAP9gu3lIpGapLCLEz++7UBkaPvABDBB160AIZ+pFpEIr8AD+KK+Lu8lS8sCA
7V2GVmsYWFUkm0fSmhea9I7hasKwdNs=
=g9kK
-----END PGP SIGNATURE-----

Hi @doorpost-refold,

Just started to work on it. I have found some strange behavior but not yet clarified - working on it. I am sure we can recover your password and there will be no loss. Thank you for your patience!

Mac macOS 10.14.6 (18G84)

Preliminary

In rare cases with very complex character set (Unicode table) and special conditions (first paste after startup), the password copied to the system clipboard received differently in Wasabi.

Checking the System Clipboard and Wasabi consistency

  1. Generate wallet Tab

  2. Put the following password to the Clipboard (there are 4 spaces at the beginning)

w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\]§,à±H7«®È4nèNmæo4.qØ-¾ûda¯ºíö¾,¥¢½\¹õèKeÁìÍSÈ@r±ØÙ2[r©UQÞ¶xN"?:Ö@°&

  1. Read the content of the Clipboard from Wasabi
    C# string text = await Application.Current.Clipboard.GetTextAsync();

First Paste after Wasabi started:
\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0�ÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\\]§,à±H7«®È4nèNmæo4.qØ-¾ûda�

After the first it is always:
w¾3AÍ-dCdï×¾M\\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\\]§,à±H7«®È4nèNmæo4.qØ-¾ûda�

image

  1. Notice the differences:
  • After starting Wasabi the first Read from clipboard is corrupted with spaces
  • ¯ºíö¾,¥¢½\¹õèKeÁìÍSÈ@r±ØÙ2[r©UQÞ¶xN"?:Ö@°& became
    - \ became \\
    !!UPDATE!!: I was wrong this was caused by the debugger it is not a bug.

Consequences:

  • If the user pasted a complex password to the PasswordBox and it was the first paste after startup it might be different compared to the pastes after. However the extra chars are empty chars '\0' Guard.Correct() not fixing this because it is encoded into text. The good news is that this problem coughed by the Test Password function.
    UPDATE: only visible in debug these are zero characters. It is removed by the Trim function so basically it not causing any problem.

Checking inconsistent password handling

Password on Clipboard:

w¾3AÍ-dCdï×¾M\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\]§,à±H7«®È4nèNmæo4.qØ-¾ûda¯ºíö¾,¥¢½\¹õèKeÁìÍSÈ@r±ØÙ2[r©UQÞ¶xN"?:Ö@°&

Wasabi read from Clipboard:

w¾3AÍ-dCdï×¾M\\Øò¹ãÔÕýÈÝÁÐ9oEp¨}r:SR¦·ßNó±¥*W!¢ê#ikÇå<ðtÇf·a\\]§,à±H7«®È4nèNmæo4.qØ-¾ûda�

That is OK because it was cut when the wallet was generated as well.
We are using this function to remove leading and trailing WhiteSpace characters: https://docs.microsoft.com/en-us/dotnet/api/system.string.trim?view=netcore-2.2

white-space characters are removed https://docs.microsoft.com/en-us/dotnet/api/system.char.iswhitespace?view=netcore-2.2

It is consistently used at Generate / Test Password / SendTab so it should be fine.

On Windows, we only have the following two behavior:

- " became \"
- \ became \\
!!UPDATE!!: I was wrong this was caused by the debugger it is not a bug.

So the content of the Clipboard "stringified". This is not a problem for Wasabi users but can cause compatibility problems when recovering in other wallets.

The first step is to recover your money @doorpost-refold. According to my investigation could you try to figure out your original password.
I would try to operate with this first Paste anomaly.

  1. Put your original password to the Clipboard
  2. Start Wasabi go to Test Password
  3. Select your wallet and Paste your password (this will be the first paste after startup)
  4. If it is OK then we got your password.
  5. Restart Wasabi
  6. Load your wallet
  7. Go to SendTab
  8. DO NOT HOWER your mouse over the Address field (because of AutoPaste it will read the Clipboard automatically)
  9. Do not fill or select anything
  10. Instead Paste your password into the PasswordBox
  11. Now you can fill the other inputs (address, label, coinselection, etc.)
  12. Press Send button.

@doorpost-refold @molnard my investigations on osx showed that the following 2 issues occurred in Avalonia native OSX backend.

1) the string was not decoded correctly to UTF8 as Avalonia expects, causing the string corruption.

  • This was rectified by calling the correct cStringWithEncoding method in obj-c.

2) the string length was being returned to Avalonia (number of characters in the string) when it should have returned the number of bytes used to encode the string.

  • This was rectified by calling the correct lengthOfBytesUsingEncoding method in obj-c.

changes can be reviewed here:
https://github.com/AvaloniaUI/Avalonia/compare/release/0.8.1...release/0.8.2

I have a release being prepared on the CI server, and will get a consensus with rest of Avalonia team to confirm the release.

Only question is: Will fixing this break other peoples wallets?

I think it'd be useful to notify the public about this issue in the form of a WVE (Wasabi Vulnerabilities and Exposures) Similarly to this issue: https://medium.com/@molnardavid84/wasabireport-704616de55d1

Some people may ended up thinking they lost their money, because of this.

Yes. That's something we have to do but it is necessary to have the solution first.

Also, we need to know when this behavior was introduced. Maybe it was introduced after some specific version and then, not all versions are affected.

@lontivero its been there as long as we have the obj-c backend for OSX on Avalonia. If I remember correctly that would take us back to the beta release of Wasabi.

I published a report about the issues and the fix here: https://medium.com/@molnardavid84/wve-002-wasabi-case-report-7e5fa4d5c633

@doorpost-refold did you manage to make it work?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

yahiheb picture yahiheb  ·  3Comments

MaxHillebrand picture MaxHillebrand  ·  3Comments

davterra picture davterra  ·  3Comments

molnard picture molnard  ·  3Comments

the-metalworker picture the-metalworker  ·  3Comments