From 3b46e71525b78d1f341931e2da0db4564060a8fe Mon Sep 17 00:00:00 2001 From: Phong Date: Wed, 11 Oct 2023 14:46:35 +0700 Subject: [PATCH] wip: native secure store --- package.json | 1 - pnpm-lock.yaml | 9 - src-tauri/Cargo.lock | 531 +++++++-------------------------- src-tauri/Cargo.toml | 2 +- src-tauri/src/main.rs | 59 ++-- src/app/auth/create/step-2.tsx | 7 - src/app/auth/import/step-2.tsx | 7 - src/libs/storage/instance.ts | 45 +-- src/utils/types.d.ts | 1 - 9 files changed, 143 insertions(+), 519 deletions(-) diff --git a/package.json b/package.json index 192b5c50..0c13f54c 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "@tauri-apps/plugin-process": "2.0.0-alpha.1", "@tauri-apps/plugin-shell": "2.0.0-alpha.1", "@tauri-apps/plugin-sql": "2.0.0-alpha.1", - "@tauri-apps/plugin-stronghold": "2.0.0-alpha.2", "@tauri-apps/plugin-updater": "2.0.0-alpha.1", "@tauri-apps/plugin-upload": "2.0.0-alpha.1", "@tauri-apps/plugin-window": "2.0.0-alpha.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f35b109..e6f81f08 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -83,9 +83,6 @@ dependencies: '@tauri-apps/plugin-sql': specifier: 2.0.0-alpha.1 version: 2.0.0-alpha.1 - '@tauri-apps/plugin-stronghold': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2 '@tauri-apps/plugin-updater': specifier: 2.0.0-alpha.1 version: 2.0.0-alpha.1 @@ -2185,12 +2182,6 @@ packages: '@tauri-apps/api': 2.0.0-alpha.6 dev: false - /@tauri-apps/plugin-stronghold@2.0.0-alpha.2: - resolution: {integrity: sha512-G01gRHjD1QCNn2EK/hgHJYy0tFEfjuKpU104JOgeYVEbkJX7G92hjxfyLqe++LoihPF/sUa6VHEUVVXBsRa71Q==} - dependencies: - '@tauri-apps/api': 2.0.0-alpha.6 - dev: false - /@tauri-apps/plugin-updater@2.0.0-alpha.1: resolution: {integrity: sha512-rJoVc/N8gg1MkUOFZdx5h39V47elddwnOjs0sAPhaGfwct7okmFMRnXpN/MwHoprTkK2+6EDLOvhf0jFMiy4JA==} dependencies: diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index e2ebb88e..34add254 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -17,15 +17,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aead" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array", -] - [[package]] name = "aes" version = "0.7.5" @@ -49,31 +40,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "aes-gcm" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" -dependencies = [ - "aead", - "aes 0.7.5", - "cipher 0.3.0", - "ctr", - "ghash", - "subtle", -] - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom 0.2.10", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.3" @@ -458,15 +424,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -482,15 +439,6 @@ dependencies = [ "serde", ] -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "blake2b_simd" version = "1.0.2" @@ -508,15 +456,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -526,6 +465,22 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-modes" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" +dependencies = [ + "block-padding", + "cipher 0.3.0", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + [[package]] name = "blocking" version = "1.4.1" @@ -720,31 +675,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chacha20" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "zeroize", -] - -[[package]] -name = "chacha20poly1305" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" -dependencies = [ - "aead", - "chacha20", - "cipher 0.3.0", - "poly1305", - "zeroize", -] - [[package]] name = "chrono" version = "0.4.31" @@ -1104,15 +1034,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "ctr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" -dependencies = [ - "cipher 0.3.0", -] - [[package]] name = "curl" version = "0.4.44" @@ -1143,19 +1064,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - [[package]] name = "darling" version = "0.20.3" @@ -1241,22 +1149,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.4", + "block-buffer", "const-oid", "crypto-common", "subtle", @@ -1336,20 +1235,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - [[package]] name = "either" version = "1.9.0" @@ -1896,20 +1781,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "ghash" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" -dependencies = [ - "opaque-debug", - "polyval", ] [[package]] @@ -2094,9 +1967,6 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.6", -] [[package]] name = "hashbrown" @@ -2104,7 +1974,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" dependencies = [ - "ahash 0.8.3", + "ahash", "allocator-api2", ] @@ -2153,7 +2023,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -2374,59 +2244,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "iota-crypto" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e04d492224bff6e97142f033d0a4383bcbc05918be1ff7b3abd2c1cc85205a2" -dependencies = [ - "aead", - "aes 0.7.5", - "aes-gcm", - "autocfg", - "blake2", - "chacha20poly1305", - "curve25519-dalek", - "digest 0.10.7", - "ed25519-zebra", - "generic-array", - "getrandom 0.2.10", - "hmac", - "pbkdf2", - "serde", - "sha2 0.10.8", - "unicode-normalization", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "iota-crypto" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d5a986d972c3a703d48ced24fdc0bf16fb2d02959ff4b152fa77b9132f6fb0" -dependencies = [ - "autocfg", -] - -[[package]] -name = "iota_stronghold" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5baaa2460627283f54b968db7a38c9c754dc6059157cae64550ed1b79c91aa" -dependencies = [ - "bincode", - "hkdf", - "iota-crypto 0.15.3", - "rust-argon2", - "serde", - "stronghold-derive", - "stronghold-utils", - "stronghold_engine", - "thiserror", - "zeroize", -] - [[package]] name = "ipnet" version = "2.8.0" @@ -2565,6 +2382,20 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "keyring" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9549a129bd08149e0a71b2d1ce2729780d47127991bfd0a78cc1df697ec72492" +dependencies = [ + "byteorder", + "lazy_static", + "linux-keyutils", + "secret-service", + "security-framework", + "winapi", +] + [[package]] name = "kuchikiki" version = "0.8.2" @@ -2633,18 +2464,6 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" -[[package]] -name = "libsodium-sys" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b779387cd56adfbc02ea4a668e704f729be8d6a6abd2c27ca5ee537849a92fd" -dependencies = [ - "cc", - "libc", - "pkg-config", - "walkdir", -] - [[package]] name = "libsqlite3-sys" version = "0.26.0" @@ -2677,6 +2496,16 @@ dependencies = [ "safemem", ] +[[package]] +name = "linux-keyutils" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f27bb67f6dd1d0bb5ab582868e4f65052e58da6401188a08f0da09cf512b84b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + [[package]] name = "linux-raw-sys" version = "0.3.8" @@ -2724,6 +2553,7 @@ dependencies = [ name = "lume" version = "1.2.6" dependencies = [ + "keyring", "rust-argon2", "serde", "serde_json", @@ -2744,7 +2574,6 @@ dependencies = [ "tauri-plugin-single-instance", "tauri-plugin-sql", "tauri-plugin-store", - "tauri-plugin-stronghold", "tauri-plugin-updater", "tauri-plugin-upload", "tauri-plugin-window", @@ -2827,7 +2656,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] @@ -3059,6 +2888,31 @@ dependencies = [ "winapi", ] +[[package]] +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-bigint-dig" version = "0.8.4" @@ -3076,6 +2930,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -3104,6 +2967,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", + "num-bigint", "num-integer", "num-traits", ] @@ -3395,10 +3259,10 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest 0.10.7", + "digest", "hmac", "password-hash", - "sha2 0.10.8", + "sha2", ] [[package]] @@ -3617,29 +3481,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "poly1305" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" -dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "polyval" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -4006,7 +3847,7 @@ checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8" dependencies = [ "byteorder", "const-oid", - "digest 0.10.7", + "digest", "num-bigint-dig", "num-integer", "num-iter", @@ -4186,6 +4027,25 @@ dependencies = [ "untrusted", ] +[[package]] +name = "secret-service" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da1a5ad4d28c03536f82f77d9f36603f5e37d8869ac98f0a750d5b5686d8d95" +dependencies = [ + "aes 0.7.5", + "block-modes", + "futures-util", + "generic-array", + "hkdf", + "num", + "once_cell", + "rand 0.8.5", + "serde", + "sha2", + "zbus", +] + [[package]] name = "security-framework" version = "2.9.2" @@ -4370,20 +4230,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "digest", ] [[package]] @@ -4394,7 +4241,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -4431,7 +4278,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ - "digest 0.10.7", + "digest", "rand_core 0.6.4", ] @@ -4590,7 +4437,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d6753e460c998bbd4cd8c6f0ed9a64346fcca0723d6e75e52fdc351c5d2169d" dependencies = [ - "ahash 0.8.3", + "ahash", "atoi", "byteorder", "bytes", @@ -4616,7 +4463,7 @@ dependencies = [ "rustls-pemfile", "serde", "serde_json", - "sha2 0.10.8", + "sha2", "smallvec", "sqlformat", "thiserror", @@ -4656,7 +4503,7 @@ dependencies = [ "quote", "serde", "serde_json", - "sha2 0.10.8", + "sha2", "sqlx-core", "sqlx-mysql", "sqlx-postgres", @@ -4679,7 +4526,7 @@ dependencies = [ "byteorder", "bytes", "crc", - "digest 0.10.7", + "digest", "dotenvy", "either", "futures-channel", @@ -4700,7 +4547,7 @@ dependencies = [ "rsa", "serde", "sha1", - "sha2 0.10.8", + "sha2", "smallvec", "sqlx-core", "stringprep", @@ -4740,7 +4587,7 @@ dependencies = [ "serde", "serde_json", "sha1", - "sha2 0.10.8", + "sha2", "smallvec", "sqlx-core", "stringprep", @@ -4837,64 +4684,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "stronghold-derive" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2835db23c4724c05a2f85b81c4681f4aa8ea158edc8a7f4ad791c916fb766c2e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "stronghold-runtime" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93abb10fbd11335d31c33a70b2523c0caab348215caa2ce6da04a268c30afcb" -dependencies = [ - "dirs", - "iota-crypto 0.15.3", - "libc", - "libsodium-sys", - "log", - "nix 0.24.3", - "rand 0.8.5", - "serde", - "thiserror", - "windows 0.36.1", - "zeroize", -] - -[[package]] -name = "stronghold-utils" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8300214898af5e153e7f66e49dbd1c6a21585f2d592d9f24f58b969792475ed6" -dependencies = [ - "rand 0.8.5", - "stronghold-derive", -] - -[[package]] -name = "stronghold_engine" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d68a609d0a4f05dbde8b704619faa7f861069bbc649e3abecb4d389f10236f" -dependencies = [ - "anyhow", - "dirs-next", - "hex", - "iota-crypto 0.15.3", - "once_cell", - "paste", - "serde", - "stronghold-runtime", - "thiserror", - "zeroize", -] - [[package]] name = "strsim" version = "0.10.0" @@ -5146,7 +4935,7 @@ dependencies = [ "semver", "serde", "serde_json", - "sha2 0.10.8", + "sha2", "tauri-utils", "thiserror", "time", @@ -5365,22 +5154,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "tauri-plugin-stronghold" -version = "2.0.0-alpha.2" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#8902fe9adf256c52e7e6a14370f56d0b4780a3a2" -dependencies = [ - "hex", - "iota-crypto 0.23.0", - "iota_stronghold", - "log", - "serde", - "serde_json", - "tauri", - "thiserror", - "zeroize", -] - [[package]] name = "tauri-plugin-updater" version = "2.0.0-alpha.2" @@ -5918,16 +5691,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "untrusted" version = "0.7.1" @@ -6294,19 +6057,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53b97a83176b369b0eb2fd8158d4ae215357d02df9d40c1e1bf1879c5482c80" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - [[package]] name = "windows" version = "0.39.0" @@ -6444,12 +6194,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - [[package]] name = "windows_aarch64_msvc" version = "0.39.0" @@ -6468,12 +6212,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - [[package]] name = "windows_i686_gnu" version = "0.39.0" @@ -6492,12 +6230,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - [[package]] name = "windows_i686_msvc" version = "0.39.0" @@ -6516,12 +6248,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - [[package]] name = "windows_x86_64_gnu" version = "0.39.0" @@ -6552,12 +6278,6 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - [[package]] name = "windows_x86_64_msvc" version = "0.39.0" @@ -6641,7 +6361,7 @@ dependencies = [ "once_cell", "serde", "serde_json", - "sha2 0.10.8", + "sha2", "soup3", "tao", "thiserror", @@ -6696,17 +6416,6 @@ dependencies = [ "nix 0.24.3", ] -[[package]] -name = "x25519-dalek" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" -dependencies = [ - "curve25519-dalek", - "rand_core 0.5.1", - "zeroize", -] - [[package]] name = "xattr" version = "1.0.1" @@ -6808,20 +6517,6 @@ name = "zeroize" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] [[package]] name = "zip" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 2ce185be..b07f3096 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -32,7 +32,6 @@ tauri-plugin-updater = { git = "https://github.com/tauri-apps/plugins-workspace" tauri-plugin-window = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } tauri-plugin-single-instance = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } tauri-plugin-autostart = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } -tauri-plugin-stronghold = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } tauri-plugin-store = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } tauri-plugin-upload = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } tauri-plugin-sql = { git = "hhttps://github.com/tauri-apps/plugins-workspace", branch = "v2", features = [ @@ -43,6 +42,7 @@ sqlx-cli = { version = "0.7.0", default-features = false, features = [ ] } rust-argon2 = "1.0" webpage = { version = "1.6.0", features = ["serde"] } +keyring = "2" [features] # by default Tauri runs in production mode diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a8c8d0eb..20f625fd 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -3,6 +3,7 @@ windows_subsystem = "windows" )] +use keyring::Entry; use std::time::Duration; use tauri::Manager; use tauri_plugin_autostart::MacosLauncher; @@ -81,7 +82,7 @@ async fn opengraph(url: String) -> OpenGraphResponse { } #[tauri::command] -async fn close_splashscreen(window: tauri::Window) { +fn close_splashscreen(window: tauri::Window) { // Close splashscreen if let Some(splashscreen) = window.get_window("splashscreen") { splashscreen.close().unwrap(); @@ -90,21 +91,22 @@ async fn close_splashscreen(window: tauri::Window) { window.get_window("main").unwrap().show().unwrap(); } +#[tauri::command] +fn secure_save(key: String, value: String) -> Result<(), ()> { + let entry = Entry::new("lume", &key).expect("Failed to create entry"); + let _ = entry.set_password(&value); + Ok(()) +} + +#[tauri::command] +fn secure_load(key: String) -> Result { + let entry = Entry::new("lume", &key).expect("Failed to create entry"); + let password = entry.get_password().unwrap(); + Ok(password) +} + fn main() { tauri::Builder::default() - /* - .setup(|app| { - let salt_path = app - .path() - .app_local_data_dir() - .expect("could not resolve app local data path") - .join(".salt.txt"); - app - .handle() - .plugin(tauri_plugin_stronghold::Builder::with_argon2(&salt_path).build())?; - Ok(()) - }) - */ .plugin(tauri_plugin_app::init()) .plugin(tauri_plugin_clipboard_manager::init()) .plugin(tauri_plugin_dialog::init()) @@ -234,28 +236,6 @@ fn main() { ) .build(), ) - .plugin( - tauri_plugin_stronghold::Builder::new(|password| { - let config = argon2::Config { - lanes: 2, - mem_cost: 50_000, - time_cost: 30, - thread_mode: argon2::ThreadMode::from_threads(2), - variant: argon2::Variant::Argon2id, - ..Default::default() - }; - - let key = argon2::hash_raw( - password.as_ref(), - b"LUME_NEED_RUST_DEVELOPER_HELP_MAKE_SALT_RANDOM", - &config, - ) - .expect("failed to hash password"); - - key.to_vec() - }) - .build(), - ) .plugin(tauri_plugin_autostart::init( MacosLauncher::LaunchAgent, Some(vec!["--flag1", "--flag2"]), @@ -268,7 +248,12 @@ fn main() { })) .plugin(tauri_plugin_upload::init()) .plugin(tauri_plugin_store::Builder::default().build()) - .invoke_handler(tauri::generate_handler![close_splashscreen, opengraph]) + .invoke_handler(tauri::generate_handler![ + close_splashscreen, + opengraph, + secure_save, + secure_load + ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/src/app/auth/create/step-2.tsx b/src/app/auth/create/step-2.tsx index b5275b46..0c59ba8d 100644 --- a/src/app/auth/create/step-2.tsx +++ b/src/app/auth/create/step-2.tsx @@ -1,5 +1,3 @@ -import { appConfigDir } from '@tauri-apps/api/path'; -import { Stronghold } from '@tauri-apps/plugin-stronghold'; import { useEffect, useState } from 'react'; import { Resolver, useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom'; @@ -60,11 +58,6 @@ export function CreateStep2Screen() { const onSubmit = async (data: { [x: string]: string }) => { setLoading(true); if (data.password.length > 3) { - const dir = await appConfigDir(); - const stronghold = await Stronghold.load(`${dir}lume.stronghold`, data.password); - - if (!db.secureDB) db.secureDB = stronghold; - // save privkey to secure storage await db.secureSave(pubkey, privkey); diff --git a/src/app/auth/import/step-2.tsx b/src/app/auth/import/step-2.tsx index 2b3426c1..7b7e0c82 100644 --- a/src/app/auth/import/step-2.tsx +++ b/src/app/auth/import/step-2.tsx @@ -1,5 +1,3 @@ -import { appConfigDir } from '@tauri-apps/api/path'; -import { Stronghold } from '@tauri-apps/plugin-stronghold'; import { useEffect, useState } from 'react'; import { Resolver, useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom'; @@ -60,11 +58,6 @@ export function ImportStep2Screen() { const onSubmit = async (data: { [x: string]: string }) => { setLoading(true); if (data.password.length > 3) { - const dir = await appConfigDir(); - const stronghold = await Stronghold.load(`${dir}/lume.stronghold`, data.password); - - if (!db.secureDB) db.secureDB = stronghold; - // save privkey to secure storage await db.secureSave(pubkey, privkey); diff --git a/src/libs/storage/instance.ts b/src/libs/storage/instance.ts index 9decb30d..b505e7c1 100644 --- a/src/libs/storage/instance.ts +++ b/src/libs/storage/instance.ts @@ -1,8 +1,7 @@ import { NDKEvent } from '@nostr-dev-kit/ndk'; -import { BaseDirectory, removeFile } from '@tauri-apps/plugin-fs'; +import { invoke } from '@tauri-apps/api'; import { Platform } from '@tauri-apps/plugin-os'; import Database from '@tauri-apps/plugin-sql'; -import { Stronghold } from '@tauri-apps/plugin-stronghold'; import { FULL_RELAYS } from '@stores/constants'; @@ -10,52 +9,22 @@ import { Account, DBEvent, Relays, Widget } from '@utils/types'; export class LumeStorage { public db: Database; - public secureDB: Stronghold; public account: Account | null; public platform: Platform | null; - constructor(sqlite: Database, platform: Platform, stronghold?: Stronghold) { + constructor(sqlite: Database, platform: Platform) { this.db = sqlite; - this.secureDB = stronghold ?? undefined; this.account = null; this.platform = platform; } - private async getSecureClient() { - try { - return await this.secureDB.loadClient('lume'); - } catch { - return await this.secureDB.createClient('lume'); - } + public async secureSave(value: string, key?: string) { + await invoke('secure_save', { key: this.account.pubkey ?? key, value }); } - public async secureSave(key: string, value: string) { - if (!this.secureDB) throw new Error("Stronghold isn't initialize"); - - const client = await this.getSecureClient(); - if (!client) throw new Error('Cannot get stronghold client'); - - const store = client.getStore(); - await store.insert(key, Array.from(new TextEncoder().encode(value))); - await this.secureDB.save(); - } - - public async secureLoad(key: string) { - if (!this.secureDB) throw new Error("Stronghold isn't initialize"); - - const client = await this.getSecureClient(); - if (!client) throw new Error('Cannot get stronghold client'); - - const store = client.getStore(); - const value = await store.get(key); - if (!value) return null; - - const decoded = new TextDecoder().decode(new Uint8Array(value)); - return decoded; - } - - public async secureReset() { - return await removeFile('lume.stronghold', { dir: BaseDirectory.AppConfig }); + public async secureLoad(key?: string) { + const value = invoke('secure_load', { key: this.account.pubkey ?? key }); + return value; } public async checkAccount() { diff --git a/src/utils/types.d.ts b/src/utils/types.d.ts index 4638edab..9d0005a8 100644 --- a/src/utils/types.d.ts +++ b/src/utils/types.d.ts @@ -28,7 +28,6 @@ export interface Account extends NDKUserProfile { follows: null | string[]; network: null | string[]; is_active: number; - privkey?: string; // deprecated last_login_at: number; }