diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..205f821d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,49 @@ +## Summary of Changes + + + +## Motivation and Context + + + + +## How Has This Been Tested? (Test Plan) + + + +## Other information + + + +## Screenshots (if appropriate): + +## Final checklist + +- [ ] Did you test both iOS and Android(if applicable)? +- [ ] Is a security review needed(consenlabs/security)? + +## Security checklist (only for leader check) + +- [ ] No backdoor risk + - Check for unknown network request urls, and script/shell files with unclear purposes, + - The backend service cannot expose leaked data interfaces for various reasons (even for testing purposes) +- [ ] No network communication protocol risk + - Check whether to introduce unsafe network calls such as http/ws +- [ ] No import potentially risk 3rd library + - Check whether 3rd dependent library is import + - Don't use an unknown third-party library + - Check the 3rd library sources are fetched from normal sources, such as npm, gomodule, maven, cocoapod, Do not use unknown sources + - Check github Dependabot alerts, Whether to add new issues +- [ ] Private data not exposed + - Check whether there are exclusive ApiKey, privatekey and other private information uploaded to git + - Check if the packaged keystore has been uploaded to git diff --git a/.github/workflows/build-release-android.yml b/.github/workflows/build-release-android.yml index 7a09f491..98fb692d 100644 --- a/.github/workflows/build-release-android.yml +++ b/.github/workflows/build-release-android.yml @@ -92,7 +92,7 @@ jobs: popd - name: Setup Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: gradle-version: 7.0.1 diff --git a/.gitignore b/.gitignore index bbc4e908..df167730 100644 --- a/.gitignore +++ b/.gitignore @@ -92,5 +92,8 @@ imkey-core/ikc-tools/android-debug.sh imkey-core/ikc-tools/build-android-linux.sh imkey-core/ios-release/** imkey-core/mobile-sdk/imKeyCoreX/Products/ +imkey-core/mobile-sdk/imKeyCoreX/imKeyCoreX/libconnector.a script/*-local.sh + +ios-*.zip \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 6a579661..7d6c5d7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,7 +9,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" dependencies = [ "lazy_static", - "regex 1.7.3", + "regex", ] [[package]] @@ -29,84 +29,58 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aead" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", "generic-array 0.14.7", ] [[package]] -name = "aes-ctr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7729c3cde54d67063be556aeac75a81330d802f0259500ca40cb52967f975763" -dependencies = [ - "aes-soft", - "aesni", - "cipher 0.2.5", - "ctr", -] - -[[package]] -name = "aes-soft" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aesni" -version = "0.10.0" +name = "aes" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", + "cfg-if", + "cipher", + "cpufeatures", ] [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "0.6.10" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] [[package]] -name = "aho-corasick" -version = "0.7.20" +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] -name = "alga" -version = "0.9.3" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "approx", - "num-complex", - "num-traits", + "libc", ] [[package]] @@ -120,18 +94,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.70" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" - -[[package]] -name = "approx" -version = "0.3.2" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" -dependencies = [ - "num-traits", -] +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "array-bytes" @@ -145,15 +110,6 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" -[[package]] -name = "arrayvec" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -dependencies = [ - "nodrop", -] - [[package]] name = "arrayvec" version = "0.5.2" @@ -162,19 +118,19 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "fdf6721fb0140e4f897002dd086c06f6c27775df19cfe1fccb21181a48fd2c98" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 2.0.11", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -191,7 +147,7 @@ checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ "addr2line", "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", "miniz_oxide", "object", @@ -240,7 +196,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5e6bb7b4f714af5a06b214d55d390246a7daa0a0da1098497e8bd57691fa55" dependencies = [ - "bs58 0.2.5", + "bs58", "cash_addr", "failure", ] @@ -257,28 +213,6 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" -[[package]] -name = "bellman_ce" -version = "0.3.2" -source = "git+https://github.com/matter-labs/bellman?branch=beta#416f79d3f93fc855fb96bb61bfe73d2472e95548" -dependencies = [ - "bit-vec", - "blake2s_simd", - "byteorder 1.4.3", - "cfg-if 1.0.0", - "futures 0.3.27", - "hex 0.4.3", - "num_cpus", - "pairing_ce", - "rand 0.4.6", -] - -[[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - [[package]] name = "bitcoin" version = "0.29.2" @@ -302,6 +236,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + [[package]] name = "bitvec" version = "1.0.1" @@ -314,17 +254,6 @@ dependencies = [ "wyz", ] -[[package]] -name = "blake2" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" -dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - [[package]] name = "blake2" version = "0.10.6" @@ -334,17 +263,6 @@ dependencies = [ "digest 0.10.6", ] -[[package]] -name = "blake2-rfc_bellman_edition" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc60350286c7c3db13b98e91dbe5c8b6830a6821bc20af5b0c310ce94d74915" -dependencies = [ - "arrayvec 0.4.12", - "byteorder 1.4.3", - "constant_time_eq 0.1.5", -] - [[package]] name = "blake2b-rs" version = "0.2.0" @@ -373,19 +291,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", - "arrayvec 0.7.2", - "constant_time_eq 0.2.5", + "arrayvec 0.7.4", + "constant_time_eq 0.2.6", ] [[package]] name = "blake2s_simd" -version = "0.5.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec 0.5.2", - "constant_time_eq 0.1.5", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", +] + +[[package]] +name = "blake3" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "cc", + "cfg-if", + "constant_time_eq 0.3.0", ] [[package]] @@ -418,16 +349,6 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "block-modes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" -dependencies = [ - "block-padding 0.2.1", - "cipher 0.2.5", -] - [[package]] name = "block-padding" version = "0.1.5" @@ -439,24 +360,11 @@ dependencies = [ [[package]] name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - -[[package]] -name = "bls-signatures" -version = "0.6.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "863020d4fead1c6090d754cf542cd723c124859543f595c65e8c6f11377a4223" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "fff", - "groupy", - "hkdf 0.8.0", - "paired", - "rand_core 0.5.1", - "rayon", - "sha2ni", - "thiserror", + "generic-array 0.14.7", ] [[package]] @@ -506,17 +414,11 @@ dependencies = [ "sha2 0.8.2", ] -[[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" - [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -551,22 +453,6 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -dependencies = [ - "byteorder 1.4.3", - "iovec", -] - -[[package]] -name = "bytes" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" - [[package]] name = "bytes" version = "1.4.0" @@ -590,16 +476,22 @@ dependencies = [ ] [[package]] -name = "cc" -version = "1.0.79" +name = "cbc" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] [[package]] -name = "cfg-if" -version = "0.1.10" +name = "cc" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -609,15 +501,14 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.20" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6127248204b9aba09a362f6c930ef6a78f2c1b2215f8a7b398c06e1083f17af0" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ - "js-sys", - "num-integer", + "android-tzdata", + "iana-time-zone", "num-traits", - "wasm-bindgen", - "winapi", + "windows-targets 0.48.5", ] [[package]] @@ -627,17 +518,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff0e3bc0b6446b3f9663c1a6aba6ef06c5aeaa1bc92bd18077be337198ab9768" dependencies = [ "multibase 0.8.0", - "multihash", - "unsigned-varint", -] - -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array 0.14.7", + "multihash 0.13.2", + "unsigned-varint 0.5.1", ] [[package]] @@ -655,18 +537,18 @@ dependencies = [ name = "coin-bch" version = "0.1.0" dependencies = [ + "anyhow", "bch_addr", "bitcoin", "bitcoin_hashes", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", + "hex", "ikc-common", "ikc-device", "ikc-transport", "num-bigint 0.4.3", - "prost 0.11.8", - "prost-types 0.11.8", + "prost", + "prost-types", "secp256k1", "serde", "serde_json", @@ -677,18 +559,17 @@ dependencies = [ name = "coin-bitcoin" version = "0.1.0" dependencies = [ + "anyhow", "bitcoin", "bitcoin_hashes", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", + "hex", "ikc-common", "ikc-device", "ikc-transport", "num-bigint 0.4.3", - "prost 0.11.8", - "prost-types 0.11.8", - "ring", + "prost", + "prost-types", "secp256k1", ] @@ -696,21 +577,21 @@ dependencies = [ name = "coin-btc-fork" version = "0.1.0" dependencies = [ + "anyhow", "base64 0.13.1", "bech32 0.9.1", "bitcoin", "bitcoin_hashes", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", + "hex", "ikc-common", "ikc-device", "ikc-transport", "lazy_static", "num-bigint 0.4.3", "parking_lot", - "prost 0.11.8", - "prost-types 0.11.8", + "prost", + "prost-types", "secp256k1", "serde", "serde_json", @@ -721,32 +602,33 @@ dependencies = [ name = "coin-ckb" version = "0.1.0" dependencies = [ + "anyhow", "base64 0.13.1", "bech32 0.9.1", "bitcoin", "blake2b-rs", "byteorder 1.4.3", - "failure", - "hex 0.4.3", + "hex", "ikc-common", "ikc-device", "ikc-transport", "lazy_static", - "prost 0.11.8", + "prost", "secp256k1", + "thiserror", ] [[package]] name = "coin-cosmos" version = "0.1.0" dependencies = [ + "anyhow", "base64 0.13.1", "bech32 0.9.1", "bitcoin", "bitcoin_hashes", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", + "hex", "ikc-common", "ikc-device", "ikc-transport", @@ -754,9 +636,8 @@ dependencies = [ "num-bigint 0.4.3", "num-integer", "num-traits", - "prost 0.11.8", - "prost-types 0.11.8", - "ring", + "prost", + "prost-types", "secp256k1", "serde", "serde_derive", @@ -767,29 +648,29 @@ dependencies = [ name = "coin-eos" version = "0.1.0" dependencies = [ + "anyhow", "bitcoin", "bitcoin_hashes", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", + "hex", "ikc-common", "ikc-device", "ikc-transport", - "prost 0.11.8", - "prost-types 0.11.8", + "prost", + "prost-types", ] [[package]] name = "coin-ethereum" version = "0.1.0" dependencies = [ + "anyhow", + "base64 0.13.1", "bitcoin", "bitcoin_hashes", - "bytes 1.4.0", - "dotenv", + "bytes", "ethereum-types", - "failure", - "hex 0.4.3", + "hex", "ikc-common", "ikc-device", "ikc-transport", @@ -799,37 +680,38 @@ dependencies = [ "num-bigint 0.4.3", "num-integer", "num-traits", - "prost 0.11.8", - "prost-types 0.11.8", - "regex 1.7.3", + "prost", + "prost-types", + "regex", "rlp", "rustc-hex", "secp256k1", "serde", "serde_derive", "serde_json", - "tiny-keccak 2.0.2", + "tiny-keccak", ] [[package]] name = "coin-filecoin" version = "0.1.0" dependencies = [ + "anyhow", "base32", "base64 0.13.1", "bech32 0.9.1", + "bitcoin", "bitcoin_hashes", "blake2b-rs", - "bytes 1.4.0", - "failure", + "bytes", "forest_address", "forest_bigint", "forest_cid", - "forest_crypto 0.4.1", + "forest_crypto", "forest_encoding", - "forest_message 0.6.1", + "forest_message", "forest_vm", - "hex 0.4.3", + "hex", "ikc-common", "ikc-device", "ikc-transport", @@ -837,12 +719,10 @@ dependencies = [ "num-bigint 0.4.3", "num-integer", "num-traits", - "prost 0.11.8", - "prost-types 0.11.8", - "ring", + "prost", + "prost-types", "secp256k1", "serde", - "serde_cbor", "serde_json", ] @@ -850,13 +730,13 @@ dependencies = [ name = "coin-substrate" version = "0.1.0" dependencies = [ - "failure", - "hex 0.4.3", + "anyhow", + "hex", "ikc-common", "ikc-device", "ikc-transport", - "prost 0.11.8", - "prost-types 0.11.8", + "prost", + "prost-types", "sp-core", "sp-keyring", "sp-runtime", @@ -866,48 +746,39 @@ dependencies = [ name = "coin-tezos" version = "0.1.0" dependencies = [ + "anyhow", "bitcoin", "blake2b_simd 1.0.1", - "failure", - "hex 0.4.3", + "hex", "ikc-common", "ikc-device", "ikc-transport", - "prost 0.11.8", - "prost-types 0.11.8", + "prost", + "prost-types", ] [[package]] name = "coin-tron" version = "0.1.0" dependencies = [ + "anyhow", "bitcoin", - "failure", - "hex 0.4.3", + "byteorder 1.4.3", + "hex", "ikc-common", "ikc-device", "ikc-transport", "keccak-hash", - "prost 0.11.8", + "prost", "secp256k1", - "tiny-keccak 2.0.2", -] - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen", + "tiny-keccak", ] [[package]] name = "const-oid" -version = "0.9.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "constant_time_eq" @@ -917,76 +788,48 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "constant_time_eq" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" - -[[package]] -name = "core-foundation" -version = "0.9.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] +checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" [[package]] -name = "core-foundation-sys" -version = "0.8.3" +name = "constant_time_eq" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] -name = "cpufeatures" -version = "0.2.6" +name = "core-foundation" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ + "core-foundation-sys", "libc", ] [[package]] -name = "crossbeam-channel" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.3" +name = "core-foundation-sys" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch", - "crossbeam-utils", -] +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] -name = "crossbeam-epoch" -version = "0.9.14" +name = "core2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" dependencies = [ - "autocfg", - "cfg-if 1.0.0", - "crossbeam-utils", - "memoffset", - "scopeguard", + "memchr", ] [[package]] -name = "crossbeam-utils" -version = "0.8.15" +name = "cpufeatures" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ - "cfg-if 1.0.0", + "libc", ] [[package]] @@ -1006,16 +849,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - [[package]] name = "crypto-mac" version = "0.8.0" @@ -1023,17 +856,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ "generic-array 0.14.7", - "subtle 2.4.1", -] - -[[package]] -name = "crypto-mac" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bcd97a54c7ca5ce2f6eb16f6bede5b0ab5f0055fedc17d2f0b4466e21671ca" -dependencies = [ - "generic-array 0.14.7", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -1043,7 +866,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ "generic-array 0.14.7", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -1073,11 +896,11 @@ dependencies = [ [[package]] name = "ctr" -version = "0.6.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.2.5", + "cipher", ] [[package]] @@ -1095,7 +918,7 @@ dependencies = [ "byteorder 1.4.3", "digest 0.8.1", "rand_core 0.5.1", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -1108,10 +931,38 @@ dependencies = [ "byteorder 1.4.3", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.4.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.6", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", "zeroize", ] +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "darling" version = "0.10.2" @@ -1130,8 +981,8 @@ checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "strsim", "syn 1.0.109", ] @@ -1143,21 +994,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" dependencies = [ "darling_core", - "quote 1.0.26", + "quote", "syn 1.0.109", ] [[package]] -name = "data-encoding" -version = "2.3.3" +name = "dashmap" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" - +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + [[package]] name = "data-encoding-macro" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" +checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1165,9 +1029,9 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" +checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3" dependencies = [ "data-encoding", "syn 1.0.109", @@ -1184,6 +1048,22 @@ dependencies = [ "zeroize", ] +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + [[package]] name = "derive_builder" version = "0.9.0" @@ -1192,8 +1072,8 @@ checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0" dependencies = [ "darling", "derive_builder_core", - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -1204,8 +1084,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" dependencies = [ "darling", - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -1215,8 +1095,8 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -1253,16 +1133,7 @@ dependencies = [ "block-buffer 0.10.4", "const-oid", "crypto-common", - "subtle 2.4.1", -] - -[[package]] -name = "dotenv" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "400b347fe65ccfbd8f545c9d9a75d04b0caf23fec49aaa838a9a05398f94c019" -dependencies = [ - "regex 0.2.11", + "subtle", ] [[package]] @@ -1293,24 +1164,25 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", ] [[package]] name = "dyn-clone" -version = "1.0.11" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" [[package]] name = "ed25519" -version = "1.5.3" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "signature", + "pkcs8 0.10.2", + "signature 2.1.0", ] [[package]] @@ -1324,18 +1196,30 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "1.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" dependencies = [ - "curve25519-dalek 3.2.0", + "curve25519-dalek 4.1.1", "ed25519", - "rand 0.7.3", + "rand_core 0.6.4", "serde", - "sha2 0.9.9", + "sha2 0.10.6", + "subtle", "zeroize", ] +[[package]] +name = "ed25519-dalek-bip32" +version = "0.3.0" +dependencies = [ + "derivation-path", + "ed25519-dalek", + "hex", + "hmac 0.12.1", + "sha2 0.10.6", +] + [[package]] name = "ed25519-zebra" version = "3.1.0" @@ -1343,8 +1227,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ "curve25519-dalek 3.2.0", - "hashbrown", - "hex 0.4.3", + "hashbrown 0.12.3", + "hex", "rand_core 0.6.4", "sha2 0.9.9", "zeroize", @@ -1352,9 +1236,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "environmental" @@ -1363,24 +1247,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] -name = "errno" -version = "0.3.0" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.45.0", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "errno" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -1393,14 +1272,14 @@ dependencies = [ "fixed-hash", "impl-rlp", "impl-serde", - "tiny-keccak 2.0.2", + "tiny-keccak", ] [[package]] name = "ethereum-types" -version = "0.14.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +checksum = "81224dc661606574f5a0f28c9947d0ee1d93ff11c5f1c4e7272f52e8c0b5483c" dependencies = [ "ethbloom", "fixed-hash", @@ -1426,8 +1305,8 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", "synstructure", ] @@ -1447,32 +1326,6 @@ dependencies = [ "instant", ] -[[package]] -name = "ff_ce" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38107cbd8bac0d907d7e7513c9f68c95adbda9e6f6f6bdf3f5111c6ecac4fe47" -dependencies = [ - "byteorder 1.4.3", - "ff_derive_ce", - "hex 0.4.3", - "rand 0.4.6", -] - -[[package]] -name = "ff_derive_ce" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde5a00073374b4d7aa2d3a8359a5709f9c0bfac8393f254655d16b4acdfe823" -dependencies = [ - "num-bigint 0.4.3", - "num-integer", - "num-traits", - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 1.0.109", -] - [[package]] name = "fff" version = "0.2.3" @@ -1481,24 +1334,15 @@ checksum = "2544d325b4870bd803d371a7df3c6845e84dcfcb6ebe7ffcae0eac6d5d676133" dependencies = [ "byteorder 1.4.3", "cc", - "fff_derive", "lazy_static", "rand_core 0.5.1", ] [[package]] -name = "fff_derive" -version = "0.2.2" +name = "fiat-crypto" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "844b389fbe323d3b35ed1b3b119e75b11dca536d291d31342acea5b4c8984558" -dependencies = [ - "num-bigint 0.2.6", - "num-integer", - "num-traits", - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 1.0.109", -] +checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" [[package]] name = "fixed-hash" @@ -1512,12 +1356,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "fixedbitset" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" - [[package]] name = "fixedbitset" version = "0.4.2" @@ -1597,24 +1435,8 @@ dependencies = [ "generic-array 0.14.7", "integer-encoding", "multibase 0.9.1", - "multihash", - "serde", -] - -[[package]] -name = "forest_crypto" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40035f5bb36362e9b6200ecdc11a1008169f1d60a01dcd9e1000a808f86cae6f" -dependencies = [ - "bls-signatures 0.6.1", - "forest_address", - "forest_encoding", - "libsecp256k1 0.3.5", - "num-derive", - "num-traits", + "multihash 0.13.2", "serde", - "thiserror", ] [[package]] @@ -1623,7 +1445,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecfe12e10b7f6aa5643dcde74533d8192720ab7366ce473ff4043c71b5132c27" dependencies = [ - "bls-signatures 0.9.0", + "bls-signatures", "forest_address", "forest_encoding", "libsecp256k1 0.6.0", @@ -1658,23 +1480,6 @@ dependencies = [ "serde", ] -[[package]] -name = "forest_message" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4935036b1da07044b4c50cc7c228517be74f12a66fbbc6661c6f359a05f1dc74" -dependencies = [ - "derive_builder", - "forest_address", - "forest_bigint", - "forest_cid", - "forest_crypto 0.4.1", - "forest_encoding", - "forest_vm", - "num-traits", - "serde", -] - [[package]] name = "forest_message" version = "0.7.2" @@ -1685,7 +1490,7 @@ dependencies = [ "forest_address", "forest_bigint", "forest_cid", - "forest_crypto 0.5.3", + "forest_crypto", "forest_encoding", "forest_vm", "num-traits", @@ -1715,39 +1520,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" -[[package]] -name = "franklin-crypto" -version = "0.0.5" -source = "git+https://github.com/matter-labs/franklin-crypto.git?branch=beta#6e448d23161eacabb9465dc3181b7b15174cda2f" -dependencies = [ - "bellman_ce", - "bit-vec", - "blake2 0.9.2", - "blake2-rfc_bellman_edition", - "blake2s_simd", - "byteorder 1.4.3", - "digest 0.9.0", - "hex 0.4.3", - "hmac 0.11.0", - "itertools 0.9.0", - "num-bigint 0.3.3", - "num-integer", - "num-traits", - "poseidon_hash", - "rand 0.4.6", - "serde", - "serde_derive", - "sha2 0.9.9", - "splitmut", - "tiny-keccak 1.5.0", -] - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - [[package]] name = "funty" version = "2.0.0" @@ -1756,15 +1528,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" - -[[package]] -name = "futures" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -1777,9 +1543,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -1787,15 +1553,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -1805,38 +1571,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -1875,7 +1641,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "libc", "wasi 0.9.0+wasi-snapshot-preview1", @@ -1884,20 +1650,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] name = "gimli" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" [[package]] name = "glob" @@ -1919,11 +1685,11 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.16" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ - "bytes 1.4.0", + "bytes", "fnv", "futures-core", "futures-sink", @@ -1967,13 +1733,10 @@ dependencies = [ ] [[package]] -name = "heck" -version = "0.3.3" +name = "hashbrown" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heck" @@ -1983,24 +1746,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -2016,9 +1764,9 @@ checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" [[package]] name = "hidapi" -version = "2.2.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4255d387f1961f1d469ef24acc5620d4b1b15a7b763b759d9b29f095164ee27" +checksum = "29839436a2de4587be0b5ef083492a5dcee40ac98404e63410dc98c916251ca7" dependencies = [ "cc", "libc", @@ -2026,16 +1774,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "hkdf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa08a006102488bd9cd5b8013aabe84955cf5ae22e304c2caf655b633aefae3" -dependencies = [ - "digest 0.8.1", - "hmac 0.7.1", -] - [[package]] name = "hkdf" version = "0.12.3" @@ -2045,16 +1783,6 @@ dependencies = [ "hmac 0.12.1", ] -[[package]] -name = "hmac" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" -dependencies = [ - "crypto-mac 0.7.0", - "digest 0.8.1", -] - [[package]] name = "hmac" version = "0.8.1" @@ -2065,16 +1793,6 @@ dependencies = [ "digest 0.9.0", ] -[[package]] -name = "hmac" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deae6d9dbb35ec2c502d62b8f7b1c000a0822c3b0794ba36b3149c0a1c840dff" -dependencies = [ - "crypto-mac 0.9.1", - "digest 0.9.0", -] - [[package]] name = "hmac" version = "0.11.0" @@ -2094,17 +1812,6 @@ dependencies = [ "digest 0.10.6", ] -[[package]] -name = "hmac-drbg" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" -dependencies = [ - "digest 0.8.1", - "generic-array 0.12.4", - "hmac 0.7.1", -] - [[package]] name = "hmac-drbg" version = "0.3.0" @@ -2116,24 +1823,30 @@ dependencies = [ "hmac 0.8.1", ] +[[package]] +name = "hmac-sha256" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc736091aacb31ddaa4cd5f6988b3c21e99913ac846b41f32538c5fae5d71bfe" + [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ - "bytes 1.4.0", + "bytes", "fnv", "itoa", ] [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "bytes 1.4.0", + "bytes", "http", "pin-project-lite", ] @@ -2146,17 +1859,17 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.25" +version = "0.14.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" +checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" dependencies = [ - "bytes 1.4.0", + "bytes", "futures-channel", "futures-core", "futures-util", @@ -2192,13 +1905,36 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes 1.4.0", + "bytes", "hyper", "native-tls", "tokio", "tokio-native-tls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -2209,9 +1945,10 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" name = "ikc" version = "0.1.0" dependencies = [ + "anyhow", "base64 0.13.1", "bitcoin", - "bytes 1.4.0", + "bytes", "coin-bch", "coin-bitcoin", "coin-btc-fork", @@ -2224,8 +1961,7 @@ dependencies = [ "coin-tezos", "coin-tron", "ethereum-types", - "failure", - "hex 0.4.3", + "hex", "ikc-common", "ikc-device", "ikc-transport", @@ -2233,8 +1969,8 @@ dependencies = [ "linked-hash-map", "log", "parking_lot", - "prost 0.11.8", - "prost-types 0.11.8", + "prost", + "prost-types", "serde_json", ] @@ -2242,13 +1978,14 @@ dependencies = [ name = "ikc-common" version = "0.1.0" dependencies = [ - "aes-ctr", - "aes-soft", + "aes", + "anyhow", + "base64 0.13.1", "bitcoin", - "block-modes", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "byteorder 1.4.3", + "bytes", + "cbc", + "hex", "hyper", "hyper-timeout", "hyper-tls", @@ -2257,15 +1994,15 @@ dependencies = [ "num-integer", "num-traits", "parking_lot", - "prost 0.11.8", - "prost-types 0.11.8", - "regex 1.7.3", - "ring", + "prost", + "prost-types", + "regex", "rustc-serialize", "secp256k1", "serde", "serde_derive", "serde_json", + "thiserror", "tokio", ] @@ -2273,51 +2010,49 @@ dependencies = [ name = "ikc-device" version = "0.1.0" dependencies = [ - "aes-ctr", - "aes-soft", + "anyhow", "base64 0.13.1", - "block-modes", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", + "hex", "ikc-common", "ikc-transport", "lazy_static", "log", "parking_lot", - "prost 0.11.8", - "prost-types 0.11.8", + "prost", + "prost-types", "rand 0.8.5", - "regex 1.7.3", - "ring", + "regex", "rsa", "secp256k1", "serde", "serde_derive", "serde_json", "sha1", + "thiserror", ] [[package]] name = "ikc-proto" version = "0.1.0" dependencies = [ - "bytes 1.4.0", - "prost 0.11.8", - "prost-build 0.6.1", - "prost-types 0.5.0", + "bytes", + "prost", + "prost-build", + "prost-types", ] [[package]] name = "ikc-transport" version = "0.1.0" dependencies = [ + "anyhow", "cargo-husky", - "failure", - "hex 0.4.3", + "hex", "hidapi", "lazy_static", "parking_lot", + "thiserror", ] [[package]] @@ -2353,19 +2088,19 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", ] [[package]] name = "indexmap" -version = "1.9.3" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ - "autocfg", - "hashbrown", + "equivalent", + "hashbrown 0.14.3", ] [[package]] @@ -2374,6 +2109,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ + "block-padding 0.3.3", "generic-array 0.14.7", ] @@ -2383,7 +2119,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -2403,87 +2139,35 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] -name = "iop-keyvault" -version = "0.0.5" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce717766464892e71516a8960818a0233ef6d70f324985763e85fe58cb94bfc" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ - "anyhow", - "blake2 0.9.2", - "digest 0.9.0", - "ed25519-dalek", - "failure", - "getrandom 0.1.16", - "hex 0.4.3", - "hmac 0.9.0", - "libsecp256k1 0.3.5", - "multibase 0.8.0", - "orion", - "rand 0.7.3", - "ripemd160", - "serde", - "serde_bytes", - "sha2 0.9.9", - "tiny-bip39 0.7.3", + "either", ] [[package]] -name = "iovec" -version = "0.1.4" +name = "itoa" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - -[[package]] -name = "itertools" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "js-sys" -version = "0.3.37" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a27d435371a2fa5b6d2b028a74bbdb1234f308da363226a2854ca3ff8ba7055" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] @@ -2494,7 +2178,7 @@ version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" dependencies = [ - "futures 0.3.27", + "futures", "futures-executor", "futures-util", "log", @@ -2505,9 +2189,9 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" dependencies = [ "cpufeatures", ] @@ -2519,7 +2203,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b286e6b663fb926e1eeb68528e69cb70ed46c6d65871a21b2215ae8154c6d3c" dependencies = [ "primitive-types", - "tiny-keccak 2.0.2", + "tiny-keccak", ] [[package]] @@ -2545,25 +2229,9 @@ checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libm" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" - -[[package]] -name = "libsecp256k1" -version = "0.3.5" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" -dependencies = [ - "arrayref", - "crunchy", - "digest 0.8.1", - "hmac-drbg 0.2.0", - "rand 0.7.3", - "sha2 0.8.2", - "subtle 2.4.1", - "typenum", -] +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libsecp256k1" @@ -2574,7 +2242,7 @@ dependencies = [ "arrayref", "base64 0.12.3", "digest 0.9.0", - "hmac-drbg 0.3.0", + "hmac-drbg", "libsecp256k1-core 0.2.2", "libsecp256k1-gen-ecmult 0.2.1", "libsecp256k1-gen-genmult 0.2.1", @@ -2593,7 +2261,7 @@ dependencies = [ "arrayref", "base64 0.13.1", "digest 0.9.0", - "hmac-drbg 0.3.0", + "hmac-drbg", "libsecp256k1-core 0.3.0", "libsecp256k1-gen-ecmult 0.3.0", "libsecp256k1-gen-genmult 0.3.0", @@ -2611,7 +2279,7 @@ checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" dependencies = [ "crunchy", "digest 0.9.0", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -2622,7 +2290,7 @@ checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" dependencies = [ "crunchy", "digest 0.9.0", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -2672,15 +2340,15 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.3.0" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -2692,7 +2360,7 @@ version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -2701,7 +2369,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "hashbrown", + "hashbrown 0.12.3", ] [[package]] @@ -2710,33 +2378,14 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" dependencies = [ - "regex-automata", -] - -[[package]] -name = "mathru" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7584d97fddf282cc3e5cc6fae54e596cfcd708a3b375633294d9db8e8b6d776" -dependencies = [ - "rand 0.7.3", - "serde", + "regex-automata 0.1.10", ] [[package]] name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.8.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memory-db" @@ -2745,7 +2394,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34ac11bb793c28fa095b7554466f53b3a60a2cd002afdac01bcf135cbd73a269" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.12.3", "parity-util-mem", ] @@ -2778,23 +2427,22 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "mockall" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "downcast", "fragile", "lazy_static", @@ -2805,13 +2453,13 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" +checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" dependencies = [ - "cfg-if 1.0.0", - "proc-macro2 1.0.54", - "quote 1.0.26", + "cfg-if", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -2845,8 +2493,25 @@ checksum = "4dac63698b887d2d929306ea48b63760431ff8a24fac40ddb22f9c7f49fb7cab" dependencies = [ "blake2b_simd 0.5.11", "generic-array 0.14.7", - "multihash-derive", - "unsigned-varint", + "multihash-derive 0.7.2", + "unsigned-varint 0.5.1", +] + +[[package]] +name = "multihash" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd8a792c1694c6da4f68db0a9d707c72bd260994da179e6030a5dcee00bb815" +dependencies = [ + "blake2b_simd 1.0.1", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.6", + "multihash-derive 0.8.1", + "sha2 0.10.6", + "sha3", + "unsigned-varint 0.7.2", ] [[package]] @@ -2855,10 +2520,24 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "424f6e86263cd5294cbd7f1e95746b95aca0e0d66bff31e5a40d6baa87b4aa99" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "multihash-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" +dependencies = [ + "proc-macro-crate 1.1.3", "proc-macro-error", - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", "synstructure", ] @@ -2887,12 +2566,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - [[package]] name = "nohash-hasher" version = "0.2.0" @@ -2905,17 +2578,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" -[[package]] -name = "num-bigint" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.3.3" @@ -2940,9 +2602,9 @@ dependencies = [ [[package]] name = "num-bigint-dig" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2399c9463abc5f909349d8aa9ba080e0b88b3ce2885389b60b993f39b1a56905" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" dependencies = [ "byteorder 1.4.3", "lazy_static", @@ -2955,24 +2617,14 @@ dependencies = [ "zeroize", ] -[[package]] -name = "num-complex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" -dependencies = [ - "autocfg", - "num-traits", -] - [[package]] name = "num-derive" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -2982,7 +2634,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.4", "itoa", ] @@ -3031,31 +2683,28 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi", "libc", ] [[package]] name = "object" -version = "0.30.3" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.17.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" -dependencies = [ - "parking_lot_core", -] +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" @@ -3071,12 +2720,12 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.48" +version = "0.10.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2" +checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" dependencies = [ - "bitflags", - "cfg-if 1.0.0", + "bitflags 2.4.1", + "cfg-if", "foreign-types", "libc", "once_cell", @@ -3086,13 +2735,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -3103,66 +2752,26 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.83" +version = "0.9.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666416d899cf077260dac8698d60a60b435a46d57e82acb1be3d0dad87284e5b" +checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" dependencies = [ - "autocfg", "cc", "libc", "pkg-config", "vcpkg", ] -[[package]] -name = "orion" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ee35b1dab594706a44b4e48045ebcb699f688dfb25c168fcd1642b5e2bc2be" -dependencies = [ - "base64 0.13.1", - "getrandom 0.2.8", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "paired" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ae957e986289a03f1407ce9c88f19e8280e8106d5498a364e3e5b60b1b9fc" -dependencies = [ - "blake2b_simd 0.5.11", - "byteorder 1.4.3", - "digest 0.8.1", - "fff", - "groupy", - "hkdf 0.8.0", - "rand_core 0.5.1", -] - -[[package]] -name = "pairing_ce" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e753515675eaaa98071d814bea0148ae8c9d7995fa0531bf222e7857e3f1759" -dependencies = [ - "byteorder 1.4.3", - "cfg-if 1.0.0", - "ff_ce", - "rand 0.4.6", -] - [[package]] name = "parity-scale-codec" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" +checksum = "5ddb756ca205bd108aee3c62c6d3c994e1df84a59b9d6d4a5ea42ee1fd5a9a28" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.4", "bitvec", "byte-slice-cast", - "bytes 1.4.0", + "bytes", "impl-trait-for-tuples", "parity-scale-codec-derive", "serde", @@ -3170,13 +2779,13 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.1.4" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro-crate 2.0.0", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -3186,8 +2795,8 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d32c34f4f5ca7f9196001c0aba5a1f9a5a12382c8944b8b0f90233282d1e8f8" dependencies = [ - "cfg-if 1.0.0", - "hashbrown", + "cfg-if", + "hashbrown 0.12.3", "impl-trait-for-tuples", "parity-util-mem-derive", "parking_lot", @@ -3201,7 +2810,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" dependencies = [ - "proc-macro2 1.0.54", + "proc-macro2", "syn 1.0.109", "synstructure", ] @@ -3224,15 +2833,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.4.1", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.48.5", ] [[package]] @@ -3243,24 +2852,14 @@ checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" dependencies = [ "base64ct", "rand_core 0.6.4", - "subtle 2.4.1", + "subtle", ] [[package]] name = "paste" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" - -[[package]] -name = "pbkdf2" -version = "0.3.0" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9" -dependencies = [ - "byteorder 1.4.3", - "crypto-mac 0.7.0", -] +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "pbkdf2" @@ -3303,29 +2902,19 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" -dependencies = [ - "fixedbitset 0.2.0", - "indexmap", -] - -[[package]] -name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ - "fixedbitset 0.4.2", + "fixedbitset", "indexmap", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -3339,9 +2928,9 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719" dependencies = [ - "der", - "pkcs8", - "spki", + "der 0.6.1", + "pkcs8 0.9.0", + "spki 0.6.0", "zeroize", ] @@ -3351,15 +2940,31 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" dependencies = [ - "der", - "spki", + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.8", + "spki 0.7.3", ] [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" + +[[package]] +name = "platforms" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" [[package]] name = "poly1305" @@ -3372,25 +2977,6 @@ dependencies = [ "universal-hash", ] -[[package]] -name = "poseidon_hash" -version = "0.0.1" -source = "git+https://github.com/shamatar/poseidon_hash.git#495ae87ff066d066b140c7d0dff8d929b87d31ee" -dependencies = [ - "alga", - "approx", - "blake2-rfc_bellman_edition", - "byteorder 1.4.3", - "mathru", - "num-bigint 0.2.6", - "num-integer", - "num-traits", - "pairing_ce", - "rand 0.4.6", - "sha2 0.8.2", - "tiny-keccak 1.5.0", -] - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -3405,10 +2991,10 @@ checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" dependencies = [ "difflib", "float-cmp", - "itertools 0.10.5", + "itertools", "normalize-line-endings", "predicates-core", - "regex 1.7.3", + "regex", ] [[package]] @@ -3433,15 +3019,15 @@ version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ - "proc-macro2 1.0.54", + "proc-macro2", "syn 1.0.109", ] [[package]] name = "primitive-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", @@ -3453,11 +3039,20 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" dependencies = [ - "once_cell", "toml_edit", ] @@ -3468,8 +3063,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", "version_check", ] @@ -3480,184 +3075,82 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "version_check", ] [[package]] name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -dependencies = [ - "unicode-xid 0.1.0", -] - -[[package]] -name = "proc-macro2" -version = "1.0.54" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" dependencies = [ "unicode-ident", ] [[package]] name = "prost" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d14b1c185652833d24aaad41c5832b0be5616a590227c1fbff57c616754b23" -dependencies = [ - "byteorder 1.4.3", - "bytes 0.4.12", - "prost-derive 0.5.0", -] - -[[package]] -name = "prost" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce49aefe0a6144a45de32927c77bd2859a5f7677b55f220ae5b744e87389c212" -dependencies = [ - "bytes 0.5.6", - "prost-derive 0.6.1", -] - -[[package]] -name = "prost" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" -dependencies = [ - "bytes 1.4.0", - "prost-derive 0.11.8", -] - -[[package]] -name = "prost-build" -version = "0.6.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b10678c913ecbd69350e8535c3aef91a8676c0773fc1d7b95cdd196d7f2f26" +checksum = "a0841812012b2d4a6145fae9a6af1534873c32aa67fff26bd09f8fa42c83f95a" dependencies = [ - "bytes 0.5.6", - "heck 0.3.3", - "itertools 0.8.2", - "log", - "multimap", - "petgraph 0.5.1", - "prost 0.6.1", - "prost-types 0.6.1", - "tempfile", - "which 3.1.1", + "bytes", + "prost-derive", ] [[package]] name = "prost-build" -version = "0.11.8" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12" +checksum = "276470f7f281b0ed53d2ae42dd52b4a8d08853a3c70e7fe95882acbb98a6ae94" dependencies = [ - "bytes 1.4.0", - "heck 0.4.1", - "itertools 0.10.5", + "bytes", + "heck", + "itertools", "lazy_static", "log", "multimap", - "petgraph 0.6.3", + "petgraph", "prettyplease", - "prost 0.11.8", - "prost-types 0.11.8", - "regex 1.7.3", + "prost", + "prost-types", + "regex", "syn 1.0.109", "tempfile", - "which 4.4.0", -] - -[[package]] -name = "prost-derive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e7dc378b94ac374644181a2247cebf59a6ec1c88b49ac77f3a94b86b79d0e11" -dependencies = [ - "failure", - "itertools 0.8.2", - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", + "which", ] [[package]] name = "prost-derive" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537aa19b95acde10a12fec4301466386f757403de4cd4e5b4fa78fb5ecb18f72" -dependencies = [ - "anyhow", - "itertools 0.8.2", - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 1.0.109", -] - -[[package]] -name = "prost-derive" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", - "itertools 0.10.5", - "proc-macro2 1.0.54", - "quote 1.0.26", + "itertools", + "proc-macro2", + "quote", "syn 1.0.109", ] [[package]] name = "prost-types" -version = "0.5.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1de482a366941c8d56d19b650fac09ca08508f2a696119ee7513ad590c8bac6f" +checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" dependencies = [ - "bytes 0.4.12", - "prost 0.5.0", + "bytes", + "prost", ] [[package]] -name = "prost-types" -version = "0.6.1" +name = "quote" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1834f67c0697c001304b75be76f67add9c89742eda3a085ad8ee0bb38c3417aa" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ - "bytes 0.5.6", - "prost 0.6.1", -] - -[[package]] -name = "prost-types" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" -dependencies = [ - "prost 0.11.8", -] - -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -dependencies = [ - "proc-macro2 0.4.30", -] - -[[package]] -name = "quote" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" -dependencies = [ - "proc-macro2 1.0.54", + "proc-macro2", ] [[package]] @@ -3666,19 +3159,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "rand" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -dependencies = [ - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "rdrand", - "winapi", -] - [[package]] name = "rand" version = "0.7.3" @@ -3724,21 +3204,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - [[package]] name = "rand_core" version = "0.5.1" @@ -3754,7 +3219,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", ] [[package]] @@ -3784,108 +3249,54 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "raw-cpuid" -version = "7.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb71f708fe39b2c5e98076204c3cc094ee5a4c12c4cdb119a2b72dc34164f41" -dependencies = [ - "bitflags", - "cc", - "rustc_version", -] - -[[package]] -name = "rayon" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "ref-cast" -version = "1.0.16" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" +checksum = "53313ec9f12686aeeffb43462c3ac77aa25f590a5f630eb2cde0de59417b29c7" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" -dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 2.0.11", -] - -[[package]] -name = "regex" -version = "0.2.11" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" +checksum = "2566c4bf6845f2c2e83b27043c3f5dfcd5ba8f2937d6c00dc009bfb51a079dc4" dependencies = [ - "aho-corasick 0.6.10", - "memchr", - "regex-syntax 0.5.6", - "thread_local 0.3.6", - "utf8-ranges", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] name = "regex" -version = "1.7.3" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" dependencies = [ - "aho-corasick 0.7.20", + "aho-corasick", "memchr", - "regex-syntax 0.6.29", + "regex-automata 0.3.9", + "regex-syntax 0.7.5", ] [[package]] @@ -3898,12 +3309,14 @@ dependencies = [ ] [[package]] -name = "regex-syntax" -version = "0.5.6" +name = "regex-automata" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" +checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9" dependencies = [ - "ucd-util", + "aho-corasick", + "memchr", + "regex-syntax 0.7.5", ] [[package]] @@ -3913,30 +3326,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "ripemd160" -version = "0.9.1" +name = "regex-syntax" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eca4ecc81b7f313189bf73ce724400a07da2a6dac19588b03c8bd76a2dcc251" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "opaque-debug 0.3.0", -] +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "rlp" @@ -3944,7 +3337,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ - "bytes 1.4.0", + "bytes", "rustc-hex", ] @@ -3961,19 +3354,19 @@ dependencies = [ "num-iter", "num-traits", "pkcs1", - "pkcs8", + "pkcs8 0.9.0", "rand_core 0.6.4", - "signature", + "signature 1.6.4", "smallvec", - "subtle 2.4.1", + "subtle", "zeroize", ] [[package]] name = "rustc-demangle" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -3995,20 +3388,20 @@ checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" [[package]] name = "rustc_version" -version = "0.2.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.5" +version = "0.37.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75" +checksum = "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -4018,15 +3411,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "salsa20" @@ -4034,17 +3427,17 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cipher 0.4.4", + "cipher", ] [[package]] name = "scale-info" -version = "2.5.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cfdffd972d76b22f3d7f81c8be34b2296afd3a25e0a547bd9abe340a4dbbe97" +checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" dependencies = [ "bitvec", - "cfg-if 1.0.0", + "cfg-if", "derive_more", "parity-scale-codec", "scale-info-derive", @@ -4052,23 +3445,23 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.5.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61fa974aea2d63dd18a4ec3a49d59af9f34178c73a4f56d2f18205628d00681e" +checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", "syn 1.0.109", ] [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.52.0", ] [[package]] @@ -4085,21 +3478,15 @@ dependencies = [ "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", - "subtle 2.4.1", + "subtle", "zeroize", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" @@ -4144,11 +3531,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -4157,9 +3544,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -4167,63 +3554,35 @@ dependencies = [ [[package]] name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "serde" -version = "1.0.159" +version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" +checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" dependencies = [ "serde_derive", ] -[[package]] -name = "serde_bytes" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_cbor" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" -dependencies = [ - "half", - "serde", -] - [[package]] name = "serde_derive" -version = "1.0.159" +version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" +checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 2.0.11", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "serde_json" -version = "1.0.95" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" +checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" dependencies = [ "itoa", "ryu", @@ -4232,13 +3591,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.12" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" +checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 2.0.11", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -4257,11 +3616,36 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4076151d1a2b688e25aaf236997933c66e18b870d0369f8b248b8ab2be630d7e" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", ] +[[package]] +name = "serial_test" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d" +dependencies = [ + "dashmap", + "futures", + "lazy_static", + "log", + "parking_lot", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "sha1" version = "0.6.1" @@ -4296,7 +3680,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", @@ -4308,30 +3692,16 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.10.6", ] -[[package]] -name = "sha2ni" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce234f44a9c36fb84a168d4201b596d800e170aaa966a68857058cbe2d041a3" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "lazy_static", - "opaque-debug 0.2.3", - "raw-cpuid", -] - [[package]] name = "sha3" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ "digest 0.10.6", "keccak", @@ -4339,9 +3709,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -4365,20 +3735,26 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "signature" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" + [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "socket2" @@ -4428,12 +3804,12 @@ checksum = "88c78530907dbf7949af928d0ce88b485067389201b6d9b468074b1924f209f0" dependencies = [ "array-bytes", "base58", - "bitflags", - "blake2 0.10.6", + "bitflags 1.3.2", + "blake2", "byteorder 1.4.3", "dyn-clonable", "ed25519-zebra", - "futures 0.3.27", + "futures", "hash-db", "hash256-std-hasher", "impl-serde", @@ -4446,7 +3822,7 @@ dependencies = [ "parking_lot", "primitive-types", "rand 0.7.3", - "regex 1.7.3", + "regex", "scale-info", "schnorrkel", "secp256k1", @@ -4472,7 +3848,7 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49b9d1daa6aebfc144729b630885e91df92ff00560490ec065a56cb538e8895a" dependencies = [ - "blake2 0.10.6", + "blake2", "byteorder 1.4.3", "digest 0.10.6", "sha2 0.10.6", @@ -4487,8 +3863,8 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9e9ba7352773b96a4aa57e903447f841c6bc26e8c798377db6e7eb332346454" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -4510,8 +3886,8 @@ version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6280bd3643354f7ff0b2abd36c687745455779231a7a86d90945608f0d4924c4" dependencies = [ - "bytes 1.4.0", - "futures 0.3.27", + "bytes", + "futures", "hash-db", "libsecp256k1 0.7.1", "log", @@ -4540,7 +3916,7 @@ dependencies = [ "lazy_static", "sp-core", "sp-runtime", - "strum", + "strum 0.24.1", ] [[package]] @@ -4550,7 +3926,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44bec4f0d036b6993c14bbee4216781f21275e5c201e43e45fed4a434bf0e5a" dependencies = [ "async-trait", - "futures 0.3.27", + "futures", "merlin", "parity-scale-codec", "parking_lot", @@ -4568,7 +3944,7 @@ checksum = "97549ec99cb289db2a9f5c656b6880f7c90097135e1ca6c6ae4fe5694232e526" dependencies = [ "backtrace", "lazy_static", - "regex 1.7.3", + "regex", ] [[package]] @@ -4601,7 +3977,7 @@ version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b886a5d34400b0e0c12d389e3bb48b7a93d651cddf7e248124b81fe64c339251" dependencies = [ - "bytes 1.4.0", + "bytes", "impl-trait-for-tuples", "parity-scale-codec", "primitive-types", @@ -4621,9 +3997,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a157f1ce0108b9b87f87e826726049d9b6253318b74410c814be7fc2af416b51" dependencies = [ "Inflector", - "proc-macro-crate", - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -4691,7 +4067,7 @@ checksum = "2f4f48c887e90050537e399d2d8b6ee82787ebec0fe46e4880b42cab0c2d5ba6" dependencies = [ "ahash", "hash-db", - "hashbrown", + "hashbrown 0.12.3", "lazy_static", "lru", "memory-db", @@ -4750,28 +4126,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ "base64ct", - "der", + "der 0.6.1", ] [[package]] -name = "splitmut" -version = "0.2.1" +name = "spki" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85070f382340e8b23a75808e83573ddf65f9ad9143df9573ca37c1ed2ee956a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.8", +] [[package]] name = "ss58-registry" -version = "1.39.0" +version = "1.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecf0bd63593ef78eca595a7fc25e9a443ca46fe69fd472f8f09f5245cdcd769d" +checksum = "35935738370302d5e33963665b77541e4b990a3e919ec904c837a56cfc891de1" dependencies = [ "Inflector", "num-format", - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "serde", "serde_json", - "unicode-xid 0.2.4", + "unicode-xid", ] [[package]] @@ -4781,7 +4161,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f923762d556417668b192ac2fdc9827ea21e6df011d8a0a7e68f3d5da095a675" dependencies = [ "bitvec", - "hex 0.4.3", + "hex", "num-bigint 0.4.3", "serde", "sha2 0.9.9", @@ -4795,8 +4175,8 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c679ebd9c1ceeb0f9e5b839952b4a71bfe35a791b431ef7b3ee0b71b7588b565" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -4818,7 +4198,16 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros", + "strum_macros 0.24.3", +] + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", ] [[package]] @@ -4827,18 +4216,31 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ - "heck 0.4.1", - "proc-macro2 1.0.54", - "quote 1.0.26", + "heck", + "proc-macro2", + "quote", "rustversion", "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.48", +] + [[package]] name = "substrate-bip39" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" +checksum = "e620c7098893ba667438b47169c00aacdd9e7c10e042250ce2b60b087ec97328" dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", @@ -4847,48 +4249,31 @@ dependencies = [ "zeroize", ] -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" -[[package]] -name = "syn" -version = "0.15.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "unicode-xid 0.1.0", -] - [[package]] name = "syn" version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.11" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "unicode-ident", ] @@ -4898,10 +4283,10 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", + "proc-macro2", + "quote", "syn 1.0.109", - "unicode-xid 0.2.4", + "unicode-xid", ] [[package]] @@ -4914,106 +4299,89 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" name = "tcx" version = "0.1.0" dependencies = [ + "anyhow", "base58", "base64 0.13.1", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", + "ethereum-types", + "hex", "lazy_static", "libc", "log", "parking_lot", - "prost 0.11.8", - "prost-build 0.11.8", - "prost-types 0.11.8", + "prost", + "prost-build", + "prost-types", "serde", "serde_json", + "serial_test", "sp-core", "sp-runtime", - "tcx-bch", - "tcx-btc-fork", - "tcx-chain", + "strum 0.25.0", + "tcx-atom", + "tcx-btc-kin", "tcx-ckb", + "tcx-common", "tcx-constants", "tcx-crypto", + "tcx-eos", + "tcx-eth", "tcx-eth2", "tcx-filecoin", + "tcx-keystore", + "tcx-migration", "tcx-primitive", "tcx-proto", "tcx-substrate", "tcx-tezos", "tcx-tron", - "zksync-crypto", ] [[package]] -name = "tcx-bch" +name = "tcx-atom" version = "0.1.0" dependencies = [ - "bch_addr", - "bitcoin", - "bitcoin_hashes", - "failure", - "hex 0.4.3", - "secp256k1", - "serde", - "serde_json", - "tcx-btc-fork", - "tcx-chain", + "anyhow", + "base64 0.13.1", + "bech32 0.9.1", + "bytes", + "prost", + "tcx-common", "tcx-constants", + "tcx-crypto", + "tcx-keystore", "tcx-primitive", - "tiny-bip39 0.7.3", ] [[package]] -name = "tcx-btc-fork" +name = "tcx-btc-kin" version = "0.1.0" dependencies = [ + "anyhow", "base64 0.13.1", + "bch_addr", "bech32 0.9.1", "bitcoin", "bitcoin_hashes", "byteorder 1.4.3", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", + "hex", "mockall", "num-bigint 0.4.3", "num-integer", "num-traits", - "prost 0.11.8", - "prost-types 0.11.8", - "secp256k1", - "serde", - "serde_json", - "tcx-chain", - "tcx-constants", - "tcx-crypto", - "tcx-primitive", - "tiny-bip39 0.7.3", - "uuid", -] - -[[package]] -name = "tcx-chain" -version = "0.1.0" -dependencies = [ - "bitcoin", - "bitcoin_hashes", - "byteorder 1.4.3", - "bytes 1.4.0", - "cargo-husky", - "failure", - "hex 0.4.3", - "prost 0.11.8", - "regex 1.7.3", + "prost", + "prost-types", "secp256k1", "serde", "serde_json", + "tcx-common", "tcx-constants", "tcx-crypto", + "tcx-keystore", "tcx-primitive", - "tiny-bip39 0.7.3", + "thiserror", + "tiny-bip39 1.0.0", "uuid", ] @@ -5021,110 +4389,235 @@ dependencies = [ name = "tcx-ckb" version = "0.1.0" dependencies = [ + "anyhow", "bech32 0.9.1", "blake2b-rs", "byteorder 1.4.3", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", + "hex", "lazy_static", - "prost 0.11.8", - "tcx-chain", + "prost", + "tcx-common", "tcx-constants", "tcx-crypto", + "tcx-keystore", "tcx-primitive", + "thiserror", ] [[package]] -name = "tcx-constants" +name = "tcx-common" version = "0.1.0" dependencies = [ - "failure", - "lazy_static", - "parking_lot", - "serde", - "serde_json", -] - + "aes", + "anyhow", + "bitcoin", + "ctr", + "ethereum-types", + "hex", + "keccak-hash", + "rand 0.8.5", + "regex", + "secp256k1", + "thiserror", + "tiny-bip39 1.0.0", +] + +[[package]] +name = "tcx-constants" +version = "0.1.0" +dependencies = [ + "anyhow", + "lazy_static", + "parking_lot", + "serde", + "serde_json", + "tcx-common", +] + [[package]] name = "tcx-crypto" version = "0.1.0" dependencies = [ - "aes-ctr", - "aes-soft", + "aes", + "anyhow", "bitcoin_hashes", - "block-modes", + "cbc", "crypto-mac 0.11.1", + "ctr", "digest 0.10.6", - "failure", - "hex 0.4.3", + "hex", "hmac 0.12.1", "lazy_static", "parking_lot", "pbkdf2 0.11.0", "rand 0.8.5", + "regex", "scrypt", "secp256k1", "serde", "serde_json", "sha2 0.10.6", + "tcx-common", + "tcx-constants", + "thiserror", + "tiny-keccak", +] + +[[package]] +name = "tcx-eos" +version = "0.1.0" +dependencies = [ + "anyhow", + "base64 0.13.1", + "bitcoin", + "bytes", + "prost", + "regex", + "tcx-common", + "tcx-constants", + "tcx-crypto", + "tcx-keystore", + "tcx-primitive", +] + +[[package]] +name = "tcx-eth" +version = "0.1.0" +dependencies = [ + "anyhow", + "ethereum-types", + "hex", + "prost", + "prost-types", + "regex", + "rlp", + "secp256k1", + "tcx-common", "tcx-constants", - "tiny-keccak 2.0.2", + "tcx-keystore", + "tcx-primitive", ] [[package]] name = "tcx-eth2" version = "0.1.0" dependencies = [ - "bytes 1.4.0", - "failure", - "hex 0.3.2", + "anyhow", + "bytes", "keccak-hash", "lazy_static", - "prost 0.11.8", - "prost-types 0.11.8", - "regex 1.7.3", + "prost", + "prost-types", + "regex", "ssz_rs", "ssz_rs_derive", - "tcx-chain", + "tcx-common", "tcx-constants", "tcx-crypto", + "tcx-eth", + "tcx-keystore", "tcx-primitive", + "thiserror", ] [[package]] name = "tcx-filecoin" version = "0.1.0" dependencies = [ + "anyhow", "base32", "base64 0.13.1", "blake2b-rs", "byteorder 1.4.3", - "bytes 1.4.0", - "failure", + "bytes", "forest_address", - "forest_bigint", "forest_cid", - "forest_crypto 0.5.3", + "forest_crypto", "forest_encoding", - "forest_message 0.7.2", + "forest_message", "forest_vm", - "hex 0.4.3", "lazy_static", - "prost 0.11.8", + "prost", + "serde", + "serde_json", + "tcx-common", + "tcx-constants", + "tcx-crypto", + "tcx-keystore", + "tcx-primitive", + "thiserror", +] + +[[package]] +name = "tcx-keystore" +version = "0.1.0" +dependencies = [ + "anyhow", + "bitcoin", + "bitcoin_hashes", + "byteorder 1.4.3", + "bytes", + "cargo-husky", + "hex", + "hmac-sha256", + "lazy_static", + "multihash 0.18.1", + "parking_lot", + "prost", + "regex", + "secp256k1", + "serde", + "serde_json", + "sha2 0.10.6", + "tcx-common", + "tcx-constants", + "tcx-crypto", + "tcx-primitive", + "thiserror", + "tiny-bip39 1.0.0", + "uuid", +] + +[[package]] +name = "tcx-migration" +version = "0.1.0" +dependencies = [ + "anyhow", + "base58", + "base64 0.13.1", + "bytes", + "hex", + "lazy_static", + "libc", + "log", + "parking_lot", + "prost", + "prost-types", "serde", - "serde_cbor", "serde_json", - "tcx-chain", + "tcx-atom", + "tcx-btc-kin", + "tcx-common", "tcx-constants", "tcx-crypto", + "tcx-eos", + "tcx-eth", + "tcx-filecoin", + "tcx-keystore", "tcx-primitive", + "tcx-proto", + "tcx-substrate", + "tcx-tezos", + "tcx-tron", + "uuid", ] [[package]] name = "tcx-primitive" version = "0.1.0" dependencies = [ + "anyhow", "bitcoin", "bitcoin_hashes", "blake2b_simd 1.0.1", @@ -5132,61 +4625,64 @@ dependencies = [ "byteorder 1.4.3", "digest 0.10.6", "ed25519-bip32", - "failure", - "hex 0.4.3", + "ed25519-dalek", + "ed25519-dalek-bip32", + "hex", "hex-literal", - "hkdf 0.12.3", - "iop-keyvault", + "hkdf", "lazy_static", "num-bigint 0.4.3", "num-traits", - "regex 1.7.3", + "regex", "schnorrkel", "secp256k1", "serde", "serde_json", "sha2 0.10.6", "sp-core", + "tcx-common", "tcx-constants", - "tiny-bip39 0.7.3", + "thiserror", + "tiny-bip39 1.0.0", ] [[package]] name = "tcx-proto" version = "0.1.0" dependencies = [ - "bytes 1.4.0", - "prost 0.11.8", - "prost-build 0.11.8", - "prost-types 0.11.8", + "bytes", + "prost", + "prost-build", + "prost-types", ] [[package]] name = "tcx-substrate" version = "0.1.0" dependencies = [ + "anyhow", "base58", "base64 0.13.1", - "bs58 0.4.0", "byteorder 1.4.3", - "bytes 1.4.0", - "failure", - "hex 0.4.3", + "bytes", "parity-scale-codec", - "prost 0.11.8", - "prost-types 0.11.8", + "prost", + "prost-types", "rand 0.8.5", - "regex 1.7.3", + "regex", + "schnorrkel", "scrypt", "serde", "serde_json", "sp-core", "sp-keyring", "sp-runtime", - "tcx-chain", + "tcx-common", "tcx-constants", "tcx-crypto", + "tcx-keystore", "tcx-primitive", + "thiserror", "xsalsa20poly1305", ] @@ -5194,9 +4690,9 @@ dependencies = [ name = "tcx-tester" version = "0.1.0" dependencies = [ - "bytes 1.4.0", - "hex 0.4.3", - "prost 0.11.8", + "bytes", + "hex", + "prost", "tcx", ] @@ -5204,16 +4700,17 @@ dependencies = [ name = "tcx-tezos" version = "0.1.0" dependencies = [ + "anyhow", "bitcoin", "blake2b_simd 1.0.1", - "bytes 1.4.0", - "hex 0.4.3", - "prost 0.11.8", - "prost-types 0.11.8", - "ring", - "tcx-chain", + "bytes", + "hex", + "prost", + "prost-types", + "tcx-common", "tcx-constants", "tcx-crypto", + "tcx-keystore", "tcx-primitive", ] @@ -5221,28 +4718,28 @@ dependencies = [ name = "tcx-tron" version = "0.1.0" dependencies = [ + "anyhow", "bitcoin", "bitcoin_hashes", "bytebuffer", "byteorder 1.4.3", - "bytes 1.4.0", + "bytes", "digest 0.10.6", - "failure", - "hex 0.4.3", + "hex", "hex-literal", "num-bigint 0.4.3", "num-integer", "num-traits", - "prost 0.11.8", + "prost", "secp256k1", "serde", "serde_json", - "sha3", - "tcx-chain", + "tcx-common", "tcx-constants", "tcx-crypto", + "tcx-keystore", "tcx-primitive", - "tiny-bip39 0.7.3", + "tiny-bip39 1.0.0", "uuid", ] @@ -5252,7 +4749,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "fastrand", "redox_syscall 0.3.5", "rustix", @@ -5267,31 +4764,22 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 2.0.11", -] - -[[package]] -name = "thread_local" -version = "0.3.6" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ - "lazy_static", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -5300,7 +4788,7 @@ version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "once_cell", ] @@ -5313,22 +4801,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "tiny-bip39" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0165e045cc2ae1660270ca65e1676dbaab60feb0f91b10f7d0665e9b47e31f2" -dependencies = [ - "failure", - "hmac 0.7.1", - "once_cell", - "pbkdf2 0.3.0", - "rand 0.7.3", - "rustc-hash", - "sha2 0.8.2", - "unicode-normalization", -] - [[package]] name = "tiny-bip39" version = "0.8.2" @@ -5367,15 +4839,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "tiny-keccak" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" -dependencies = [ - "crunchy", -] - [[package]] name = "tiny-keccak" version = "2.0.2" @@ -5402,12 +4865,12 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg", - "bytes 1.4.0", + "bytes", "libc", "mio", "num_cpus", @@ -5416,7 +4879,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -5431,13 +4894,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 2.0.11", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -5452,11 +4915,11 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ - "bytes 1.4.0", + "bytes", "futures-core", "futures-sink", "pin-project-lite", @@ -5464,17 +4927,26 @@ dependencies = [ "tracing", ] +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + [[package]] name = "toml_datetime" -version = "0.6.1" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" -version = "0.19.8" +version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ "indexmap", "toml_datetime", @@ -5489,11 +4961,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if 1.0.0", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5501,20 +4972,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -5522,12 +4993,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -5551,12 +5022,12 @@ dependencies = [ "chrono", "lazy_static", "matchers", - "regex 1.7.3", + "regex", "serde", "serde_json", "sharded-slab", "smallvec", - "thread_local 1.1.7", + "thread_local", "tracing", "tracing-core", "tracing-log", @@ -5570,7 +5041,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.12.3", "log", "rustc-hex", "smallvec", @@ -5587,9 +5058,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twox-hash" @@ -5597,7 +5068,7 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "digest 0.10.6", "rand 0.8.5", "static_assertions", @@ -5605,15 +5076,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "ucd-util" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd2fc5d32b590614af8b0a20d837f32eca055edd0bbead59a9cfe80858be003" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "uint" @@ -5623,15 +5088,15 @@ checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ "byteorder 1.4.3", "crunchy", - "hex 0.4.3", + "hex", "static_assertions", ] [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -5642,18 +5107,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" - [[package]] name = "unicode-xid" version = "0.2.4" @@ -5662,12 +5115,12 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "universal-hash" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -5677,24 +5130,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7fdeedbf205afadfe39ae559b75c3240f24e257d0ca27e85f85cb82aa19ac35" [[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "utf8-ranges" -version = "1.0.5" +name = "unsigned-varint" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" [[package]] name = "uuid" -version = "1.3.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", "serde", ] @@ -5718,11 +5165,10 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -5740,95 +5186,57 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.60" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc57ce05287f8376e998cbddfb4c8cb43b84a7ec55cf4551d7c00eef317a47f" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ - "cfg-if 0.1.10", + "cfg-if", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.60" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967d37bf6c16cca2973ca3af071d0a2523392e4a594548155d89a678f4237cd" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ "bumpalo", - "lazy_static", "log", - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 1.0.109", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83420b37346c311b9ed822af41ec2e82839bfe99867ec6c54e2da43b7538771c" -dependencies = [ - "cfg-if 0.1.10", - "futures 0.1.31", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" -version = "0.2.60" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd151b63e1ea881bb742cd20e1d6127cef28399558f3b5d415289bc41eee3a4" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ - "quote 1.0.26", + "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.60" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68a5b36eef1be7868f668632863292e37739656a80fc4b9acec7b0bd35a4931" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639" - -[[package]] -name = "wasm-bindgen-test" -version = "0.2.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d9693b63a742d481c7f80587e057920e568317b2806988c59cd71618bc26c1" -dependencies = [ - "console_error_panic_hook", - "futures 0.1.31", - "js-sys", - "scoped-tls", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.2.50" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0789dac148a8840bbcf9efe13905463b733fa96543bfbf263790535c11af7ba5" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", -] +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "wasmi" @@ -5863,37 +5271,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "web-sys" -version = "0.3.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6f51648d8c56c366144378a33290049eafdd784071077f6fe37dae64c1c4cb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "wee_alloc" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "memory_units", - "winapi", -] - -[[package]] -name = "which" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" -dependencies = [ - "libc", -] - [[package]] name = "which" version = "4.4.0" @@ -5928,18 +5305,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows-targets 0.48.5", ] [[package]] @@ -5948,7 +5319,25 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] @@ -5957,13 +5346,43 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -5972,47 +5391,131 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" -version = "0.4.1" +version = "0.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" +checksum = "9b5c3db89721d50d0e2a673f5043fc4722f76dcc352d7b1ab8b8288bed4ed2c5" dependencies = [ "memchr", ] @@ -6035,40 +5538,26 @@ dependencies = [ "aead", "poly1305", "salsa20", - "subtle 2.4.1", + "subtle", "zeroize", ] [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25588073e5216b50bca71d61cb8595cdb9745e87032a58c199730def2862c934" -dependencies = [ - "proc-macro2 1.0.54", - "quote 1.0.26", - "syn 2.0.11", -] - -[[package]] -name = "zksync-crypto" -version = "1.0.0" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "console_error_panic_hook", - "franklin-crypto", - "hex 0.4.3", - "rand 0.4.6", - "sha2 0.8.2", - "wasm-bindgen", - "wasm-bindgen-test", - "wee_alloc", + "proc-macro2", + "quote", + "syn 2.0.48", ] diff --git a/Cargo.toml b/Cargo.toml index e6f4d5b1..80fabb7d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,21 +1,26 @@ [workspace] -members=[ +resolver = "2" +members = [ "token-core/tcx-proto", "token-core/tcx-constants", "token-core/tcx-primitive", "token-core/tcx-crypto", - "token-core/tcx-chain", + "token-core/tcx-keystore", "token-core/tcx-tron", - "token-core/tcx-btc-fork", - "token-core/tcx-bch", + "token-core/tcx-btc-kin", "token-core/tcx-ckb", + "token-core/tcx-atom", + "token-core/tcx-eos", "token-core/tcx-substrate", "token-core/tcx-filecoin", "token-core/tcx", "token-core/tcx-tezos", "token-core/tcx-tester", "token-core/tcx-eth2", - "token-core/zksync-crypto", + "token-core/tcx-eth", + "token-core/tcx-common", + "token-core/tcx-migration", + "token-core/tcx-libs/ed25519-dalek-bip32", "imkey-core/ikc", "imkey-core/ikc-common", "imkey-core/ikc-device", @@ -32,4 +37,4 @@ members=[ "imkey-core/ikc-wallet/coin-bch", "imkey-core/ikc-wallet/coin-filecoin", "imkey-core/ikc-wallet/coin-btc-fork", -] \ No newline at end of file +] diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..f04fd9d1 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +build-tcx-proto: + cargo build -p tcx-proto + +check-tcx: + cd token-core; cargo check + +build-tcx: + cd token-core; cargo build + +test-tcx: + KDF_ROUNDS=1 cargo test --workspace --exclude 'ikc*' --exclude 'coin*' + +test-ikc: + KDF_ROUNDS=1 cargo test --workspace --exclude 'tcx*' \ No newline at end of file diff --git a/VERSION b/VERSION index 57cf282e..24ba9a38 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6.5 +2.7.0 diff --git a/imkey-core/ikc-common/Cargo.toml b/imkey-core/ikc-common/Cargo.toml index 1f9882db..a3dc774a 100644 --- a/imkey-core/ikc-common/Cargo.toml +++ b/imkey-core/ikc-common/Cargo.toml @@ -7,28 +7,29 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -hyper = { version = "0.14.23", features = ["full"] } -hyper-tls = "0.5.0" -hyper-timeout = "0.4.1" -rustc-serialize = "0.3.24" -serde = { version = "1.0.147", features = ["derive"] } -serde_derive = "1.0.110" -serde_json = "1.0.89" -hex = "0.4.3" -tokio = { version = "1.22.0", features = ["full"] } -regex = "1.7.0" -ring = "0.16.20" -num-bigint = "0.4.3" -num-traits = "0.2.15" -num-integer = "0.1.45" -prost = "0.11.2" -bytes = "1.3.0" -prost-types = "0.11.2" -secp256k1 = {version ="0.24.1", features = ["rand", "recovery"] } -failure = "0.1.8" -lazy_static = "1.4.0" -aes-ctr = "0.6.0" -aes-soft = "0.6.4" -block-modes = "0.7.0" -parking_lot = "0.12.1" -bitcoin = "0.29.2" +hyper = { version = "=0.14.23", features = ["full"] } +hyper-tls = "=0.5.0" +hyper-timeout = "=0.4.1" +rustc-serialize = "=0.3.24" +serde = { version = "=1.0.147", features = ["derive"] } +serde_derive = "=1.0.147" +serde_json = "=1.0.89" +hex = "=0.4.3" +tokio = { version = "=1.28.2", features = ["full"] } +regex = "=1.9.3" +num-bigint = "=0.4.3" +num-traits = "=0.2.15" +num-integer = "=0.1.45" +prost = "=0.11.2" +bytes = "=1.4.0" +prost-types = "=0.11.2" +secp256k1 = { version = "=0.24.3", features = ["rand", "recovery"] } +anyhow = "=1.0.79" +lazy_static = "=1.4.0" +aes = "=0.8.3" +cbc = "=0.1.2" +parking_lot = "=0.12.1" +bitcoin = "=0.29.2" +byteorder = "=1.4.3" +thiserror = "=1.0.56" +base64 = "=0.13.1" diff --git a/imkey-core/ikc-common/src/aes.rs b/imkey-core/ikc-common/src/aes.rs index b3b0b1ae..a543fcc1 100644 --- a/imkey-core/ikc-common/src/aes.rs +++ b/imkey-core/ikc-common/src/aes.rs @@ -1,15 +1,60 @@ pub mod cbc { - extern crate aes_soft; - extern crate block_modes; + use crate::error::CommonError; use crate::Result; - use aes_soft::Aes128; - use block_modes::block_padding::Pkcs7; - use block_modes::{BlockMode, Cbc}; - - type Aes128Cbc = Cbc; + use aes::cipher::generic_array::GenericArray; + use aes::cipher::{block_padding::Pkcs7, BlockDecryptMut, BlockEncryptMut, KeyIvInit}; + type Aes128CbcEnc = cbc::Encryptor; + type Aes128CbcDec = cbc::Decryptor; + #[inline] pub fn encrypt_pkcs7(data: &[u8], key: &[u8], iv: &[u8]) -> Result> { - let cipher = Aes128Cbc::new_var(key, iv)?; - Ok(cipher.encrypt_vec(data)) + if key.len() != 16 || iv.len() != 16 { + return Err(CommonError::InvalidKeyIvLength.into()); + } + let padding_len = 16 - (data.len() % 16); + let mut buf = vec![0u8; data.len() + padding_len]; + let ct = Aes128CbcEnc::new(key.into(), iv.into()) + .encrypt_padded_b2b_mut::(data, &mut buf) + .unwrap(); + + Ok(ct.to_vec()) + } + + #[inline] + pub fn decrypt_pkcs7(encrypted: &[u8], key: &[u8], iv: &[u8]) -> Result> { + if key.len() != 16 || iv.len() != 16 { + return Err(CommonError::InvalidKeyIvLength.into()); + } + let mut buf = vec![0u8; encrypted.len()]; + let key = GenericArray::from_slice(key); + let iv = GenericArray::from_slice(iv); + let pt = Aes128CbcDec::new(key, iv) + .decrypt_padded_b2b_mut::(encrypted, &mut buf) + .unwrap(); + Ok(pt.to_vec()) + } +} + +#[cfg(test)] +mod test { + use crate::aes::cbc::{decrypt_pkcs7, encrypt_pkcs7}; + #[test] + fn test_encrypt_pkcs7() { + let data = "TokenCoreX".as_bytes(); + let key = hex::decode("01020304010203040102030401020304").unwrap(); + let iv = hex::decode("01020304010203040102030401020304").unwrap(); + let ret = encrypt_pkcs7(&data, &key, &iv).expect("encrypt_pkcs7"); + let ret_hex = hex::encode(ret.clone()); + assert_eq!("13d567987d7eced9c2154551bc37bc5f", ret_hex); + let decrypted = decrypt_pkcs7(&ret, &key, &iv).unwrap(); + assert_eq!("TokenCoreX", String::from_utf8(decrypted).unwrap()); + + let key = hex::decode("0102030401020304").unwrap(); + let ret = encrypt_pkcs7(&data, &key, &iv); + assert_eq!(ret.err().unwrap().to_string(), "invalid_key_iv_length"); + + let iv = hex::decode("0102030401020304").unwrap(); + let ret = encrypt_pkcs7(&data, &key, &iv); + assert_eq!(ret.err().unwrap().to_string(), "invalid_key_iv_length"); } } diff --git a/imkey-core/ikc-common/src/apdu.rs b/imkey-core/ikc-common/src/apdu.rs index 259f433d..2fb5aeab 100644 --- a/imkey-core/ikc-common/src/apdu.rs +++ b/imkey-core/ikc-common/src/apdu.rs @@ -562,7 +562,7 @@ impl ApduCheck { "F080" => Err(ApduError::ImkeyInMenuPage.into()), "F081" => Err(ApduError::ImkeyPinNotVerified.into()), "6F01" => Err(ApduError::ImkeyBluetoothChannelError.into()), - _ => Err(format_err!("imkey_command_execute_fail_{}", response_data)), //Err(ApduError::ImkeyCommandExecuteFail.into()) + _ => Err(anyhow!("imkey_command_execute_fail_{}", response_data)), //Err(ApduError::ImkeyCommandExecuteFail.into()) } } } diff --git a/imkey-core/ikc-common/src/coin_info.rs b/imkey-core/ikc-common/src/coin_info.rs index d2f8f012..56973e19 100644 --- a/imkey-core/ikc-common/src/coin_info.rs +++ b/imkey-core/ikc-common/src/coin_info.rs @@ -1,7 +1,6 @@ use crate::curve::CurveType; use crate::Result; -use failure::format_err; - +use anyhow::anyhow; use parking_lot::RwLock; /// Blockchain basic config @@ -18,141 +17,197 @@ pub struct CoinInfo { lazy_static! { static ref COIN_INFOS: RwLock> = { - let mut coin_infos = Vec::new(); - coin_infos.push(CoinInfo { - coin: "BITCOIN".to_string(), - derivation_path: "m/44'/0'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "MAINNET".to_string(), - seg_wit: "NONE".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "BITCOIN".to_string(), - derivation_path: "m/44'/1'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "TESTNET".to_string(), - seg_wit: "NONE".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "BITCOIN".to_string(), - derivation_path: "m/49'/0'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "MAINNET".to_string(), - seg_wit: "P2WPKH".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "BITCOIN".to_string(), - derivation_path: "m/49'/1'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "TESTNET".to_string(), - seg_wit: "P2WPKH".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "BITCOINCASH".to_string(), - derivation_path: "m/44'/145'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "MAINNET".to_string(), - seg_wit: "NONE".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "BITCOINCASH".to_string(), - derivation_path: "m/44'/1'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "TESTNET".to_string(), - seg_wit: "NONE".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "LITECOIN".to_string(), - derivation_path: "m/44'/2'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "MAINNET".to_string(), - seg_wit: "NONE".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "LITECOIN".to_string(), - derivation_path: "m/44'/1'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "TESTNET".to_string(), - seg_wit: "NONE".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "LITECOIN".to_string(), - derivation_path: "m/49'/2'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "MAINNET".to_string(), - seg_wit: "P2WPKH".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "LITECOIN".to_string(), - derivation_path: "m/49'/1'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "TESTNET".to_string(), - seg_wit: "P2WPKH".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "TRON".to_string(), - derivation_path: "m/44'/195'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "".to_string(), - seg_wit: "".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "NERVOS".to_string(), - derivation_path: "m/44'/309'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "MAINNET".to_string(), - seg_wit: "".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "NERVOS".to_string(), - derivation_path: "m/44'/309'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "TESTNET".to_string(), - seg_wit: "".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "POLKADOT".to_string(), - derivation_path: "//polkadot//imToken/0".to_string(), - curve: CurveType::SubSr25519, - network: "".to_string(), - seg_wit: "".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "KUSAMA".to_string(), - derivation_path: "//kusama//imToken/0".to_string(), - curve: CurveType::SubSr25519, - network: "".to_string(), - seg_wit: "".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "FILECOIN".to_string(), - derivation_path: "m/44'/461'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "MAINNET".to_string(), - seg_wit: "".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "FILECOIN".to_string(), - derivation_path: "m/44'/461'/0'/0/0".to_string(), - curve: CurveType::SECP256k1, - network: "TESTNET".to_string(), - seg_wit: "".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "FILECOIN".to_string(), - derivation_path: "m/2334/461/0/0".to_string(), - curve: CurveType::BLS, - network: "MAINNET".to_string(), - seg_wit: "".to_string(), - }); - coin_infos.push(CoinInfo { - coin: "FILECOIN".to_string(), - derivation_path: "m/2334/461/0/0".to_string(), - curve: CurveType::BLS, - network: "TESTNET".to_string(), - seg_wit: "".to_string(), - }); - + let coin_infos = vec![ + CoinInfo { + coin: "BITCOIN".to_string(), + derivation_path: "m/44'/0'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "NONE".to_string(), + }, + CoinInfo { + coin: "BITCOIN".to_string(), + derivation_path: "m/44'/1'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "NONE".to_string(), + }, + CoinInfo { + coin: "BITCOIN".to_string(), + derivation_path: "m/49'/0'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "P2WPKH".to_string(), + }, + CoinInfo { + coin: "BITCOIN".to_string(), + derivation_path: "m/49'/1'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "P2WPKH".to_string(), + }, + CoinInfo { + coin: "BITCOINCASH".to_string(), + derivation_path: "m/44'/145'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "NONE".to_string(), + }, + CoinInfo { + coin: "BITCOINCASH".to_string(), + derivation_path: "m/44'/1'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "NONE".to_string(), + }, + CoinInfo { + coin: "LITECOIN".to_string(), + derivation_path: "m/44'/2'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "NONE".to_string(), + }, + CoinInfo { + coin: "LITECOIN".to_string(), + derivation_path: "m/44'/1'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "NONE".to_string(), + }, + CoinInfo { + coin: "LITECOIN".to_string(), + derivation_path: "m/49'/2'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "P2WPKH".to_string(), + }, + CoinInfo { + coin: "LITECOIN".to_string(), + derivation_path: "m/49'/1'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "P2WPKH".to_string(), + }, + CoinInfo { + coin: "TRON".to_string(), + derivation_path: "m/44'/195'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "NERVOS".to_string(), + derivation_path: "m/44'/309'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "NERVOS".to_string(), + derivation_path: "m/44'/309'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "POLKADOT".to_string(), + derivation_path: "m/44'/354'/0'/0/0".to_string(), + curve: CurveType::ED25519, + network: "".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "KUSAMA".to_string(), + derivation_path: "m/44'/434'/0'/0/0".to_string(), + curve: CurveType::ED25519, + network: "".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "FILECOIN".to_string(), + derivation_path: "m/44'/461'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "FILECOIN".to_string(), + derivation_path: "m/44'/461'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "FILECOIN".to_string(), + derivation_path: "m/2334/461/0/0".to_string(), + curve: CurveType::BLS, + network: "MAINNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "FILECOIN".to_string(), + derivation_path: "m/2334/461/0/0".to_string(), + curve: CurveType::BLS, + network: "TESTNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "ETHEREUM".to_string(), + derivation_path: "m/44'/60'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "ETHEREUM".to_string(), + derivation_path: "m/44'/60'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "ETHEREUM2".to_string(), + derivation_path: "m/12381/3600/0/0".to_string(), + curve: CurveType::BLS, + network: "MAINNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "ETHEREUM2".to_string(), + derivation_path: "m/12381/3600/0/0".to_string(), + curve: CurveType::BLS, + network: "TESTNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "COSMOS".to_string(), + derivation_path: "m/44'/118'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "EOS".to_string(), + derivation_path: "m/44'/194'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "MAINNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "COSMOS".to_string(), + derivation_path: "m/44'/118'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "".to_string(), + }, + CoinInfo { + coin: "EOS".to_string(), + derivation_path: "m/44'/194'/0'/0/0".to_string(), + curve: CurveType::SECP256k1, + network: "TESTNET".to_string(), + seg_wit: "".to_string(), + }, + ]; RwLock::new(coin_infos) }; } @@ -176,7 +231,7 @@ pub fn coin_info_from_param( .collect::>(); if coins.is_empty() { - Err(format_err!("unsupported_chain")) + Err(anyhow!("unsupported_chain")) } else { Ok(coins.pop().expect("coin_info_from_param")) } diff --git a/imkey-core/ikc-common/src/common.rs b/imkey-core/ikc-common/src/common.rs index 88cc9dd0..f1333867 100644 --- a/imkey-core/ikc-common/src/common.rs +++ b/imkey-core/ikc-common/src/common.rs @@ -1,19 +1,20 @@ +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct SignParam { #[prost(string, tag = "1")] - pub chain_type: std::string::String, + pub chain_type: ::prost::alloc::string::String, #[prost(string, tag = "2")] - pub path: std::string::String, + pub path: ::prost::alloc::string::String, #[prost(string, tag = "3")] - pub network: std::string::String, + pub network: ::prost::alloc::string::String, #[prost(message, optional, tag = "4")] - pub input: ::std::option::Option<::prost_types::Any>, + pub input: ::core::option::Option<::prost_types::Any>, #[prost(string, tag = "5")] - pub payment: std::string::String, + pub payment: ::prost::alloc::string::String, #[prost(string, tag = "6")] - pub receiver: std::string::String, + pub receiver: ::prost::alloc::string::String, #[prost(string, tag = "7")] - pub sender: std::string::String, + pub sender: ::prost::alloc::string::String, #[prost(string, tag = "8")] - pub fee: std::string::String, + pub fee: ::prost::alloc::string::String, } diff --git a/imkey-core/ikc-common/src/constants.rs b/imkey-core/ikc-common/src/constants.rs index 436f9c8c..c003c6ad 100644 --- a/imkey-core/ikc-common/src/constants.rs +++ b/imkey-core/ikc-common/src/constants.rs @@ -117,3 +117,8 @@ pub const ETH_TRANSACTION_TYPE_EIP2718: &str = "01"; pub const ETH_TRANSACTION_TYPE_EIP1559: &str = "02"; pub const ETH_MAX_SUPPORT_PAYMENT_LEN: usize = 255; + +lazy_static! { + /// Lazily initialized secp256k1 engine + pub static ref SECP256K1_ENGINE: secp256k1::Secp256k1 = secp256k1::Secp256k1::new(); +} diff --git a/imkey-core/ikc-common/src/curve.rs b/imkey-core/ikc-common/src/curve.rs index 3efc6160..e92ca4a0 100644 --- a/imkey-core/ikc-common/src/curve.rs +++ b/imkey-core/ikc-common/src/curve.rs @@ -2,25 +2,45 @@ use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] pub enum CurveType { - SECP256k1, /* "secp256k1" */ - ED25519, /* "ed25519" */ - ED25519Blake2bNano, /* "ed25519-blake2b-nano" */ - SubSr25519, - Curve25519, /* "curve25519" */ + #[serde(rename = "secp256k1")] + SECP256k1, + #[serde(rename = "ed25519")] + ED25519, + #[serde(rename = "ed25519-blake2b-nano")] + ED25519Blake2bNano, + #[serde(rename = "sr25519")] + SR25519, + #[serde(rename = "curve25519")] + Curve25519, + #[serde(rename = "nist256p1")] NIST256p1, - BLS, /* "bls" */ + #[serde(rename = "bls12-381")] + BLS, } impl CurveType { pub fn as_str(&self) -> &str { match self { - CurveType::SECP256k1 => "SECP256k1", - CurveType::ED25519 => "ED25519 ", - CurveType::ED25519Blake2bNano => "ED25519Blake2bNano", - CurveType::SubSr25519 => "SubSr25519", - CurveType::Curve25519 => "Curve25519", - CurveType::NIST256p1 => "NIST256p1", - CurveType::BLS => "BLS", + CurveType::SECP256k1 => "secp256k1", + CurveType::ED25519 => "ed25519", + CurveType::ED25519Blake2bNano => "ed25519-blake2b-nano", + CurveType::SR25519 => "sr25519", + CurveType::Curve25519 => "curve25519", + CurveType::NIST256p1 => "nist256p1", + CurveType::BLS => "bls12-381", + } + } + + pub fn from_str(value: &str) -> CurveType { + match value { + "secp256k1" => CurveType::SECP256k1, + "ed25519" => CurveType::ED25519, + "ed25519-blake2b-nano" => CurveType::ED25519Blake2bNano, + "sr25519" => CurveType::SR25519, + "curve25519" => CurveType::Curve25519, + "nist256p1" => CurveType::NIST256p1, + "bls12-381" => CurveType::BLS, + _ => panic!("Invalid curve type"), } } } diff --git a/imkey-core/ikc-common/src/error.rs b/imkey-core/ikc-common/src/error.rs index b686ef0e..d86f07ae 100644 --- a/imkey-core/ikc-common/src/error.rs +++ b/imkey-core/ikc-common/src/error.rs @@ -1,85 +1,91 @@ -#[derive(Fail, Debug, PartialOrd, PartialEq)] +use thiserror::Error; + +#[derive(Error, Debug, PartialOrd, PartialEq)] pub enum CommonError { - #[fail(display = "imkey_path_illegal")] + #[error("imkey_path_illegal")] ImkeyPathIllegal, + #[error("invalid_key_iv_length")] + InvalidKeyIvLength, + #[error("invalid_base58")] + InvalidBase58, } -#[derive(Fail, Debug, PartialOrd, PartialEq)] +#[derive(Error, Debug, PartialOrd, PartialEq)] pub enum ApduError { - #[fail(display = "imkey_user_not_confirmed")] + #[error("imkey_user_not_confirmed")] ImkeyUserNotConfirmed, - #[fail(display = "imkey_conditions_not_satisfied")] + #[error("imkey_conditions_not_satisfied")] ImkeyConditionsNotSatisfied, - #[fail(display = "imkey_command_format_error")] + #[error("imkey_command_format_error")] ImkeyCommandFormatError, - #[fail(display = "imkey_command_data_error")] + #[error("imkey_command_data_error")] ImkeyCommandDataError, - #[fail(display = "imkey_applet_not_exist")] + #[error("imkey_applet_not_exist")] ImkeyAppletNotExist, - #[fail(display = "imkey_apdu_wrong_length")] + #[error("imkey_apdu_wrong_length")] ImkeyApduWrongLength, - #[fail(display = "imkey_signature_verify_fail")] + #[error("imkey_signature_verify_fail")] ImkeySignatureVerifyFail, - #[fail(display = "imkey_bluetooth_channel_error")] + #[error("imkey_bluetooth_channel_error")] ImkeyBluetoothChannelError, - #[fail(display = "imkey_applet_function_not_supported")] + #[error("imkey_applet_function_not_supported")] ImkeyAppletFunctionNotSupported, - #[fail(display = "imkey_exceeded_max_utxo_number")] + #[error("imkey_exceeded_max_utxo_number")] ImkeyExceededMaxUtxoNumber, - #[fail(display = "imkey_command_execute_fail")] + #[error("imkey_command_execute_fail")] ImkeyCommandExecuteFail, - #[fail(display = "imkey_wallet_not_created")] + #[error("imkey_wallet_not_created")] ImkeyWalletNotCreated, - #[fail(display = "imkey_in_menu_page")] + #[error("imkey_in_menu_page")] ImkeyInMenuPage, - #[fail(display = "imkey_pin_not_verified")] + #[error("imkey_pin_not_verified")] ImkeyPinNotVerified, } -#[derive(Fail, Debug, PartialOrd, PartialEq)] +#[derive(Error, Debug, PartialOrd, PartialEq)] pub enum CoinError { - #[fail(display = "imkey_exceeded_max_utxo_number")] + #[error("imkey_exceeded_max_utxo_number")] ImkeyExceededMaxUtxoNumber, - #[fail(display = "imkey_address_mismatch_with_path")] + #[error("imkey_address_mismatch_with_path")] ImkeyAddressMismatchWithPath, - #[fail(display = "imkey_signature_verify_fail")] + #[error("imkey_signature_verify_fail")] ImkeySignatureVerifyFail, - #[fail(display = "imkey_insufficient_funds")] + #[error("imkey_insufficient_funds")] ImkeyInsufficientFunds, - #[fail(display = "imkey_sdk_illegal_argument")] + #[error("imkey_sdk_illegal_argument")] ImkeySdkIllegalArgument, - #[fail(display = "imkey_amount_less_than_minimum")] + #[error("imkey_amount_less_than_minimum")] ImkeyAmountLessThanMinimum, - #[fail(display = "imkey_path_illegal")] + #[error("imkey_path_illegal")] ImkeyPathIllegal, - #[fail(display = "get_xpub_error")] + #[error("get_xpub_error")] GetXpubError, - #[fail(display = "address_type_mismatch")] + #[error("address_type_mismatch")] AddressTypeMismatch, - #[fail(display = "invalid_address")] + #[error("invalid_address")] InvalidAddress, - #[fail(display = "invalid_number")] + #[error("invalid_number")] InvalidNumber, - #[fail(display = "invalid_param")] + #[error("invalid_param")] InvalidParam, - #[fail(display = "invalid_format")] + #[error("invalid_format")] InvalidFormat, - #[fail(display = "bch_convert_to_legacy_address_failed")] + #[error("bch_convert_to_legacy_address_failed")] ConvertToLegacyAddressFailed, - #[fail(display = "bch_convert_to_cash_address_failed")] + #[error("bch_convert_to_cash_address_failed")] ConvertToCashAddressFailed, - #[fail(display = "construct_bch_address_failed")] + #[error("construct_bch_address_failed")] ConstructBchAddressFailed, - #[fail(display = "the bech32 payload was empty")] + #[error("the bech32 payload was empty")] EmptyBech32Payload, - #[fail(display = "invalid witness script version")] + #[error("invalid witness script version")] InvalidWitnessVersion, - #[fail(display = "the witness program must be between 2 and 40 bytes in length")] + #[error("the witness program must be between 2 and 40 bytes in length")] InvalidWitnessProgramLength, - #[fail(display = "a v0 witness program must be either of length 20 or 32 bytes")] + #[error("a v0 witness program must be either of length 20 or 32 bytes")] InvalidSegwitV0ProgramLength, - #[fail(display = "invalid script version")] + #[error("invalid script version")] InvalidVersion, - #[fail(display = "invalid addr length")] + #[error("invalid addr length")] InvalidAddrLength, } diff --git a/imkey-core/ikc-common/src/lib.rs b/imkey-core/ikc-common/src/lib.rs index f6b00611..6c0d1e3a 100644 --- a/imkey-core/ikc-common/src/lib.rs +++ b/imkey-core/ikc-common/src/lib.rs @@ -26,14 +26,6 @@ lazy_static! { } #[macro_use] -extern crate failure; +extern crate anyhow; use core::result; -pub type Result = result::Result; - -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - assert_eq!(2 + 2, 4); - } -} +pub type Result = result::Result; diff --git a/imkey-core/ikc-common/src/path.rs b/imkey-core/ikc-common/src/path.rs index c0d6db1a..01d932d6 100644 --- a/imkey-core/ikc-common/src/path.rs +++ b/imkey-core/ikc-common/src/path.rs @@ -1,22 +1,56 @@ use crate::error::CommonError; use crate::Result; -use regex::Regex; +use std::str::FromStr; pub fn check_path_validity(path: &str) -> Result<()> { //check depth and length let strings: Vec<&str> = path.split("/").collect(); let depth = strings.len(); - if depth < 2 || depth > 10 || path.len() > 100 { + if depth < 3 || depth > 10 { return Err(CommonError::ImkeyPathIllegal.into()); } - //regx check - let re = Regex::new(r"^m/[0-9'/]+$").unwrap(); - if !re.is_match(path) { + Ok(()) +} + +pub fn check_path_max_five_depth(path: &str) -> Result<()> { + //check depth and length + let strings: Vec<&str> = path.split("/").collect(); + let depth = strings.len(); + if depth < 3 || depth > 6 { return Err(CommonError::ImkeyPathIllegal.into()); } Ok(()) } +pub fn get_account_path(path: &str) -> Result { + // example: m/44'/60'/0'/0/0 + let _ = bitcoin::util::bip32::DerivationPath::from_str(path)?; + let mut children: Vec<&str> = path.split('/').collect(); + + ensure!(children.len() >= 4, format!("{} path is too short", path)); + + while children.len() > 4 { + children.remove(children.len() - 1); + } + Ok(children.join("/")) +} + +/** +get parent public key path + */ +pub fn get_parent_path(path: &str) -> Result<&str> { + if path.is_empty() { + return Err(CommonError::ImkeyPathIllegal.into()); + } + + let mut end_flg = path.rfind("/").unwrap(); + if path.ends_with("/") { + let path = &path[..path.len() - 1]; + end_flg = path.rfind("/").unwrap(); + } + Ok(&path[..end_flg]) +} + #[cfg(test)] mod test { use crate::path::check_path_validity; @@ -25,5 +59,7 @@ mod test { fn check_path_validity_test() { assert!(check_path_validity("m/44'/0'/0'").is_ok()); assert!(check_path_validity("m/44a'/0'/0'").is_err()); + assert!(check_path_validity("m/44'/0'/0'/0'/0'").is_ok()); + assert!(check_path_validity("m/44'/0'/0'/0'/0'/0'").is_err()); } } diff --git a/imkey-core/ikc-common/src/utility.rs b/imkey-core/ikc-common/src/utility.rs index 7c7a248f..bf789174 100644 --- a/imkey-core/ikc-common/src/utility.rs +++ b/imkey-core/ikc-common/src/utility.rs @@ -1,12 +1,21 @@ +use crate::aes::cbc::encrypt_pkcs7; +use crate::constants::SECP256K1_ENGINE; +use crate::error::CommonError; use crate::Result; +use bitcoin::hashes::{sha256, Hash}; +use bitcoin::util::base58; +use bitcoin::util::bip32::{ + ChainCode, ChildNumber, Error as Bip32Error, ExtendedPubKey, Fingerprint, +}; +use bitcoin::Network; +use byteorder::BigEndian; +use byteorder::ByteOrder; use num_bigint::BigInt; use num_integer::Integer; use num_traits::{FromPrimitive, Num, Zero}; use regex::Regex; -use ring::digest; -use secp256k1::ecdsa::{RecoverableSignature, RecoveryId}; -use secp256k1::{Message, PublicKey as PublicKey2, Secp256k1, SecretKey, Signature}; -use std::str::FromStr; +use secp256k1::ecdsa::{RecoverableSignature, RecoveryId, Signature}; +use secp256k1::{Message, PublicKey as PublicKey2, Secp256k1, SecretKey}; pub fn hex_to_bytes(value: &str) -> Result> { let ret_data; @@ -19,8 +28,7 @@ pub fn hex_to_bytes(value: &str) -> Result> { } pub fn sha256_hash(data: &[u8]) -> Vec { - let digest_obj = digest::digest(&digest::SHA256, data); - digest_obj.as_ref().to_vec() + sha256::Hash::hash(data).into_inner().to_vec() } pub fn secp256k1_sign(private_key: &[u8], message: &[u8]) -> Result> { @@ -33,7 +41,7 @@ pub fn secp256k1_sign(private_key: &[u8], message: &[u8]) -> Result> { let secp = Secp256k1::new(); //sign data Ok(secp - .sign(&message_data, &secret_key) + .sign_ecdsa(&message_data, &secret_key) .serialize_der() .to_vec()) } @@ -52,7 +60,9 @@ pub fn secp256k1_sign_verify(public: &[u8], signed: &[u8], message: &[u8]) -> Re let mut sig_obj = Signature::from_der(signed)?; sig_obj.normalize_s(); //verify - Ok(secp.verify(&message_obj, &sig_obj, &public_obj).is_ok()) + Ok(secp + .verify_ecdsa(&message_obj, &sig_obj, &public_obj) + .is_ok()) } pub fn bigint_to_byte_vec(val: i64) -> Vec { @@ -71,9 +81,9 @@ pub fn uncompress_pubkey_2_compress(uncomprs_pubkey: &str) -> String { let (_d, m) = y_bint.div_mod_floor(&two_bint); return if m.is_zero() { - "02".to_owned() + x + ("02".to_owned() + x).to_lowercase() } else { - "03".to_owned() + x + ("03".to_owned() + x).to_lowercase() }; } @@ -101,7 +111,7 @@ pub fn retrieve_recid(msg: &[u8], sign_compact: &[u8], pubkey: &Vec) -> Resu let sig = RecoverableSignature::from_compact(sign_compact, rec_id)?; let msg_to_sign = Message::from_slice(msg)?; - if let Ok(rec_pubkey) = secp_context.recover(&msg_to_sign, &sig) { + if let Ok(rec_pubkey) = secp_context.recover_ecdsa(&msg_to_sign, &sig) { let rec_pubkey_raw = rec_pubkey.serialize_uncompressed(); if rec_pubkey_raw.to_vec() == *pubkey { recid_final = i; @@ -116,27 +126,95 @@ pub fn retrieve_recid(msg: &[u8], sign_compact: &[u8], pubkey: &Vec) -> Resu Ok(rec_id) } -pub fn get_account_path(path: &str) -> Result { - // example: m/44'/60'/0'/0/0 - let _ = bitcoin::util::bip32::DerivationPath::from_str(path)?; - let mut children: Vec<&str> = path.split('/').collect(); +pub fn to_ss58check_with_version(extended_key: ExtendedPubKey, version: &[u8]) -> String { + let mut ret = [0; 78]; + // let extended_key = self.0; + ret[0..4].copy_from_slice(version); + ret[4] = extended_key.depth; + ret[5..9].copy_from_slice(&extended_key.parent_fingerprint[..]); + + BigEndian::write_u32(&mut ret[9..13], u32::from(extended_key.child_number)); + + ret[13..45].copy_from_slice(&extended_key.chain_code[..]); + ret[45..78].copy_from_slice(&extended_key.public_key.serialize()[..]); + base58::check_encode_slice(&ret[..]) +} - ensure!(children.len() >= 4, format!("{} path is too short", path)); +pub fn from_ss58check_with_version(s: &str) -> Result<(ExtendedPubKey, Vec)> { + let data = base58::from_check(s)?; - while children.len() > 4 { - children.remove(children.len() - 1); + if data.len() != 78 { + return Err(CommonError::InvalidBase58.into()); + } + let cn_int: u32 = BigEndian::read_u32(&data[9..13]); + let child_number: ChildNumber = ChildNumber::from(cn_int); + + let epk = ExtendedPubKey { + network: Network::Bitcoin, + depth: data[4], + parent_fingerprint: Fingerprint::from(&data[5..9]), + child_number, + chain_code: ChainCode::from(&data[13..45]), + public_key: secp256k1::PublicKey::from_slice(&data[45..78])?, + }; + + let mut network = [0; 4]; + network.copy_from_slice(&data[0..4]); + Ok((epk, network.to_vec())) +} + +pub fn extended_pub_key_derive( + extended_pub_key: &ExtendedPubKey, + path: &str, +) -> Result { + let mut parts = path.split('/').peekable(); + if *parts.peek().unwrap() == "m" { + parts.next(); + } + + let children_nums = parts + .map(str::parse) + .collect::, Bip32Error>>()?; + + let child_key = extended_pub_key.derive_pub(&SECP256K1_ENGINE, &children_nums)?; + + Ok(child_key) +} + +pub fn get_xpub_prefix(network: &str) -> Vec { + if network == "MAINNET" { + hex_to_bytes("0488b21e").unwrap() + } else { + hex_to_bytes("043587cf").unwrap() + } +} + +pub fn encrypt_xpub(xpub: &str) -> Result { + let key = crate::XPUB_COMMON_KEY_128.read(); + let iv = crate::XPUB_COMMON_IV.read(); + let key_bytes = hex::decode(&*key)?; + let iv_bytes = hex::decode(&*iv)?; + let encrypted = encrypt_pkcs7(xpub.as_bytes(), &key_bytes, &iv_bytes)?; + anyhow::Ok(base64::encode(encrypted)) +} + +pub fn network_convert(network: &str) -> Network { + match network.to_uppercase().as_str() { + "MAINNET" => Network::Bitcoin, + "TESTNET" => Network::Testnet, + _ => Network::Testnet, } - Ok(children.join("/")) } #[cfg(test)] mod tests { use crate::utility; - use crate::utility::is_valid_hex; use crate::utility::{ bigint_to_byte_vec, retrieve_recid, secp256k1_sign, secp256k1_sign_verify, sha256_hash, uncompress_pubkey_2_compress, }; + use crate::utility::{is_valid_hex, network_convert}; + use bitcoin::Network; use hex::FromHex; #[test] @@ -227,4 +305,16 @@ mod tests { let input1 = "d8549e61c7c5fa21315f86c9b6bd7f2efd0e7aef8647c467679a8cfefff9996329c47a6509487d2ca4d0408ff8f683449d438a0491c8bf11d54fa3b2d6af9849c808ddd1b67e84e8029edc5df4dc485e41fb1de2cbdd3143f204fb4cb58ca9155a194e465dcc7fbcb9fc729147efba62fbba2ba0356a97dcf816ab1fa8f4ebedf8506fa2920ac1f92bf2d3709b3b1cbb57124db22beb866a3b42e6286a6f6b4bcab27ec9cf7403db78f43c3d957de89d5fb23b3d9bcb23c0f62d9064da159714"; assert_eq!(is_valid_hex(input1), true,); } + + #[test] + fn test_network_convert() { + let network = network_convert("MAINNET"); + assert_eq!(network, Network::Bitcoin); + let network = network_convert("TESTNET"); + assert_eq!(network, Network::Testnet); + let network = network_convert("mainnet"); + assert_eq!(network, Network::Bitcoin); + let network = network_convert("ERRORNET"); + assert_eq!(network, Network::Testnet); + } } diff --git a/imkey-core/ikc-device/Cargo.toml b/imkey-core/ikc-device/Cargo.toml index ab889917..3739d47a 100644 --- a/imkey-core/ikc-device/Cargo.toml +++ b/imkey-core/ikc-device/Cargo.toml @@ -9,24 +9,21 @@ edition = "2018" [dependencies] ikc-common = {path = "../ikc-common"} ikc-transport = {path = "../ikc-transport"} -serde = { version = "1.0.147", features = ["derive"] } -serde_derive = "1.0.110" -serde_json = "1.0.89" -ring = "0.16.20" -base64 = "0.13.1" -aes-ctr = "0.6.0" -aes-soft = "0.6.4" -block-modes = "0.7.0" -hex = "0.4.3" -secp256k1 = {version ="0.24.1", features = ["rand", "recovery", "rand-std"] } -rand = "0.8.5" -sha1 = "0.6.0" -rsa = "0.7.2" -lazy_static = "1.4.0" -regex = "1.7.0" -failure = "0.1.8" -log = {version = "0.4.17", features = ["std"]} -prost = "0.11.2" -prost-types = "0.11.2" -bytes = "1.3.0" -parking_lot = "0.12.1" +serde = { version = "=1.0.147", features = ["derive"] } +serde_derive = "=1.0.147" +serde_json = "=1.0.89" +base64 = "=0.13.1" +hex = "=0.4.3" +secp256k1 = {version ="=0.24.3", features = ["rand", "recovery", "rand-std"] } +rand = "=0.8.5" +sha1 = "=0.6.1" +rsa = "=0.7.2" +lazy_static = "=1.4.0" +regex = "=1.9.3" +anyhow = "=1.0.79" +log = {version = "=0.4.17", features = ["std"]} +prost = "=0.11.2" +prost-types = "=0.11.2" +bytes = "=1.4.0" +parking_lot = "=0.12.1" +thiserror = "=1.0.56" diff --git a/imkey-core/ikc-device/src/app_delete.rs b/imkey-core/ikc-device/src/app_delete.rs index f909cecb..73caa2a2 100644 --- a/imkey-core/ikc-device/src/app_delete.rs +++ b/imkey-core/ikc-device/src/app_delete.rs @@ -31,20 +31,18 @@ impl TsmService for AppDeleteRequest { fn send_message(&mut self) -> Result<()> { loop { - println!("send message:{:#?}", self); let req_data = serde_json::to_vec_pretty(&self).unwrap(); let response_data = https::post(constants::TSM_ACTION_APP_DELETE, req_data)?; let return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - println!("return message:{:#?}", return_bean); - if return_bean._ReturnCode == constants::TSM_RETURN_CODE_SUCCESS { + if return_bean.return_code == constants::TSM_RETURN_CODE_SUCCESS { //check if end - let next_step_key = return_bean._ReturnData.next_step_key.unwrap(); + let next_step_key = return_bean.return_data.next_step_key.unwrap(); if constants::TSM_END_FLAG.eq(next_step_key.as_str()) { return Ok(()); } - match return_bean._ReturnData.apdu_list { + match return_bean.return_data.apdu_list { Some(apdu_list) => { let handle_result = ServiceResponse::::apdu_handle(apdu_list)?; diff --git a/imkey-core/ikc-device/src/app_download.rs b/imkey-core/ikc-device/src/app_download.rs index 50996708..9d6d3406 100644 --- a/imkey-core/ikc-device/src/app_download.rs +++ b/imkey-core/ikc-device/src/app_download.rs @@ -33,20 +33,18 @@ impl TsmService for AppDownloadRequest { fn send_message(&mut self) -> Result> { loop { - // println!("send message:{:#?}", self); let req_data = serde_json::to_vec_pretty(&self).unwrap(); let response_data = https::post(constants::TSM_ACTION_APP_DOWNLOAD, req_data)?; let return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - // println!("return message:{:#?}", return_bean); - if return_bean._ReturnCode == constants::TSM_RETURN_CODE_SUCCESS { + if return_bean.return_code == constants::TSM_RETURN_CODE_SUCCESS { //check step key is end - let next_step_key = return_bean.clone()._ReturnData.next_step_key.unwrap(); + let next_step_key = return_bean.clone().return_data.next_step_key.unwrap(); if constants::TSM_END_FLAG.eq(next_step_key.as_str()) { return Ok(return_bean); } - match return_bean._ReturnData.apdu_list { + match return_bean.return_data.apdu_list { Some(apdu_list) => { let handle_result = ServiceResponse::::apdu_handle(apdu_list)?; @@ -71,10 +69,10 @@ impl AppDownloadRequest { sdk_version: Option, ) -> Self { AppDownloadRequest { - seid: seid, - instance_aid: instance_aid, - device_cert: device_cert, - sdk_version: sdk_version, + seid, + instance_aid, + device_cert, + sdk_version, step_key: String::from("01"), status_word: None, command_id: String::from(constants::TSM_ACTION_APP_DOWNLOAD), diff --git a/imkey-core/ikc-device/src/app_update.rs b/imkey-core/ikc-device/src/app_update.rs index c4440f90..c5659765 100644 --- a/imkey-core/ikc-device/src/app_update.rs +++ b/imkey-core/ikc-device/src/app_update.rs @@ -33,20 +33,18 @@ impl TsmService for AppUpdateRequest { fn send_message(&mut self) -> Result> { loop { - // println!("send message:{:#?}", self); let req_data = serde_json::to_vec_pretty(&self).unwrap(); let response_data = https::post(constants::TSM_ACTION_APP_UPDATE, req_data)?; let return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - // println!("return message:{:#?}", return_bean); - if return_bean._ReturnCode == constants::TSM_RETURN_CODE_SUCCESS { + if return_bean.return_code == constants::TSM_RETURN_CODE_SUCCESS { //check if end - let next_step_key = return_bean.clone()._ReturnData.next_step_key.unwrap(); + let next_step_key = return_bean.clone().return_data.next_step_key.unwrap(); if constants::TSM_END_FLAG.eq(next_step_key.as_str()) { return Ok(return_bean); } - match return_bean._ReturnData.apdu_list { + match return_bean.return_data.apdu_list { Some(apdu_list) => { let handle_result = ServiceResponse::::apdu_handle(apdu_list)?; @@ -71,10 +69,10 @@ impl AppUpdateRequest { sdk_version: Option, ) -> Self { AppUpdateRequest { - seid: seid, - instance_aid: instance_aid, - device_cert: device_cert, - sdk_version: sdk_version, + seid, + instance_aid, + device_cert, + sdk_version, step_key: String::from("01"), status_word: None, command_id: String::from(constants::TSM_ACTION_APP_UPDATE), diff --git a/imkey-core/ikc-device/src/auth_code_storage.rs b/imkey-core/ikc-device/src/auth_code_storage.rs index c0408bbd..65658a80 100644 --- a/imkey-core/ikc-device/src/auth_code_storage.rs +++ b/imkey-core/ikc-device/src/auth_code_storage.rs @@ -28,12 +28,10 @@ impl TsmService for AuthCodeStorageRequest { type ReturnData = (); fn send_message(&mut self) -> Result<()> { - println!("send message:{:#?}", self); let req_data = serde_json::to_vec_pretty(&self).unwrap(); let response_data = https::post(constants::TSM_ACTION_AUTHCODE_STORAGE, req_data)?; let return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - println!("return message:{:#?}", return_bean); return_bean.service_res_check() } } @@ -41,8 +39,8 @@ impl TsmService for AuthCodeStorageRequest { impl AuthCodeStorageRequest { pub fn build_request_data(seid: String, auth_code: String) -> Self { AuthCodeStorageRequest { - seid: seid, - auth_code: auth_code, + seid, + auth_code, step_key: String::from("01"), status_word: None, command_id: String::from(constants::TSM_ACTION_AUTHCODE_STORAGE), diff --git a/imkey-core/ikc-device/src/cos_check_update.rs b/imkey-core/ikc-device/src/cos_check_update.rs index 8e3ef5e8..c030a093 100644 --- a/imkey-core/ikc-device/src/cos_check_update.rs +++ b/imkey-core/ikc-device/src/cos_check_update.rs @@ -27,12 +27,10 @@ impl TsmService for CosCheckUpdateRequest { type ReturnData = ServiceResponse; fn send_message(&mut self) -> Result> { - // println!("send message:{:#?}", self); let req_data = serde_json::to_vec_pretty(&self).unwrap(); let response_data = https::post(constants::TSM_ACTION_COS_CHECK_UPDATE, req_data)?; let return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - // println!("return message:{:#?}", return_bean); match return_bean.service_res_check() { Ok(()) => Ok(return_bean), Err(e) => Err(e), @@ -43,8 +41,8 @@ impl TsmService for CosCheckUpdateRequest { impl CosCheckUpdateRequest { pub fn build_request_data(seid: String, cos_version: String) -> Self { CosCheckUpdateRequest { - seid: seid, - cos_version: cos_version, + seid, + cos_version, command_id: String::from(constants::TSM_ACTION_COS_CHECK_UPDATE), } } diff --git a/imkey-core/ikc-device/src/cos_upgrade.rs b/imkey-core/ikc-device/src/cos_upgrade.rs index 91cb6890..9d63a121 100644 --- a/imkey-core/ikc-device/src/cos_upgrade.rs +++ b/imkey-core/ikc-device/src/cos_upgrade.rs @@ -76,10 +76,10 @@ impl CosUpgradeRequest { let mut request_data = CosUpgradeRequest { seid: seid.clone(), - sn: sn, + sn, device_cert: device_cert.clone(), - se_cos_version: se_cos_version, - is_bl_status: is_bl_status, + se_cos_version, + is_bl_status, step_key: if is_jump { "03".to_string() } else { @@ -88,25 +88,23 @@ impl CosUpgradeRequest { status_word: None, command_id: String::from(constants::TSM_ACTION_COS_UPGRADE), card_ret_data_list: None, - se_bl_version: se_bl_version, + se_bl_version, }; loop { - // println!("send message:{:#?}", request_data); let req_data = serde_json::to_vec_pretty(&request_data).unwrap(); let response_data = https::post(constants::TSM_ACTION_COS_UPGRADE, req_data)?; let return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - // println!("return message:{:#?}", return_bean); - if return_bean._ReturnCode == constants::TSM_RETURN_CODE_SUCCESS { + if return_bean.return_code == constants::TSM_RETURN_CODE_SUCCESS { //check if end - let next_step_key = return_bean._ReturnData.next_step_key.unwrap(); + let next_step_key = return_bean.return_data.next_step_key.unwrap(); if constants::TSM_END_FLAG.eq(next_step_key.as_str()) { return Ok(()); } let mut apdu_res: Vec = vec![]; - match return_bean._ReturnData.apdu_list { + match return_bean.return_data.apdu_list { Some(apdu_list) => { for (index_val, apdu_val) in apdu_list.iter().enumerate() { //send apdu command and get return data @@ -138,7 +136,7 @@ impl CosUpgradeRequest { if "06".eq(next_step_key.as_str()) { //applet download - match &return_bean._ReturnData.instance_aid_list { + match &return_bean.return_data.instance_aid_list { Some(aid_list) => { for temp_instance_aid in aid_list.iter() { AppDownloadRequest::build_request_data( diff --git a/imkey-core/ikc-device/src/device_binding.rs b/imkey-core/ikc-device/src/device_binding.rs index bd77e879..c06e49f1 100644 --- a/imkey-core/ikc-device/src/device_binding.rs +++ b/imkey-core/ikc-device/src/device_binding.rs @@ -1,26 +1,22 @@ -extern crate aes_soft as aes; - use super::key_manager::KeyManager; use crate::auth_code_storage::AuthCodeStorageRequest; use crate::device_cert_check::DeviceCertCheckRequest; use crate::error::{BindError, ImkeyError}; use crate::Result; use crate::{device_manager, TsmService}; -use aes::Aes128; -use block_modes::block_padding::Pkcs7; -use block_modes::{BlockMode, Cbc}; +use ikc_common::aes::cbc::encrypt_pkcs7; use ikc_common::apdu::{Apdu, ApduCheck, ImkApdu}; use ikc_common::constants::{ BIND_RESULT_ERROR, BIND_RESULT_SUCCESS, BIND_STATUS_BOUND_OTHER, BIND_STATUS_BOUND_THIS, BIND_STATUS_UNBOUND, IMK_AID, }; +use ikc_common::utility::sha256_hash; #[cfg(any(target_os = "macos", target_os = "windows", target_os = "linux"))] use ikc_transport::hid_api::hid_connect; use ikc_transport::message::send_apdu; use parking_lot::Mutex; use rand::rngs::OsRng; use regex::Regex; -use ring::digest; use rsa::{BigUint, PaddingScheme, PublicKey as RSAPublic, RsaPublicKey}; use secp256k1::{ecdh, PublicKey, SecretKey}; use sha1::Sha1; @@ -125,16 +121,14 @@ impl DeviceManage { data.extend(binding_code_bytes); data.extend(&key_manager_obj.pub_key); data.extend(&key_manager_obj.se_pub_key); - let data_hash = digest::digest(&digest::SHA256, data.as_slice()); + let data_hash = sha256_hash(data.as_slice()); //encryption hash value by session key - type Aes128Cbc = Cbc; - let cipher = Aes128Cbc::new_var( + let ciphertext = encrypt_pkcs7( + &data_hash.as_ref(), &key_manager_obj.session_key, - &gen_iv(&temp_binding_code).as_ref(), + &gen_iv(&temp_binding_code), )?; - - let ciphertext = cipher.encrypt_vec(data_hash.as_ref()); //gen identityVerify command let mut apdu_data = vec![]; apdu_data.extend(&key_manager_obj.pub_key); @@ -168,11 +162,11 @@ fn select_imk_applet() -> Result<()> { generator iv */ fn gen_iv(auth_code: &String) -> [u8; 16] { - let salt_bytes = digest::digest(&digest::SHA256, "bindingCode".as_bytes()); - let auth_code_hash = digest::digest(&digest::SHA256, auth_code.as_bytes()); + let salt_bytes = sha256_hash("bindingCode".as_bytes()); + let auth_code_hash = sha256_hash(auth_code.as_bytes()); let mut result = [0u8; 32]; - for (index, value) in auth_code_hash.as_ref().iter().enumerate() { - result[index] = value ^ salt_bytes.as_ref().get(index).unwrap(); + for (index, value) in auth_code_hash.iter().enumerate() { + result[index] = value ^ salt_bytes.get(index).unwrap(); } let mut return_data = [0u8; 16]; return_data.copy_from_slice(&result[..16]); @@ -243,7 +237,7 @@ pub fn bind_test() { // pub const TEST_KEY_PATH: &str = "/tmp/"; // pub const TEST_BIND_CODE: &str = "MCYNK5AH"; pub const TEST_KEY_PATH: &str = "/tmp/"; -pub const TEST_BIND_CODE: &str = "DJKP4NUR"; +pub const TEST_BIND_CODE: &str = "7FVRAJJ7"; #[cfg(test)] mod test { diff --git a/imkey-core/ikc-device/src/device_cert_check.rs b/imkey-core/ikc-device/src/device_cert_check.rs index 4cad4c28..cc8f0e30 100644 --- a/imkey-core/ikc-device/src/device_cert_check.rs +++ b/imkey-core/ikc-device/src/device_cert_check.rs @@ -31,16 +31,14 @@ impl TsmService for DeviceCertCheckRequest { type ReturnData = (); fn send_message(&mut self) -> Result<()> { - println!("send message:{:#?}", self); let req_data = serde_json::to_vec_pretty(&self).unwrap(); let response_data = https::post(constants::TSM_ACTION_DEVICE_CERT_CHECK, req_data)?; let return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - println!("return message:{:#?}", return_bean); match return_bean.service_res_check() { Ok(()) => { - if return_bean._ReturnData.verify_result.unwrap() { + if return_bean.return_data.verify_result.unwrap() { return Ok(()); } Err(ImkeyError::ImkeySeCertInvalid.into()) @@ -53,9 +51,9 @@ impl TsmService for DeviceCertCheckRequest { impl DeviceCertCheckRequest { pub fn build_request_data(seid: String, sn: String, device_cert: String) -> Self { DeviceCertCheckRequest { - seid: seid, - sn: sn, - device_cert: device_cert, + seid, + sn, + device_cert, step_key: String::from("01"), status_word: None, command_id: String::from(constants::TSM_ACTION_DEVICE_CERT_CHECK), @@ -68,9 +66,9 @@ impl DeviceCertCheckRequest { mod test { use crate::device_binding::KEY_MANAGER; use crate::device_cert_check::DeviceCertCheckRequest; - use crate::device_manager::{get_cert, get_se_id, get_sn}; + use crate::device_manager::{get_se_id, get_sn}; use crate::TsmService; - use ikc_common::apdu::{Apdu, ApduCheck, ImkApdu}; + use ikc_common::apdu::{Apdu, ImkApdu}; use ikc_common::constants::IMK_AID; use ikc_transport::hid_api::hid_connect; use ikc_transport::message::send_apdu; @@ -85,7 +83,7 @@ mod test { ////test environment cert // let device_cert = "7F2181C5931018080000000000860001010000000106420200015F200401020304950200805F2504201810145F2404FFFFFFFF53007F4947B0410403089D8A83A87F24D906303A49D39669D17B0F7AB76EB098A65AFEF31154E75DEE5B87B69CBF78F11E831A4961C8A8F031C2869EA0716C798F76F5E91338DC35F002DFFE5F37473045022100EB46DC605568CF8D5051CD67CEC234C66FC6E2561D2FE57D8DDF8D4D204695A6022009C246BE380DD2A8972807D2AE2A0FE22877408717E239AAA0C2530524714A48".to_string(); - let mut key_manager_obj = KEY_MANAGER.lock(); + let key_manager_obj = KEY_MANAGER.lock(); //gen bindchec apdu let bind_check_apdu = ImkApdu::bind_check(&key_manager_obj.pub_key); //send bindcheck command and get return data diff --git a/imkey-core/ikc-device/src/device_manager.rs b/imkey-core/ikc-device/src/device_manager.rs index 0960210c..344bd913 100644 --- a/imkey-core/ikc-device/src/device_manager.rs +++ b/imkey-core/ikc-device/src/device_manager.rs @@ -11,6 +11,7 @@ use crate::device_binding::DeviceManage; use crate::se_query::SeQueryResponse; use crate::ServiceResponse; use crate::{Result, TsmService}; +use anyhow::anyhow; use app_update::AppUpdateRequest; use ikc_common::apdu::{Apdu, ApduCheck}; use ikc_common::applet; @@ -116,7 +117,7 @@ pub fn get_ble_name() -> Result { pub fn set_ble_name(ble_name: String) -> Result { let name_verify_regex = Regex::new(r"[0-9A-Za-z]{1,12}").unwrap(); if !name_verify_regex.is_match(ble_name.as_ref()) { - return Err(format_err!("imkey_device_name_invalid")); + return Err(anyhow!("imkey_device_name_invalid")); } let apdu = Apdu::set_ble_name(ble_name.as_ref()); let res = send_apdu(apdu)?; @@ -264,7 +265,7 @@ mod test { fn app_download_wrong_appname_test() { assert!(hid_connect(constants::DEVICE_MODEL_NAME).is_ok()); //Enter the wrong app name - let result = app_download("TEST"); + let _result = app_download("TEST"); } #[test] @@ -278,7 +279,7 @@ mod test { #[should_panic(expected = "imkey_app_name_not_exist")] fn app_update_wrong_app_name_test() { assert!(hid_connect(constants::DEVICE_MODEL_NAME).is_ok()); - let result = app_update("TEST"); + let _result = app_update("TEST"); } #[test] diff --git a/imkey-core/ikc-device/src/deviceapi.rs b/imkey-core/ikc-device/src/deviceapi.rs index 3b3c1dae..af0bed47 100644 --- a/imkey-core/ikc-device/src/deviceapi.rs +++ b/imkey-core/ikc-device/src/deviceapi.rs @@ -1,142 +1,165 @@ +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AppDownloadReq { #[prost(string, tag = "1")] - pub app_name: std::string::String, + pub app_name: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AppDownloadRes { #[prost(string, repeated, tag = "1")] - pub address_register_list: ::std::vec::Vec, + pub address_register_list: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AppUpdateReq { #[prost(string, tag = "1")] - pub app_name: std::string::String, + pub app_name: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AppUpdateRes { #[prost(string, repeated, tag = "1")] - pub address_register_list: ::std::vec::Vec, + pub address_register_list: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AppDeleteReq { #[prost(string, tag = "1")] - pub app_name: std::string::String, + pub app_name: ::prost::alloc::string::String, } /// check_update api +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CheckUpdateRes { #[prost(string, tag = "1")] - pub se_id: std::string::String, + pub se_id: ::prost::alloc::string::String, #[prost(string, tag = "2")] - pub sn: std::string::String, + pub sn: ::prost::alloc::string::String, #[prost(string, tag = "3")] - pub status: std::string::String, + pub status: ::prost::alloc::string::String, #[prost(string, tag = "4")] - pub sdk_mode: std::string::String, + pub sdk_mode: ::prost::alloc::string::String, #[prost(message, repeated, tag = "5")] - pub available_app_list: ::std::vec::Vec, + pub available_app_list: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AvailableAppBean { #[prost(string, tag = "1")] - pub app_name: std::string::String, + pub app_name: ::prost::alloc::string::String, #[prost(string, tag = "2")] - pub app_logo: std::string::String, + pub app_logo: ::prost::alloc::string::String, #[prost(string, tag = "3")] - pub installed_version: std::string::String, + pub installed_version: ::prost::alloc::string::String, #[prost(string, tag = "4")] - pub last_updated: std::string::String, + pub last_updated: ::prost::alloc::string::String, #[prost(string, tag = "5")] - pub latest_version: std::string::String, + pub latest_version: ::prost::alloc::string::String, #[prost(string, tag = "6")] - pub install_mode: std::string::String, + pub install_mode: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BindCheckRes { #[prost(string, tag = "1")] - pub bind_status: std::string::String, + pub bind_status: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BindAcquireReq { #[prost(string, tag = "1")] - pub bind_code: std::string::String, + pub bind_code: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BindAcquireRes { #[prost(string, tag = "1")] - pub bind_result: std::string::String, + pub bind_result: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetSeidRes { #[prost(string, tag = "1")] - pub seid: std::string::String, + pub seid: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetSnRes { #[prost(string, tag = "1")] - pub sn: std::string::String, + pub sn: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetRamSizeRes { #[prost(string, tag = "1")] - pub ram_size: std::string::String, + pub ram_size: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetFirmwareVersionRes { #[prost(string, tag = "1")] - pub firmware_version: std::string::String, + pub firmware_version: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetBatteryPowerRes { #[prost(string, tag = "1")] - pub battery_power: std::string::String, + pub battery_power: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetLifeTimeRes { #[prost(string, tag = "1")] - pub life_time: std::string::String, + pub life_time: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetBleNameRes { #[prost(string, tag = "1")] - pub ble_name: std::string::String, + pub ble_name: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct SetBleNameReq { #[prost(string, tag = "1")] - pub ble_name: std::string::String, + pub ble_name: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetBleVersionRes { #[prost(string, tag = "1")] - pub ble_version: std::string::String, + pub ble_version: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetSdkInfoRes { #[prost(string, tag = "1")] - pub sdk_version: std::string::String, + pub sdk_version: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DeviceConnectReq { #[prost(string, tag = "1")] - pub device_model_name: std::string::String, + pub device_model_name: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CosCheckUpdateRes { #[prost(string, tag = "1")] - pub seid: std::string::String, + pub seid: ::prost::alloc::string::String, #[prost(bool, tag = "2")] pub is_latest: bool, #[prost(string, tag = "3")] - pub latest_cos_version: std::string::String, + pub latest_cos_version: ::prost::alloc::string::String, #[prost(string, tag = "4")] - pub update_type: std::string::String, + pub update_type: ::prost::alloc::string::String, #[prost(string, tag = "5")] - pub description: std::string::String, + pub description: ::prost::alloc::string::String, #[prost(bool, tag = "6")] pub is_update_success: bool, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct IsBlStatusRes { #[prost(bool, tag = "1")] diff --git a/imkey-core/ikc-device/src/error.rs b/imkey-core/ikc-device/src/error.rs index 19443162..b5ac4e93 100644 --- a/imkey-core/ikc-device/src/error.rs +++ b/imkey-core/ikc-device/src/error.rs @@ -1,63 +1,65 @@ -#[derive(Fail, Debug, PartialOrd, PartialEq)] +use thiserror::Error; + +#[derive(Error, Debug, PartialOrd, PartialEq)] pub enum ImkeyError { - #[fail(display = "imkey_tsm_device_authenticity_check_fail")] + #[error("imkey_tsm_device_authenticity_check_fail")] ImkeyTsmDeviceAuthenticityCheckFail, - #[fail(display = "imkey_tsm_device_not_activated")] + #[error("imkey_tsm_device_not_activated")] ImkeyTsmDeviceNotActivated, - #[fail(display = "imkey_tsm_device_illegal")] + #[error("imkey_tsm_device_illegal")] ImkeyTsmDeviceIllegal, - #[fail(display = "imkey_tsm_device_stop_using")] + #[error("imkey_tsm_device_stop_using")] ImkeyTsmDeviceStopUsing, - #[fail(display = "imkey_tsm_server_error")] + #[error("imkey_tsm_server_error")] ImkeyTsmServerError, - #[fail(display = "imkey_se_cert_invalid")] + #[error("imkey_se_cert_invalid")] ImkeySeCertInvalid, - #[fail(display = "imkey_tsm_device_update_check_fail")] + #[error("imkey_tsm_device_update_check_fail")] ImkeyTsmDeviceUpdateCheckFail, - #[fail(display = "imkey_tsm_device_active_fail")] + #[error("imkey_tsm_device_active_fail")] ImkeyTsmDeviceActiveFail, - #[fail(display = "imkey_tsm_receipt_check_fail")] + #[error("imkey_tsm_receipt_check_fail")] ImkeyTsmReceiptCheckFail, - #[fail(display = "imkey_tsm_app_download_fail")] + #[error("imkey_tsm_app_download_fail")] ImkeyTsmAppDownloadFail, - #[fail(display = "imkey_tsm_app_update_fail")] + #[error("imkey_tsm_app_update_fail")] ImkeyTsmAppUpdateFail, - #[fail(display = "imkey_tsm_app_delete_fail")] + #[error("imkey_tsm_app_delete_fail")] ImkeyTsmAppDeleteFail, - #[fail(display = "imkey_tsm_oce_cert_check_fail")] + #[error("imkey_tsm_oce_cert_check_fail")] ImkeyTsmOceCertCheckFail, - #[fail(display = "imkey_tsm_cos_info_no_conf")] + #[error("imkey_tsm_cos_info_no_conf")] ImkeyTsmCosInfoNoConf, - #[fail(display = "imkey_tsm_cos_upgrade_fail")] + #[error("imkey_tsm_cos_upgrade_fail")] ImkeyTsmCosUpgradeFail, - #[fail(display = "imkey_tsm_upload_cos_version_is_null")] + #[error("imkey_tsm_upload_cos_version_is_null")] ImkeyTsmUploadCosVersionIsNull, - #[fail(display = "imkey_tsm_switch_bl_status_fail")] + #[error("imkey_tsm_switch_bl_status_fail")] ImkeyTsmSwitchBlStatusFail, - #[fail(display = "imkey_tsm_write_wallet_address_fail")] + #[error("imkey_tsm_write_wallet_address_fail")] ImkeyTsmWriteWalletAddressFail, - #[fail(display = "imkey_device_reconnect_fail")] + #[error("imkey_device_reconnect_fail")] ImkeyDeviceReconnectFail, - #[fail(display = "imkey_tsm_check_update_fail")] + #[error("imkey_tsm_check_update_fail")] ImkeyTsmCosCheckUpdateFail, - #[fail(display = "imkey_auth_code_ciphertext_storage_fail")] + #[error("imkey_auth_code_ciphertext_storage_fail")] ImkeyTsmAuthCodeCiphertextStorageFail, - #[fail(display = "imkey_tsm_cos_version_unsupport_applet")] - ImkeyTsmCosVersionUnsupport_applet, - #[fail(display = "imkey_tsm_device_unsupport_applet")] - ImkeyTsmDeviceUnsupport_applet, + #[error("imkey_tsm_cos_version_unsupport_applet")] + ImkeyTsmCosVersionUnsupportApplet, + #[error("imkey_tsm_device_unsupport_applet")] + ImkeyTsmDeviceUnsupportApplet, } -#[derive(Fail, Debug, PartialOrd, PartialEq)] +#[derive(Error, Debug, PartialOrd, PartialEq)] pub enum BindError { - #[fail(display = "imkey_keyfile_io_error")] + #[error("imkey_keyfile_io_error")] ImkeyKeyfileIoError, - #[fail(display = "imkey_sdk_illegal_argument")] + #[error("imkey_sdk_illegal_argument")] ImkeySdkIllegalArgument, - #[fail(display = "imkey_encrypt_authcode_fail")] + #[error("imkey_encrypt_authcode_fail")] ImkeyEncryptAuthcodeFail, - #[fail(display = "imkey_save_key_file_fail")] + #[error("imkey_save_key_file_fail")] ImkeySaveKeyFileFail, - #[fail(display = "imkey_authcode_error")] + #[error("imkey_authcode_error")] ImkeyAuthcodeError, } diff --git a/imkey-core/ikc-device/src/key_manager.rs b/imkey-core/ikc-device/src/key_manager.rs index ab411e39..fd9bcb15 100644 --- a/imkey-core/ikc-device/src/key_manager.rs +++ b/imkey-core/ikc-device/src/key_manager.rs @@ -1,24 +1,15 @@ +use crate::error::BindError; +use crate::Result; use base64::{decode, encode}; -use ring::digest; +use ikc_common::aes::cbc::{decrypt_pkcs7, encrypt_pkcs7}; +use ikc_common::utility::{is_valid_hex, sha256_hash}; use secp256k1::rand::rngs::OsRng; +use secp256k1::Secp256k1; use std::fs; use std::fs::{File, OpenOptions}; use std::io::{ErrorKind, Read, Write}; use std::path::Path; -extern crate aes_soft as aes; -extern crate block_modes; - -use crate::error::BindError; -use crate::Result; -use aes_soft::Aes128; -use block_modes::block_padding::Pkcs7; -use block_modes::{BlockMode, Cbc}; -use hex::FromHex; -use ikc_common::utility::is_valid_hex; -use rand::thread_rng; -use secp256k1::Secp256k1; - pub struct KeyManager { pub pri_key: Vec, //32 byte @@ -52,12 +43,8 @@ impl KeyManager { */ pub fn gen_encrypt_key(&mut self, seid: &str, sn: &str) { //calc seid and sn hash - let seid_hash = digest::digest(&digest::SHA256, seid.as_bytes()) - .as_ref() - .to_vec(); - let sn_hash = digest::digest(&digest::SHA256, sn.as_bytes()) - .as_ref() - .to_vec(); + let seid_hash = sha256_hash(seid.as_bytes()); + let sn_hash = sha256_hash(sn.as_bytes()); let mut xor_result: Vec = vec![]; for (index, value) in seid_hash.iter().enumerate() { @@ -79,14 +66,11 @@ impl KeyManager { data.extend(self.session_key.iter()); //calc HASH - let hash = digest::digest(&digest::SHA256, data.as_slice()); - data.extend(hash.as_ref()[..4].iter()); + let hash = sha256_hash(data.as_slice()); + data.extend(&hash[..4]); //AES-CBC encryption - type Aes128Cbc = Cbc; - let cipher = Aes128Cbc::new_var(self.encry_key.as_ref(), self.iv.as_ref()) - .expect("aes_128cbc_encrypt_error"); - let ciphertext = cipher.encrypt_vec(data.as_ref()); + let ciphertext = encrypt_pkcs7(&data, &self.encry_key, &self.iv)?; //base64 coding Ok(encode(&ciphertext)) @@ -129,13 +113,11 @@ impl KeyManager { }; //AES-CBC Decrypt - type Aes128Cbc = Cbc; - let cipher = Aes128Cbc::new_var(self.encry_key.as_ref(), self.iv.as_ref())?; - let decrypt_result = cipher.decrypt_vec(&ciphertext_bytes); - if decrypt_result.is_err() { + let plaintext = decrypt_pkcs7(&ciphertext_bytes, &self.encry_key, &self.iv); + if plaintext.is_err() { return Ok(false); } - let decrypted_data = decrypt_result.unwrap(); + let decrypted_data = plaintext?; //Parsing data //pri_key @@ -155,10 +137,9 @@ impl KeyManager { //check checksum let data = &decrypted_data[..178]; - let data_hash = digest::digest(&digest::SHA256, data); - let data_hash_byte = data_hash.as_ref(); + let data_hash = sha256_hash(data); for (index, val) in self.check_sum.iter().enumerate() { - if val != &data_hash_byte[index] { + if val != &data_hash[index] { return Ok(false); } } diff --git a/imkey-core/ikc-device/src/lib.rs b/imkey-core/ikc-device/src/lib.rs index e2ddbbd7..bc5ad027 100644 --- a/imkey-core/ikc-device/src/lib.rs +++ b/imkey-core/ikc-device/src/lib.rs @@ -16,10 +16,9 @@ pub mod key_manager; extern crate lazy_static; extern crate ikc_transport; pub mod error; -#[macro_use] -extern crate failure; +extern crate anyhow; use core::result; -pub type Result = result::Result; +pub type Result = result::Result; use crate::error::ImkeyError; use ikc_common::constants; use ikc_transport::message; @@ -30,9 +29,12 @@ pub mod cos_check_update; #[allow(non_snake_case)] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ServiceResponse { - pub _ReturnCode: String, - pub _ReturnMsg: String, - pub _ReturnData: T, + #[serde(rename = "_ReturnCode")] + pub return_code: String, + #[serde(rename = "_ReturnMsg")] + pub return_msg: String, + #[serde(rename = "_ReturnData")] + pub return_data: T, } pub trait TsmService { @@ -42,7 +44,7 @@ pub trait TsmService { impl ServiceResponse { pub fn service_res_check(&self) -> Result<()> { - match self._ReturnCode.as_str() { + match self.return_code.as_str() { constants::TSM_RETURN_CODE_SUCCESS => Ok(()), constants::TSM_RETURNCODE_APP_DELETE_FAIL => { Err(ImkeyError::ImkeyTsmAppDeleteFail.into()) @@ -97,10 +99,10 @@ impl ServiceResponse { Err(ImkeyError::ImkeyTsmDeviceUpdateCheckFail.into()) } constants::TSM_RETURNCODE_COS_VERSION_UNSUPPORT_APPLET => { - Err(ImkeyError::ImkeyTsmCosVersionUnsupport_applet.into()) + Err(ImkeyError::ImkeyTsmCosVersionUnsupportApplet.into()) } constants::TSM_RETURNCODE_DEVICE_UNSUPPORT_APPLET => { - Err(ImkeyError::ImkeyTsmDeviceUnsupport_applet.into()) + Err(ImkeyError::ImkeyTsmDeviceUnsupportApplet.into()) } _ => Err(ImkeyError::ImkeyTsmServerError.into()), } diff --git a/imkey-core/ikc-device/src/se_activate.rs b/imkey-core/ikc-device/src/se_activate.rs index 51e19af2..3d7b1936 100644 --- a/imkey-core/ikc-device/src/se_activate.rs +++ b/imkey-core/ikc-device/src/se_activate.rs @@ -30,20 +30,18 @@ impl TsmService for SeActivateRequest { fn send_message(&mut self) -> Result<()> { loop { - println!("send message:{:#?}", self); let req_data = serde_json::to_vec_pretty(&self).unwrap(); let response_data = https::post(constants::TSM_ACTION_SE_ACTIVATE, req_data)?; let return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - println!("return message:{:#?}", return_bean); - if return_bean._ReturnCode == constants::TSM_RETURN_CODE_SUCCESS { + if return_bean.return_code == constants::TSM_RETURN_CODE_SUCCESS { //check if end - let next_step_key = return_bean._ReturnData.next_step_key.unwrap(); + let next_step_key = return_bean.return_data.next_step_key.unwrap(); if constants::TSM_END_FLAG.eq(next_step_key.as_str()) { return Ok(()); } - match return_bean._ReturnData.apdu_list { + match return_bean.return_data.apdu_list { Some(apdu_list) => { let handle_result = ServiceResponse::::apdu_handle(apdu_list)?; @@ -63,9 +61,9 @@ impl TsmService for SeActivateRequest { impl SeActivateRequest { pub fn build_request_data(seid: String, sn: String, device_cert: String) -> Self { SeActivateRequest { - seid: seid, - sn: sn, - device_cert: device_cert, + seid, + sn, + device_cert, step_key: String::from("01"), status_word: None, command_id: String::from(constants::TSM_ACTION_SE_ACTIVATE), diff --git a/imkey-core/ikc-device/src/se_query.rs b/imkey-core/ikc-device/src/se_query.rs index 93bf68cd..f30c0611 100644 --- a/imkey-core/ikc-device/src/se_query.rs +++ b/imkey-core/ikc-device/src/se_query.rs @@ -43,21 +43,19 @@ impl TsmService for SeQueryRequest { type ReturnData = ServiceResponse; fn send_message(&mut self) -> Result> { - // println!("send message:{:#?}", self); let req_data = serde_json::to_vec_pretty(&self).unwrap(); let response_data = https::post(constants::TSM_ACTION_SE_QUERY, req_data)?; let mut return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - // println!("return message:{:#?}", return_bean); match return_bean.service_res_check() { Ok(()) => { - return_bean._ReturnData.status = + return_bean.return_data.status = Some(constants::IMKEY_DEV_STATUS_LATEST.to_string()); Ok(return_bean) } Err(e) => { - if constants::TSM_RETURNCODE_DEV_INACTIVATED.eq(return_bean._ReturnCode.as_str()) { + if constants::TSM_RETURNCODE_DEV_INACTIVATED.eq(return_bean.return_code.as_str()) { return Ok(return_bean); } Err(e) @@ -69,9 +67,9 @@ impl TsmService for SeQueryRequest { impl SeQueryRequest { pub fn build_request_data(seid: String, sn: String, sdk_version: Option) -> Self { SeQueryRequest { - seid: seid, - sn: sn, - sdk_version: sdk_version, + seid, + sn, + sdk_version, step_key: String::from("01"), status_word: None, command_id: String::from(constants::TSM_ACTION_SE_QUERY), diff --git a/imkey-core/ikc-device/src/se_secure_check.rs b/imkey-core/ikc-device/src/se_secure_check.rs index 437babe1..134a723c 100644 --- a/imkey-core/ikc-device/src/se_secure_check.rs +++ b/imkey-core/ikc-device/src/se_secure_check.rs @@ -30,20 +30,18 @@ impl TsmService for SeSecureCheckRequest { fn send_message(&mut self) -> Result<()> { loop { - println!("send message:{:#?}", self); let req_data = serde_json::to_vec_pretty(&self).unwrap(); let response_data = https::post(constants::TSM_ACTION_SE_SECURE_CHECK, req_data)?; let return_bean: ServiceResponse = serde_json::from_str(response_data.as_str())?; - println!("return message:{:#?}", return_bean); - if return_bean._ReturnCode == constants::TSM_RETURN_CODE_SUCCESS { + if return_bean.return_code == constants::TSM_RETURN_CODE_SUCCESS { //check if end - let next_step_key = return_bean._ReturnData.next_step_key.unwrap(); + let next_step_key = return_bean.return_data.next_step_key.unwrap(); if constants::TSM_END_FLAG.eq(next_step_key.as_str()) { return Ok(()); } - match return_bean._ReturnData.apdu_list { + match return_bean.return_data.apdu_list { Some(apdu_list) => { let handle_result = ServiceResponse::::apdu_handle(apdu_list)?; @@ -63,9 +61,9 @@ impl TsmService for SeSecureCheckRequest { impl SeSecureCheckRequest { pub fn build_request_data(seid: String, sn: String, device_cert: String) -> Self { SeSecureCheckRequest { - seid: seid, - sn: sn, - device_cert: device_cert, + seid, + sn, + device_cert, step_key: String::from("01"), status_word: None, command_id: String::from(constants::TSM_ACTION_SE_SECURE_CHECK), diff --git a/imkey-core/ikc-proto/Cargo.toml b/imkey-core/ikc-proto/Cargo.toml index d6c2d7fd..8dd51ff4 100644 --- a/imkey-core/ikc-proto/Cargo.toml +++ b/imkey-core/ikc-proto/Cargo.toml @@ -7,12 +7,12 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -prost = "0.11.2" -bytes = "1.3.0" -prost-types = "0.5.0" +prost = "=0.11.2" +bytes = "=1.4.0" +prost-types = "=0.11.2" [lib] name = "proto" [build-dependencies] -prost-build = "0.6.1" \ No newline at end of file +prost-build = "=0.11.4" \ No newline at end of file diff --git a/imkey-core/ikc-proto/build.rs b/imkey-core/ikc-proto/build.rs index 409c7e62..ca162fca 100644 --- a/imkey-core/ikc-proto/build.rs +++ b/imkey-core/ikc-proto/build.rs @@ -4,7 +4,7 @@ extern crate prost_build; fn main() { // tcx-api env::set_var("OUT_DIR", "../ikc/src"); - prost_build::compile_protos(&["src/ikc.proto"], &["src/"]).unwrap(); + prost_build::compile_protos(&["src/api.proto"], &["src/"]).unwrap(); // common env::set_var("OUT_DIR", "../ikc-common/src"); diff --git a/imkey-core/ikc-proto/src/ikc.proto b/imkey-core/ikc-proto/src/api.proto similarity index 61% rename from imkey-core/ikc-proto/src/ikc.proto rename to imkey-core/ikc-proto/src/api.proto index e4852cf0..66a70a6e 100644 --- a/imkey-core/ikc-proto/src/ikc.proto +++ b/imkey-core/ikc-proto/src/api.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package ikc; +package api; import "google/protobuf/any.proto"; @@ -100,4 +100,67 @@ message BtcForkWallet { string chainType = 2; string address = 3; string encXPub = 4; +} + +message DeriveAccountsParam { + message Derivation { + string chainType = 1; + string path = 2; + string network = 3; + string segWit = 4; + string chainId = 5; + string curve = 6; + string bech32Prefix = 7; + } + repeated Derivation derivations= 1; +} + +message AccountResponse { + string chainType = 1; + string address = 2; + string path = 3; + string curve = 4; + string publicKey = 5; + string extendedPublicKey = 6; + string encryptedExtendedPublicKey = 7; + string segWit = 8; +} + +message DeriveAccountsResult { + repeated AccountResponse accounts = 1; +} + +message DeriveSubAccountsParam { + string chainType = 1; + string curve = 2; + string network = 3; + string segWit = 4; + repeated string relativePaths = 5; + string extendedPublicKey = 6; +} + +message DeriveSubAccountsResult { + repeated AccountResponse accounts = 1; +} + +message GetExtendedPublicKeysParam { + repeated PublicKeyDerivation derivations = 1; +} + +message GetExtendedPublicKeysResult { + repeated string extendedPublicKeys = 1; +} + +message PublicKeyDerivation { + string chainType = 1; + string path = 2; + string curve = 3; +} + +message GetPublicKeysParam { + repeated PublicKeyDerivation derivations = 1; +} + +message GetPublicKeysResult { + repeated string publicKeys = 1; } \ No newline at end of file diff --git a/imkey-core/ikc-proto/src/btc.proto b/imkey-core/ikc-proto/src/btc.proto index 076b4965..cf4b9c1e 100644 --- a/imkey-core/ikc-proto/src/btc.proto +++ b/imkey-core/ikc-proto/src/btc.proto @@ -32,14 +32,3 @@ message BtcTxOutput { string txHash = 2; string wtxHash = 3; } - -message BtcXpubReq { - string network = 1; - string path = 2; -} - -message BtcXpubRes { - string xpub = 1; -} - - diff --git a/imkey-core/ikc-transport/Cargo.toml b/imkey-core/ikc-transport/Cargo.toml index b9f83e54..4b379bf3 100644 --- a/imkey-core/ikc-transport/Cargo.toml +++ b/imkey-core/ikc-transport/Cargo.toml @@ -7,12 +7,13 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -parking_lot = "0.12.1" -lazy_static = "1.4.0" -hex = "0.4.3" -failure = "0.1.8" +parking_lot = "=0.12.1" +lazy_static = "=1.4.0" +hex = "=0.4.3" +anyhow = "=1.0.79" +thiserror = "=1.0.56" [target.'cfg(any(target_os = "macos", target_os = "windows", target_os = "linux"))'.dependencies] -hidapi = "2.0.2" +hidapi = "=2.0.2" [dev-dependencies.cargo-husky] version = "1" default-features = false diff --git a/imkey-core/ikc-transport/src/error.rs b/imkey-core/ikc-transport/src/error.rs index 88f9378d..4b3ee75e 100644 --- a/imkey-core/ikc-transport/src/error.rs +++ b/imkey-core/ikc-transport/src/error.rs @@ -1,9 +1,11 @@ -#[derive(Fail, Debug, PartialOrd, PartialEq)] +use thiserror::Error; + +#[derive(Error, Debug, PartialOrd, PartialEq)] pub enum HidError { - #[fail(display = "imkey_device_not_connect")] + #[error("imkey_device_not_connect")] DeviceIsNotConnectOrNoVerifyPin, - #[fail(display = "device_connect_interface_not_called")] + #[error("device_connect_interface_not_called")] DeviceConnectInterfaceNotCalled, - #[fail(display = "device_data_read_time_out")] + #[error("device_data_read_time_out")] DeviceDataReadTimeOut, } diff --git a/imkey-core/ikc-transport/src/hid_api.rs b/imkey-core/ikc-transport/src/hid_api.rs index d3c8416c..7571a6ec 100644 --- a/imkey-core/ikc-transport/src/hid_api.rs +++ b/imkey-core/ikc-transport/src/hid_api.rs @@ -21,18 +21,14 @@ pub fn hid_send(apdu: &String, timeout: i32) -> Result { //get hid_device obj let hid_device_obj: &Vec = &HID_DEVICE.lock(); if hid_device_obj.is_empty() { - drop(hid_device_obj); return Err(HidError::DeviceConnectInterfaceNotCalled.into()); } - // println!("-->{}", apdu); send_device_message( &hid_device_obj.get(0).unwrap(), Vec::from_hex(apdu.as_str()).unwrap().as_slice(), )?; let return_data = read_device_response(&hid_device_obj.get(0).unwrap(), timeout)?; - // drop(hid_device_obj); let apdu_response = hex::encode_upper(return_data); - // println!("<--{}", apdu_response.clone()); Ok(apdu_response) } diff --git a/imkey-core/ikc-transport/src/lib.rs b/imkey-core/ikc-transport/src/lib.rs index fd7da023..0503490f 100644 --- a/imkey-core/ikc-transport/src/lib.rs +++ b/imkey-core/ikc-transport/src/lib.rs @@ -2,12 +2,8 @@ pub mod error; #[cfg(any(target_os = "macos", target_os = "windows", target_os = "linux"))] pub mod hid_api; pub mod message; -#[macro_use] -extern crate failure; +extern crate anyhow; use core::result; -pub type Result = result::Result; - -//#[macro_use] -////extern crate log; +pub type Result = result::Result; #[macro_use] extern crate lazy_static; diff --git a/imkey-core/ikc-transport/src/message.rs b/imkey-core/ikc-transport/src/message.rs index c5f09023..93ea4c40 100644 --- a/imkey-core/ikc-transport/src/message.rs +++ b/imkey-core/ikc-transport/src/message.rs @@ -1,6 +1,7 @@ #[cfg(any(target_os = "macos", target_os = "windows", target_os = "linux"))] use super::hid_api; use crate::Result; +use anyhow::anyhow; use parking_lot::Mutex; use parking_lot::RwLock; use std::ffi::{CStr, CString}; @@ -37,7 +38,7 @@ pub fn set_callback(callback: extern "C" fn(apdu: *const c_char, timeout: i32) - pub fn get_apdu() -> *const c_char { let apdu = APDU.read(); - return CString::new(apdu.to_owned()).unwrap().into_raw(); + CString::new(apdu.to_owned()).unwrap().into_raw() } #[allow(dead_code)] @@ -48,7 +49,7 @@ fn set_apdu_r(apdu: String) { if *_apdu == "" { //debug!("is null set"); println!("is null set"); - *_apdu = String::from(apdu.clone()); + *_apdu = apdu; break; } else { println!("not null...{}", _apdu); @@ -57,12 +58,11 @@ fn set_apdu_r(apdu: String) { } } -pub fn set_apdu(apdu: *const c_char) { +pub unsafe fn set_apdu(apdu: *const c_char) { let mut _apdu = APDU.write(); let c_str: &CStr = unsafe { CStr::from_ptr(apdu) }; let str_slice: &str = c_str.to_str().unwrap(); let str_buf: String = str_slice.to_owned(); - //debug!("set_apdu...{}", str_buf); *_apdu = str_buf; drop(_apdu); } @@ -78,34 +78,32 @@ fn get_apdu_return_r() -> Result { println!("get_apdu_return_r not null {}", apdu_return.clone()); let temp = apdu_return.clone(); *apdu_return = String::from(""); - return Ok(String::from(temp.to_owned())); + return Ok(String::from(temp)); } else { println!("get_apdu_return_r is null {}", apdu_return.clone()); } drop(apdu_return); - loop_count = loop_count + 1; + loop_count += 1; println!("loop time:{}", &loop_count); thread::sleep(Duration::from_millis(100)); if loop_count >= loop_max { println!("timeout panic!"); - return Err(format_err!("imkey_send_apdu_timeout")); + return Err(anyhow!("imkey_send_apdu_timeout")); } } } pub fn get_apdu_return() -> *const c_char { let apdu = APDU_RETURN.read(); - //debug!("get_apdu_return...{}", apdu.clone()); - return CString::new(apdu.to_owned()).unwrap().into_raw(); + CString::new(apdu.to_owned()).unwrap().into_raw() } -pub fn set_apdu_return(apdu_return: *const c_char) { +pub unsafe fn set_apdu_return(apdu_return: *const c_char) { let mut _apdu_return = APDU_RETURN.write(); let c_str: &CStr = unsafe { CStr::from_ptr(apdu_return) }; let str_slice: &str = c_str.to_str().unwrap(); let str_buf: String = str_slice.to_owned(); - //debug!("set_apdu_return...{}", str_buf); *_apdu_return = str_buf; drop(_apdu_return); } @@ -137,7 +135,7 @@ pub fn send_apdu_timeout(apdu: String, timeout: i32) -> Result { // let prefix = "communication_error_"; // if res.starts_with(prefix){ // let error = &res[..prefix.len()-1]; - // return Err(format_err!("{}", error)) + // return Err(anyhow!("{}", error)) // }else { // return Ok(res) // } @@ -148,7 +146,7 @@ pub fn send_apdu_timeout(apdu: String, timeout: i32) -> Result { return if res.starts_with(prefix) { let error = &res[prefix.len()..]; println!("{}", error); - Err(format_err!("{}", error)) + Err(anyhow!("{}", error)) } else { println!("{}", res); Ok(res) @@ -158,15 +156,15 @@ pub fn send_apdu_timeout(apdu: String, timeout: i32) -> Result { #[test] fn test_rwlock() { - let r1 = TEST.read().unwrap(); + let r1 = TEST.read(); println!("test:{}", *r1); - let r2 = TEST.read().unwrap(); + let r2 = TEST.read(); println!("test:{}", *r2); drop(r1); drop(r2); - let mut w = TEST.write().unwrap(); + let mut w = TEST.write(); *w = "haha".to_string(); println!("test:{}", *w); drop(w); @@ -174,7 +172,7 @@ fn test_rwlock() { #[test] fn test_callback() { - let callback = CALLBACK.lock().unwrap(); + let callback = CALLBACK.lock(); let ptr = callback( CString::new("00A4040000".to_owned()).unwrap().into_raw(), 20, diff --git a/imkey-core/ikc-wallet/coin-bch/Cargo.toml b/imkey-core/ikc-wallet/coin-bch/Cargo.toml index abe12ec6..0ec8a606 100644 --- a/imkey-core/ikc-wallet/coin-bch/Cargo.toml +++ b/imkey-core/ikc-wallet/coin-bch/Cargo.toml @@ -11,18 +11,17 @@ ikc-common = {path = "../../ikc-common"} ikc-device = {path = "../../ikc-device"} ikc-transport = {path = "../../ikc-transport"} -bch_addr = "0.1.0" -bitcoin = "0.29.2" -secp256k1 = {version ="0.24.1", features = ["rand", "recovery"] } -tiny-bip39 = "1.0.0" -#bitcoinconsensus = { version = "0.16", optional = true } -failure = "0.1.8" -hex = "0.4.3" -serde = { version = "1.0.147", features = ["derive"] } -serde_json = "1.0.89" -bitcoin_hashes = "0.11.0" -num-bigint = "0.4.3" -bytes = "1.3.0" -prost = "0.11.2" -prost-types = "0.11.2" +bch_addr = "=0.1.0" +bitcoin = "=0.29.2" +secp256k1 = {version ="=0.24.3", features = ["rand", "recovery"] } +tiny-bip39 = "=1.0.0" +anyhow = "=1.0.79" +hex = "=0.4.3" +serde = { version = "=1.0.147", features = ["derive"] } +serde_json = "=1.0.89" +bitcoin_hashes = "=0.11.0" +num-bigint = "=0.4.3" +bytes = "=1.4.0" +prost = "=0.11.2" +prost-types = "=0.11.2" diff --git a/imkey-core/ikc-wallet/coin-bch/src/address.rs b/imkey-core/ikc-wallet/coin-bch/src/address.rs index 72625a56..ed7ea201 100644 --- a/imkey-core/ikc-wallet/coin-bch/src/address.rs +++ b/imkey-core/ikc-wallet/coin-bch/src/address.rs @@ -14,6 +14,7 @@ use ikc_common::utility; use ikc_device::device_binding::KEY_MANAGER; use ikc_transport::message; +use ikc_common::utility::network_convert; use std::fmt::{Display, Formatter}; use std::str::FromStr; @@ -61,7 +62,7 @@ impl BchAddress { } } - pub fn get_pub_key(network: Network, path: &str) -> Result { + pub fn get_pub_key(_network: Network, path: &str) -> Result { //path check check_path_validity(path)?; @@ -129,6 +130,14 @@ impl BchAddress { return false; } } + + pub fn from_pub_key(pub_key: &[u8], network: &str) -> Result { + let network = network_convert(network); + let mut pub_key_obj = PublicKey::from_slice(pub_key)?; + pub_key_obj.compressed = true; + let addr = BtcAddress::p2pkh(&pub_key_obj, network).to_string(); + legacy_to_bch(&addr) + } } impl FromStr for BchAddress { diff --git a/imkey-core/ikc-wallet/coin-bch/src/common.rs b/imkey-core/ikc-wallet/coin-bch/src/common.rs index 08242573..716682ec 100644 --- a/imkey-core/ikc-wallet/coin-bch/src/common.rs +++ b/imkey-core/ikc-wallet/coin-bch/src/common.rs @@ -8,10 +8,10 @@ use bitcoin::util::bip32::{ChainCode, ChildNumber, ExtendedPubKey}; use bitcoin::{Address, PublicKey}; use ikc_common::apdu::{ApduCheck, BtcForkApdu, CoinCommonApdu}; use ikc_common::error::CoinError; -use ikc_common::utility::sha256_hash; +use ikc_common::utility::{hex_to_bytes, sha256_hash}; use ikc_device::device_binding::KEY_MANAGER; use ikc_transport::message::send_apdu; -use secp256k1::{Message, PublicKey as Secp256k1PublicKey, Secp256k1, Signature}; +use secp256k1::{ecdsa::Signature, Message, PublicKey as Secp256k1PublicKey, Secp256k1}; use std::convert::TryFrom; use std::str::FromStr; @@ -26,48 +26,46 @@ pub fn address_verify( ) -> Result> { let mut utxo_pub_key_vec: Vec = vec![]; for utxo in utxos { - //get utxo public key - let secp256k1_pubkey = Secp256k1PublicKey::from_str(public_key)?; - let public_key_obj = PublicKey { - compressed: true, - inner: secp256k1_pubkey, - }; - //gen chain code obj - let chain_code_obj = ChainCode::try_from(chain_code)?; - //build extended public key - let mut extend_public_key = ExtendedPubKey { - network: network, - depth: 0, - parent_fingerprint: Default::default(), - child_number: ChildNumber::from_normal_idx(0)?, - public_key: secp256k1_pubkey, - chain_code: chain_code_obj, - }; - - let bitcoin_secp = BitcoinSecp256k1::new(); - - let se_gen_address_str = if utxo.derive_path.is_empty() { - Address::p2pkh(&public_key_obj, network).to_string() + let (se_gen_address_str, extend_public_key) = if utxo.derive_path.is_empty() { + let secp256k1_pubkey = Secp256k1PublicKey::from_str(public_key)?; + let public_key_obj = PublicKey { + compressed: true, + inner: secp256k1_pubkey, + }; + let chain_code_obj = ChainCode::try_from(chain_code)?; + ( + Address::p2pkh(&public_key_obj, network).to_string(), + ExtendedPubKey { + network, + depth: 0, + parent_fingerprint: Default::default(), + child_number: ChildNumber::from_normal_idx(0)?, + public_key: secp256k1_pubkey, + chain_code: chain_code_obj, + }, + ) } else { - let index_number_vec: Vec<&str> = utxo.derive_path.as_str().split('/').collect(); - - for index_number in index_number_vec { - let test_chain_number = - ChildNumber::from_normal_idx(index_number.parse().unwrap())?; - extend_public_key = extend_public_key.ckd_pub(&bitcoin_secp, test_chain_number)?; - } - Address::p2pkh( - &PublicKey::from_str(extend_public_key.public_key.to_string().as_str())?, + let xpub_data = get_xpub_data(&utxo.derive_path, false)?; + let public_key = &xpub_data[..130]; + let chain_code = &xpub_data[130..194]; + let extend_public_key = ExtendedPubKey { network, + depth: 0, + parent_fingerprint: Default::default(), + child_number: ChildNumber::from_normal_idx(0)?, + public_key: Secp256k1PublicKey::from_str(public_key)?, + chain_code: ChainCode::from(hex_to_bytes(chain_code)?.as_slice()), + }; + + ( + Address::p2pkh( + &PublicKey::from_str(extend_public_key.public_key.to_string().as_str())?, + network, + ) + .to_string(), + extend_public_key, ) - .to_string() }; - // //verify address - // let se_gen_address_str = Address::p2pkh( - // &PublicKey::from_str(extend_public_key.public_key.to_string().as_str())?, - // network, - // ) - // .to_string(); let utxo_address = utxo.address.clone(); let bch_address = BchAddress::convert_to_legacy_if_need(utxo_address.as_ref())?; @@ -80,13 +78,13 @@ pub fn address_verify( Ok(utxo_pub_key_vec) } -/** -Transaction type identification -*/ -pub enum TransTypeFlg { - BTC, - SEGWIT, -} +// /** +// Transaction type identification +// */ +// pub enum TransTypeFlg { +// BTC, +// SEGWIT, +// } /** get xpub @@ -115,7 +113,9 @@ pub fn apdu_sign_verify(signed: &[u8], message: &[u8]) -> Result { let mut sig_obj = Signature::from_der(signed)?; sig_obj.normalize_s(); //verify - Ok(secp.verify(&message_obj, &sig_obj, &public_obj).is_ok()) + Ok(secp + .verify_ecdsa(&message_obj, &sig_obj, &public_obj) + .is_ok()) } /** diff --git a/imkey-core/ikc-wallet/coin-bch/src/lib.rs b/imkey-core/ikc-wallet/coin-bch/src/lib.rs index 488939e3..feabdeaf 100644 --- a/imkey-core/ikc-wallet/coin-bch/src/lib.rs +++ b/imkey-core/ikc-wallet/coin-bch/src/lib.rs @@ -3,13 +3,5 @@ use core::result; pub mod address; mod common; pub mod transaction; -pub type Result = result::Result; -extern crate failure; - -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - assert_eq!(2 + 2, 4); - } -} +pub type Result = result::Result; +extern crate anyhow; diff --git a/imkey-core/ikc-wallet/coin-bch/src/transaction.rs b/imkey-core/ikc-wallet/coin-bch/src/transaction.rs index 0f4afcf3..7ded7094 100644 --- a/imkey-core/ikc-wallet/coin-bch/src/transaction.rs +++ b/imkey-core/ikc-wallet/coin-bch/src/transaction.rs @@ -19,7 +19,7 @@ use ikc_common::path::check_path_validity; use ikc_common::utility::{bigint_to_byte_vec, secp256k1_sign}; use ikc_device::device_binding::KEY_MANAGER; use ikc_transport::message::{send_apdu, send_apdu_timeout}; -use secp256k1::Signature; +use secp256k1::ecdsa::Signature; use std::str::FromStr; #[derive(Clone)] @@ -189,7 +189,7 @@ impl BchTransaction { //lock script let pub_key_bytes = hex::decode(utxo_pub_key_vec.get(index).unwrap())?; let pub_key_hash = hash160::Hash::hash(&pub_key_bytes).into_inner(); - let script_hex = format!("76a914{}88ac", hex::encode(pub_key_hash)); + let script_hex: String = format!("76a914{}88ac", hex::encode(pub_key_hash)); // let script = Script::from(hex::decode(script_hex)?); let script = Script::from_hex(script_hex.as_str())?; let script_data = serialize(&script); @@ -208,10 +208,13 @@ impl BchTransaction { data.insert(0, data.len() as u8); //address let mut address_data: Vec = vec![]; - let sign_path = format!("{}{}", path_str, unspent.derive_path); - address_data.push(sign_path.as_bytes().len() as u8); - address_data.extend_from_slice(sign_path.as_bytes()); - + if unspent.derive_path.is_empty() { + address_data.push(path_str.as_bytes().len() as u8); + address_data.extend_from_slice(path_str.as_bytes()); + } else { + address_data.push(unspent.derive_path.as_bytes().len() as u8); + address_data.extend_from_slice(unspent.derive_path.as_bytes()); + } data.extend(address_data.iter()); if index == self.unspents.len() - 1 { sign_apdu_vec.push(BtcForkApdu::btc_fork_segwit_sign(0x48, true, 0x01, data)); @@ -362,7 +365,7 @@ mod tests { amount: 100000, address: "qzld7dav7d2sfjdl6x9snkvf6raj8lfxjcj5fa8y2r".to_string(), script_pubkey: "76a91488d9931ea73d60eaf7e5671efc0552b912911f2a88ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/145'/0'/0/0".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -398,7 +401,7 @@ mod tests { amount: 100000, address: "qzld7dav7d2sfjdl6x9snkvf6raj8lfxjcj5fa8y2r".to_string(), script_pubkey: "76a91488d9931ea73d60eaf7e5671efc0552b912911f2a88ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/145'/0'/0/0".to_string(), sequence: 0, }; let utxo2 = Utxo { @@ -407,7 +410,7 @@ mod tests { amount: 500000, address: "qzld7dav7d2sfjdl6x9snkvf6raj8lfxjcj5fa8y2r".to_string(), script_pubkey: "76a91488d9931ea73d60eaf7e5671efc0552b912911f2a88ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/145'/0'/0/0".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -444,7 +447,7 @@ mod tests { amount: 100000, address: "qzld7dav7d2sfjdl6x9snkvf6raj8lfxjcj5fa8y2r".to_string(), script_pubkey: "76a91488d9931ea73d60eaf7e5671efc0552b912911f2a88ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/145'/0'/0/0".to_string(), sequence: 0, }; let utxo2 = Utxo { @@ -453,7 +456,7 @@ mod tests { amount: 500000, address: "qzld7dav7d2sfjdl6x9snkvf6raj8lfxjcj5fa8y2r".to_string(), script_pubkey: "76a91488d9931ea73d60eaf7e5671efc0552b912911f2a88ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/145'/0'/0/0".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -490,7 +493,7 @@ mod tests { amount: 100000, address: "qzld7dav7d2sfjdl6x9snkvf6raj8lfxjcj5fa8y2r".to_string(), script_pubkey: "76a91488d9931ea73d60eaf7e5671efc0552b912911f2a88ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/145'/0'/0/0".to_string(), sequence: 0, }; let utxo2 = Utxo { @@ -499,7 +502,7 @@ mod tests { amount: 500000, address: "qzld7dav7d2sfjdl6x9snkvf6raj8lfxjcj5fa8y2r".to_string(), script_pubkey: "76a91488d9931ea73d60eaf7e5671efc0552b912911f2a88ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/145'/0'/0/0".to_string(), sequence: 0, }; let mut utxos = Vec::new(); diff --git a/imkey-core/ikc-wallet/coin-bitcoin/Cargo.toml b/imkey-core/ikc-wallet/coin-bitcoin/Cargo.toml index e8c802ef..208aafa0 100644 --- a/imkey-core/ikc-wallet/coin-bitcoin/Cargo.toml +++ b/imkey-core/ikc-wallet/coin-bitcoin/Cargo.toml @@ -10,13 +10,12 @@ edition = "2018" ikc-common = {path = "../../ikc-common"} ikc-device = {path = "../../ikc-device"} ikc-transport = {path = "../../ikc-transport"} -bitcoin = "0.29.2" -hex = "0.4.3" -secp256k1 = {version ="0.24.1", features = ["rand", "recovery"] } -ring = "0.16.20" -bitcoin_hashes = "0.11.0" -num-bigint = "0.4.3" -failure = "0.1.8" -bytes = "1.3.0" -prost = "0.11.2" -prost-types = "0.11.2" \ No newline at end of file +bitcoin = "=0.29.2" +hex = "=0.4.3" +secp256k1 = {version ="=0.24.3", features = ["rand", "recovery"] } +bitcoin_hashes = "=0.11.0" +num-bigint = "=0.4.3" +anyhow = "=1.0.79" +bytes = "=1.4.0" +prost = "=0.11.2" +prost-types = "=0.11.2" \ No newline at end of file diff --git a/imkey-core/ikc-wallet/coin-bitcoin/src/address.rs b/imkey-core/ikc-wallet/coin-bitcoin/src/address.rs index 5c3dbbf1..dcb091f0 100644 --- a/imkey-core/ikc-wallet/coin-bitcoin/src/address.rs +++ b/imkey-core/ikc-wallet/coin-bitcoin/src/address.rs @@ -101,6 +101,17 @@ impl BtcAddress { Ok(Address::p2shwpkh(&pub_key_obj, network)?.to_string()) } + pub fn get_pub_key(path: &str) -> Result { + //path check + check_path_validity(path)?; + + //get xpub + let xpub_data = get_xpub_data(path, true)?; + let pub_key = &xpub_data[..130]; + + Ok(pub_key.to_string()) + } + /** get parent public key path */ diff --git a/imkey-core/ikc-wallet/coin-bitcoin/src/btcapi.rs b/imkey-core/ikc-wallet/coin-bitcoin/src/btcapi.rs index df3c5a82..f9217c83 100644 --- a/imkey-core/ikc-wallet/coin-bitcoin/src/btcapi.rs +++ b/imkey-core/ikc-wallet/coin-bitcoin/src/btcapi.rs @@ -1,33 +1,36 @@ +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Utxo { #[prost(string, tag = "1")] - pub tx_hash: std::string::String, + pub tx_hash: ::prost::alloc::string::String, #[prost(int32, tag = "2")] pub vout: i32, #[prost(int64, tag = "3")] pub amount: i64, #[prost(string, tag = "4")] - pub address: std::string::String, + pub address: ::prost::alloc::string::String, #[prost(string, tag = "5")] - pub script_pub_key: std::string::String, + pub script_pub_key: ::prost::alloc::string::String, #[prost(string, tag = "6")] - pub derived_path: std::string::String, + pub derived_path: ::prost::alloc::string::String, #[prost(int64, tag = "7")] pub sequence: i64, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BtcTxExtra { #[prost(string, tag = "1")] - pub op_return: std::string::String, + pub op_return: ::prost::alloc::string::String, #[prost(int32, tag = "2")] pub property_id: i32, #[prost(string, tag = "3")] - pub fee_mode: std::string::String, + pub fee_mode: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BtcTxInput { #[prost(string, tag = "1")] - pub to: std::string::String, + pub to: ::prost::alloc::string::String, #[prost(int64, tag = "2")] pub amount: i64, #[prost(int64, tag = "3")] @@ -35,32 +38,21 @@ pub struct BtcTxInput { #[prost(uint32, tag = "4")] pub change_address_index: u32, #[prost(message, repeated, tag = "5")] - pub unspents: ::std::vec::Vec, + pub unspents: ::prost::alloc::vec::Vec, #[prost(string, tag = "6")] - pub seg_wit: std::string::String, + pub seg_wit: ::prost::alloc::string::String, #[prost(string, tag = "7")] - pub protocol: std::string::String, + pub protocol: ::prost::alloc::string::String, #[prost(message, optional, tag = "8")] - pub extra: ::std::option::Option, + pub extra: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BtcTxOutput { #[prost(string, tag = "1")] - pub signature: std::string::String, + pub signature: ::prost::alloc::string::String, #[prost(string, tag = "2")] - pub tx_hash: std::string::String, + pub tx_hash: ::prost::alloc::string::String, #[prost(string, tag = "3")] - pub wtx_hash: std::string::String, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BtcXpubReq { - #[prost(string, tag = "1")] - pub network: std::string::String, - #[prost(string, tag = "2")] - pub path: std::string::String, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BtcXpubRes { - #[prost(string, tag = "1")] - pub xpub: std::string::String, + pub wtx_hash: ::prost::alloc::string::String, } diff --git a/imkey-core/ikc-wallet/coin-bitcoin/src/common.rs b/imkey-core/ikc-wallet/coin-bitcoin/src/common.rs index 934d0ed4..d269bb86 100644 --- a/imkey-core/ikc-wallet/coin-bitcoin/src/common.rs +++ b/imkey-core/ikc-wallet/coin-bitcoin/src/common.rs @@ -1,14 +1,13 @@ use crate::transaction::Utxo; use crate::Result; -use bitcoin::secp256k1::Secp256k1 as BitcoinSecp256k1; use bitcoin::util::base58; use bitcoin::util::bip32::{ChainCode, ChildNumber, ExtendedPubKey}; use bitcoin::{Address, Network, PublicKey}; use ikc_common::apdu::{ApduCheck, BtcApdu, CoinCommonApdu}; use ikc_common::error::CoinError; -use ikc_common::utility::sha256_hash; +use ikc_common::utility::{hex_to_bytes, sha256_hash}; use ikc_transport::message::send_apdu; -use secp256k1::{Message, PublicKey as Secp256k1PublicKey, Secp256k1, Signature}; +use secp256k1::{ecdsa::Signature, Message, PublicKey as Secp256k1PublicKey, Secp256k1}; use std::str::FromStr; /** @@ -16,33 +15,25 @@ utxo address verify */ pub fn address_verify( utxos: &Vec, - public_key: &str, - chain_code: &[u8], network: Network, trans_type_flg: TransTypeFlg, ) -> Result> { let mut utxo_pub_key_vec: Vec = vec![]; for utxo in utxos { - //get utxo public key - let public_key_obj = Secp256k1PublicKey::from_str(public_key)?; - //gen chain code obj - let chain_code_obj = ChainCode::from(chain_code); - //build extended public key + //get xpub and sign data + let xpub_data = get_xpub_data(&utxo.derive_path, false)?; + //parsing xpub data + let public_key = &xpub_data[..130]; + let chain_code = &xpub_data[130..194]; let mut extend_public_key = ExtendedPubKey { - network: network, + network, depth: 0, parent_fingerprint: Default::default(), child_number: ChildNumber::from_normal_idx(0)?, - public_key: public_key_obj, - chain_code: chain_code_obj, + public_key: Secp256k1PublicKey::from_str(public_key)?, + chain_code: ChainCode::from(hex_to_bytes(chain_code)?.as_slice()), }; - let bitcoin_secp = BitcoinSecp256k1::new(); - let index_number_vec: Vec<&str> = utxo.derive_path.as_str().split('/').collect(); - for index_number in index_number_vec { - let test_chain_number = ChildNumber::from_normal_idx(index_number.parse().unwrap())?; - extend_public_key = extend_public_key.ckd_pub(&bitcoin_secp, test_chain_number)?; - } //verify address let se_gen_address: Result = match trans_type_flg { TransTypeFlg::BTC => Ok(Address::p2pkh( @@ -99,7 +90,9 @@ pub fn secp256k1_sign_verify(public: &[u8], signed: &[u8], message: &[u8]) -> Re let mut sig_obj = Signature::from_der(signed)?; sig_obj.normalize_s(); //verify - Ok(secp.verify(&message_obj, &sig_obj, &public_obj).is_ok()) + Ok(secp + .verify_ecdsa(&message_obj, &sig_obj, &public_obj) + .is_ok()) } /** @@ -135,7 +128,6 @@ pub struct TxSignResult { #[cfg(test)] mod test { use crate::common::get_address_version; - use crate::transaction::Utxo; use bitcoin::Network; #[test] diff --git a/imkey-core/ikc-wallet/coin-bitcoin/src/lib.rs b/imkey-core/ikc-wallet/coin-bitcoin/src/lib.rs index 004c7f2b..b1e432af 100644 --- a/imkey-core/ikc-wallet/coin-bitcoin/src/lib.rs +++ b/imkey-core/ikc-wallet/coin-bitcoin/src/lib.rs @@ -3,14 +3,6 @@ pub mod btcapi; pub mod common; pub mod transaction; pub mod usdt_transaction; -extern crate failure; +extern crate anyhow; use core::result; -pub type Result = result::Result; - -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - assert_eq!(2 + 2, 4); - } -} +pub type Result = result::Result; diff --git a/imkey-core/ikc-wallet/coin-bitcoin/src/transaction.rs b/imkey-core/ikc-wallet/coin-bitcoin/src/transaction.rs index ff6ecbf7..6af419b1 100644 --- a/imkey-core/ikc-wallet/coin-bitcoin/src/transaction.rs +++ b/imkey-core/ikc-wallet/coin-bitcoin/src/transaction.rs @@ -1,20 +1,15 @@ use crate::address::BtcAddress; -use crate::common::{ - address_verify, get_address_version, get_xpub_data, secp256k1_sign_verify, TransTypeFlg, - TxSignResult, -}; +use crate::common::{address_verify, get_address_version, TransTypeFlg, TxSignResult}; use crate::Result; use bitcoin::blockdata::{opcodes, script::Builder}; use bitcoin::consensus::{serialize, Encodable}; use bitcoin::hashes::hex::FromHex; -use bitcoin::util::psbt::serialize::Serialize; use bitcoin::{ - Address, EcdsaSighashType, Network, OutPoint, PackedLockTime, Script, Sequence, SigHashType, - Transaction, TxIn, TxOut, Witness, + Address, EcdsaSighashType, Network, OutPoint, PackedLockTime, Script, Sequence, Transaction, + TxIn, TxOut, Witness, }; use bitcoin_hashes::hash160; use bitcoin_hashes::hex::ToHex; -use bitcoin_hashes::sha256d::Hash as Hash256; use bitcoin_hashes::Hash; use ikc_common::apdu::{ApduCheck, BtcApdu}; use ikc_common::constants::{ @@ -25,7 +20,7 @@ use ikc_common::path::check_path_validity; use ikc_common::utility::{bigint_to_byte_vec, hex_to_bytes, secp256k1_sign}; use ikc_device::device_binding::KEY_MANAGER; use ikc_transport::message::{send_apdu, send_apdu_timeout}; -use secp256k1::Signature; +use secp256k1::ecdsa::Signature; use std::str::FromStr; #[derive(Clone)] @@ -65,35 +60,8 @@ impl BtcTransaction { return Err(CoinError::ImkeyExceededMaxUtxoNumber.into()); } - //get xpub and sign data - let xpub_data = get_xpub_data(path_str.as_str(), true)?; - let xpub_data = &xpub_data[..xpub_data.len() - 4].to_string(); - - //parsing xpub data - let sign_source_val = &xpub_data[..194]; - let sign_result = &xpub_data[194..]; - let pub_key = &sign_source_val[..130]; - let chain_code = &sign_source_val[130..]; - - //use se public key verify sign - let key_manager_obj = KEY_MANAGER.lock(); - let sign_verify_result = secp256k1_sign_verify( - &key_manager_obj.se_pub_key.as_slice(), - hex::decode(sign_result).unwrap().as_slice(), - hex::decode(sign_source_val).unwrap().as_slice(), - ); - if sign_verify_result.is_err() || !sign_verify_result.ok().unwrap() { - return Err(CoinError::ImkeySignatureVerifyFail.into()); - } - //utxo address verify - let utxo_pub_key_vec = address_verify( - &self.unspents, - pub_key, - hex::decode(chain_code).unwrap().as_slice(), - network, - TransTypeFlg::BTC, - )?; + let utxo_pub_key_vec = address_verify(&self.unspents, network, TransTypeFlg::BTC)?; //calc utxo total amount if self.get_total_amount() < self.amount { @@ -159,6 +127,7 @@ impl BtcTransaction { output_serialize_data.insert(0, 0x01); //use local private key sign data + let key_manager_obj = KEY_MANAGER.lock(); let mut output_pareper_data = secp256k1_sign(&key_manager_obj.pri_key, &output_serialize_data)?; output_pareper_data.insert(0, output_pareper_data.len() as u8); @@ -202,7 +171,7 @@ impl BtcTransaction { let btc_sign_apdu = BtcApdu::btc_sign( y as u8, EcdsaSighashType::All.to_u32() as u8, - format!("{}{}", path_str, self.unspents.get(y).unwrap().derive_path).as_str(), + self.unspents.get(y).unwrap().derive_path.as_str(), ); //sign data let btc_sign_apdu_return = send_apdu(btc_sign_apdu)?; @@ -258,31 +227,11 @@ impl BtcTransaction { return Err(CoinError::ImkeyExceededMaxUtxoNumber.into()); } - //get xpub and sign data - let xpub_data = get_xpub_data(path_str.as_str(), true)?; - let xpub_data = &xpub_data[..xpub_data.len() - 4].to_string(); - - //parsing xpub data - let sign_source_val = &xpub_data[..194]; - let sign_result = &xpub_data[194..]; - let pub_key = &sign_source_val[..130]; - let chain_code = &sign_source_val[130..]; - - //use se public key verify sign - let key_manager_obj = KEY_MANAGER.lock(); - let sign_verify_result = secp256k1_sign_verify( - &key_manager_obj.se_pub_key.as_slice(), - hex::decode(sign_result).unwrap().as_slice(), - hex::decode(sign_source_val).unwrap().as_slice(), - ); - if sign_verify_result.is_err() || !sign_verify_result.ok().unwrap() { - return Err(CoinError::ImkeySignatureVerifyFail.into()); - } //utxo address verify let utxo_pub_key_vec = address_verify( &self.unspents, - pub_key, - hex::decode(chain_code).unwrap().as_slice(), + // pub_key, + // hex::decode(chain_code).unwrap().as_slice(), network, TransTypeFlg::SEGWIT, )?; @@ -351,6 +300,7 @@ impl BtcTransaction { output_serialize_data.insert(0, 0x01); //use local private key sign data + let key_manager_obj = KEY_MANAGER.lock(); let mut output_pareper_data = secp256k1_sign(&key_manager_obj.pri_key, &output_serialize_data)?; output_pareper_data.insert(0, output_pareper_data.len() as u8); @@ -407,9 +357,10 @@ impl BtcTransaction { data.insert(0, data.len() as u8); //address let mut address_data: Vec = vec![]; - let sign_path = format!("{}{}", path_str, unspent.derive_path); - address_data.push(sign_path.as_bytes().len() as u8); - address_data.extend_from_slice(sign_path.as_bytes()); + // let sign_path = format!("{}{}", path_str, unspent.derive_path); + let sign_path = unspent.derive_path.as_bytes(); + address_data.push(sign_path.len() as u8); + address_data.extend_from_slice(sign_path); data.extend(address_data.iter()); if index == self.unspents.len() - 1 { @@ -535,12 +486,8 @@ mod tests { use crate::transaction::{BtcTransaction, Utxo}; use bitcoin::{Address, Network}; use hex::FromHex; - use std::str::FromStr; - - use ikc_common::error::CoinError; use ikc_device::device_binding::bind_test; - use ikc_device::device_binding::DeviceManage; - use ikc_transport::hid_api::hid_connect; + use std::str::FromStr; #[test] fn test_sign_transaction() { @@ -554,7 +501,7 @@ mod tests { amount: 200000000, address: Address::from_str("mh7jj2ELSQUvRQELbn9qyA4q5nADhmJmUC").unwrap(), script_pubkey: "76a914118c3123196e030a8a607c22bafc1577af61497d88ac".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/44'/1'/0'/0/22".to_string(), sequence: 4294967295, }; let utxo2 = Utxo { @@ -563,7 +510,7 @@ mod tests { amount: 200000000, address: Address::from_str("mkeNU5nVnozJiaACDELLCsVUc8Wxoh1rQN").unwrap(), script_pubkey: "76a914383fb81cb0a3fc724b5e08cf8bbd404336d711f688ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/1'/0'/0/0".to_string(), sequence: 4294967295, }; let utxo3 = Utxo { @@ -572,7 +519,7 @@ mod tests { amount: 200000000, address: Address::from_str("mkeNU5nVnozJiaACDELLCsVUc8Wxoh1rQN").unwrap(), script_pubkey: "76a914383fb81cb0a3fc724b5e08cf8bbd404336d711f688ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/1'/0'/0/0".to_string(), sequence: 4294967295, }; let utxo4 = Utxo { @@ -581,7 +528,7 @@ mod tests { amount: 200000000, address: Address::from_str("mkeNU5nVnozJiaACDELLCsVUc8Wxoh1rQN").unwrap(), script_pubkey: "76a914383fb81cb0a3fc724b5e08cf8bbd404336d711f688ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/1'/0'/0/0".to_string(), sequence: 4294967295, }; let mut utxos = Vec::new(); @@ -625,7 +572,7 @@ mod tests { amount: 50000, address: Address::from_str("2MwN441dq8qudMvtM5eLVwC3u4zfKuGSQAB").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/49'/1'/0'/0/0".to_string(), sequence: 0, }; let utxo2 = Utxo { @@ -634,7 +581,7 @@ mod tests { amount: 50000, address: Address::from_str("2N54wJxopnWTvBfqgAPVWqXVEdaqoH7Suvf").unwrap(), script_pubkey: "a91481af6d803fdc6dca1f3a1d03f5ffe8124cd1b44787".to_string(), - derive_path: "0/1".to_string(), + derive_path: "m/49'/1'/0'/0/1".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -674,7 +621,7 @@ mod tests { amount: 10000112345678, address: Address::from_str("1Fj93kpLwM1KgTN6C75Z5Bokhays4MmJae").unwrap(), script_pubkey: "76a914a189f2f7836812aa7a0e36e28a20a10e64010bf688ac".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/44'/0'/0'/0/22".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -714,7 +661,7 @@ mod tests { amount: 10000112345678, address: Address::from_str("1Fj93kpLwM1KgTN6C75Z5Bokhays4MmJae").unwrap(), script_pubkey: "76a914a189f2f7836812aa7a0e36e28a20a10e64010bf688ac".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/44'/0'/0'/0/22".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -746,7 +693,7 @@ mod tests { amount: 10000000, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -783,7 +730,7 @@ mod tests { amount: 10000112345678, address: Address::from_str("1Fj93kpLwM1KgTN6C75Z5Bokhays4MmJae").unwrap(), script_pubkey: "76a914a189f2f7836812aa7a0e36e28a20a10e64010bf688ac".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/44'/0'/0'/0/22".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -813,7 +760,7 @@ mod tests { amount: 500000, address: Address::from_str("2MwN441dq8qudMvtM5eLVwC3u4zfKuGSQAB").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/49'/1'/0'/0/0".to_string(), sequence: 0, }; @@ -851,7 +798,7 @@ mod tests { amount: 1012345678, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -889,7 +836,7 @@ mod tests { amount: 1012345678, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/49'/0'/0'/0/0".to_string(), sequence: 0, }; let mut utxos = Vec::new(); diff --git a/imkey-core/ikc-wallet/coin-bitcoin/src/usdt_transaction.rs b/imkey-core/ikc-wallet/coin-bitcoin/src/usdt_transaction.rs index 35172e19..6279031f 100644 --- a/imkey-core/ikc-wallet/coin-bitcoin/src/usdt_transaction.rs +++ b/imkey-core/ikc-wallet/coin-bitcoin/src/usdt_transaction.rs @@ -7,14 +7,12 @@ use crate::Result; use bitcoin::blockdata::{opcodes, script::Builder}; use bitcoin::consensus::{serialize, Encodable}; use bitcoin::hashes::hex::FromHex; -use bitcoin::util::psbt::serialize::Serialize; use bitcoin::{ - EcdsaSighashType, Network, OutPoint, PackedLockTime, Script, Sequence, SigHashType, - Transaction, TxIn, TxOut, Witness, + EcdsaSighashType, Network, OutPoint, PackedLockTime, Script, Sequence, Transaction, TxIn, + TxOut, Witness, }; use bitcoin_hashes::hash160; use bitcoin_hashes::hex::ToHex; -use bitcoin_hashes::sha256d::Hash as Hash256; use bitcoin_hashes::Hash; use ikc_common::apdu::{ApduCheck, BtcApdu}; use ikc_common::constants::{EACH_ROUND_NUMBER, MAX_UTXO_NUMBER, MIN_NONDUST_OUTPUT, TIMEOUT_LONG}; @@ -23,7 +21,7 @@ use ikc_common::path::check_path_validity; use ikc_common::utility::{bigint_to_byte_vec, hex_to_bytes, secp256k1_sign}; use ikc_device::device_binding::KEY_MANAGER; use ikc_transport::message::{send_apdu, send_apdu_timeout}; -use secp256k1::Signature; +use secp256k1::ecdsa::Signature; impl BtcTransaction { pub fn sign_omni_transaction( @@ -48,34 +46,8 @@ impl BtcTransaction { return Err(CoinError::ImkeyAmountLessThanMinimum.into()); } - //get xpub and sign data - let xpub_data = get_xpub_data(path_str.as_str(), true)?; - let xpub_data = &xpub_data[..xpub_data.len() - 4].to_string(); - //get xpub data - let sign_source_val = &xpub_data[..194]; - let sign_result = &xpub_data[194..]; - let pub_key = &sign_source_val[..130]; - let chain_code = &sign_source_val[130..]; - - //use se public key verify sign - let key_manager_obj = KEY_MANAGER.lock(); - let sign_verify_result = secp256k1_sign_verify( - &key_manager_obj.se_pub_key.as_slice(), - hex::decode(sign_result).unwrap().as_slice(), - hex::decode(sign_source_val).unwrap().as_slice(), - ); - if sign_verify_result.is_err() || !sign_verify_result.ok().unwrap() { - return Err(CoinError::ImkeySignatureVerifyFail.into()); - } - //utxo address verify - let utxo_pub_key_vec = address_verify( - &self.unspents, - pub_key, - hex::decode(chain_code).unwrap().as_slice(), - network, - TransTypeFlg::BTC, - )?; + let utxo_pub_key_vec = address_verify(&self.unspents, network, TransTypeFlg::BTC)?; //add change output let mut txouts: Vec = Vec::new(); @@ -134,6 +106,7 @@ impl BtcTransaction { output_serialize_data.insert(0, 0x01); //use local private key sign data + let key_manager_obj = KEY_MANAGER.lock(); let mut output_pareper_data = secp256k1_sign(&key_manager_obj.pri_key, &output_serialize_data)?; output_pareper_data.insert(0, output_pareper_data.len() as u8); @@ -175,7 +148,7 @@ impl BtcTransaction { let btc_sign_apdu = BtcApdu::btc_sign( y as u8, EcdsaSighashType::All.to_u32() as u8, - format!("{}{}", path_str, self.unspents.get(y).unwrap().derive_path).as_str(), + self.unspents.get(y).unwrap().derive_path.as_str(), ); //send sign apdu let btc_sign_apdu_return = send_apdu(btc_sign_apdu)?; @@ -234,35 +207,8 @@ impl BtcTransaction { return Err(CoinError::ImkeyAmountLessThanMinimum.into()); } - //get xpub and sign data - let xpub_data = get_xpub_data(path_str.as_str(), true)?; - let xpub_data = &xpub_data[..xpub_data.len() - 4].to_string(); - - //get xpub data - let sign_source_val = &xpub_data[..194]; - let sign_result = &xpub_data[194..]; - let pub_key = &sign_source_val[..130]; - let chain_code = &sign_source_val[130..]; - - //use se public key verify sign - let key_manager_obj = KEY_MANAGER.lock(); - let sign_verify_result = secp256k1_sign_verify( - &key_manager_obj.se_pub_key.as_slice(), - hex::decode(sign_result).unwrap().as_slice(), - hex::decode(sign_source_val).unwrap().as_slice(), - ); - if sign_verify_result.is_err() || !sign_verify_result.ok().unwrap() { - return Err(CoinError::ImkeySignatureVerifyFail.into()); - } - //utxo address verify - let utxo_pub_key_vec = address_verify( - &self.unspents, - pub_key, - hex::decode(chain_code).unwrap().as_slice(), - network, - TransTypeFlg::SEGWIT, - )?; + let utxo_pub_key_vec = address_verify(&self.unspents, network, TransTypeFlg::SEGWIT)?; //5.add change output let mut txouts: Vec = vec![]; @@ -314,6 +260,7 @@ impl BtcTransaction { output_serialize_data.insert(0, output_serialize_data.len() as u8); output_serialize_data.insert(0, 0x01); //use local private key sign data + let key_manager_obj = KEY_MANAGER.lock(); let mut output_pareper_data = secp256k1_sign(&key_manager_obj.pri_key, &output_serialize_data)?; output_pareper_data.insert(0, output_pareper_data.len() as u8); @@ -371,9 +318,9 @@ impl BtcTransaction { //address let mut address_data: Vec = vec![]; - let sign_path = format!("{}{}", path_str, unspent.derive_path); - address_data.push(sign_path.as_bytes().len() as u8); - address_data.extend_from_slice(sign_path.as_bytes()); + let sign_path = unspent.derive_path.as_bytes(); + address_data.push(sign_path.len() as u8); + address_data.extend_from_slice(sign_path); data.extend(address_data.iter()); if index == self.unspents.len() - 1 { @@ -478,8 +425,6 @@ mod tests { use std::str::FromStr; use ikc_device::device_binding::bind_test; - use ikc_device::device_binding::DeviceManage; - use ikc_transport::hid_api::hid_connect; #[test] fn test_sign_transaction() { @@ -492,7 +437,7 @@ mod tests { amount: 14824854, address: Address::from_str("mkeNU5nVnozJiaACDELLCsVUc8Wxoh1rQN").unwrap(), script_pubkey: "76a914383fb81cb0a3fc724b5e08cf8bbd404336d711f688ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/1'/0'/0/0".to_string(), sequence: 4294967295, }; let mut utxos = Vec::new(); @@ -530,7 +475,7 @@ mod tests { amount: 21863396, address: Address::from_str("2MwN441dq8qudMvtM5eLVwC3u4zfKuGSQAB").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/49'/1'/0'/0/0".to_string(), sequence: 0, }; @@ -569,7 +514,7 @@ mod tests { amount: 200000000, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; let utxo2 = Utxo { @@ -578,7 +523,7 @@ mod tests { amount: 200000000, address: Address::from_str("3JmreiUEKn8P3SyLYmZ7C1YCd4r2nFy3Dp").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/49'/0'/0'/0/0".to_string(), sequence: 0, }; let utxo3 = Utxo { @@ -587,7 +532,7 @@ mod tests { amount: 200000000, address: Address::from_str("3JmreiUEKn8P3SyLYmZ7C1YCd4r2nFy3Dp").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/49'/0'/0'/0/0".to_string(), sequence: 0, }; let utxo4 = Utxo { @@ -596,7 +541,7 @@ mod tests { amount: 200000000, address: Address::from_str("3JmreiUEKn8P3SyLYmZ7C1YCd4r2nFy3Dp").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/49'/0'/0'/0/0".to_string(), sequence: 0, }; let utxo5 = Utxo { @@ -605,7 +550,7 @@ mod tests { amount: 200000000, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; let utxo6 = Utxo { @@ -614,7 +559,7 @@ mod tests { amount: 200000000, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; let utxo7 = Utxo { @@ -623,7 +568,7 @@ mod tests { amount: 200000000, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; let utxo8 = Utxo { @@ -632,7 +577,7 @@ mod tests { amount: 200000000, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; @@ -677,7 +622,7 @@ mod tests { amount: 10000112345678, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -711,7 +656,7 @@ mod tests { amount: 10000112345678, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -740,7 +685,7 @@ mod tests { amount: 14824854, address: Address::from_str("mkeNU5nVnozJiaACDELLCsVUc8Wxoh1rQN").unwrap(), script_pubkey: "76a914383fb81cb0a3fc724b5e08cf8bbd404336d711f688ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/1'/0'/0/0".to_string(), sequence: 4294967295, }; let mut utxos = Vec::new(); @@ -774,7 +719,7 @@ mod tests { amount: 1000, address: Address::from_str("37E2J9ViM4QFiewo7aw5L3drF2QKB99F9e").unwrap(), script_pubkey: "a9142d2b1ef5ee4cf6c3ebc8cf66a602783798f7875987".to_string(), - derive_path: "0/22".to_string(), + derive_path: "m/49'/0'/0'/0/22".to_string(), sequence: 0, }; let mut utxos = Vec::new(); @@ -802,7 +747,7 @@ mod tests { amount: 1000, address: Address::from_str("mkeNU5nVnozJiaACDELLCsVUc8Wxoh1rQN").unwrap(), script_pubkey: "76a914383fb81cb0a3fc724b5e08cf8bbd404336d711f688ac".to_string(), - derive_path: "0/0".to_string(), + derive_path: "m/44'/1'/0'/0/0".to_string(), sequence: 4294967295, }; let mut utxos = Vec::new(); diff --git a/imkey-core/ikc-wallet/coin-btc-fork/Cargo.toml b/imkey-core/ikc-wallet/coin-btc-fork/Cargo.toml index c5c2f8a0..7c760da9 100644 --- a/imkey-core/ikc-wallet/coin-btc-fork/Cargo.toml +++ b/imkey-core/ikc-wallet/coin-btc-fork/Cargo.toml @@ -11,21 +11,20 @@ ikc-common = {path = "../../ikc-common"} ikc-device = {path = "../../ikc-device"} ikc-transport = {path = "../../ikc-transport"} -bitcoin = "0.29.2" -secp256k1 = {version ="0.24.1", features = ["rand", "recovery"] } -tiny-bip39 = "1.0.0" -#bitcoinconsensus = { version = "0.16", optional = true } -failure = "0.1.8" -hex = "0.4.3" -serde = { version = "1.0.147", features = ["derive"] } -serde_json = "1.0.89" -bitcoin_hashes = "0.11.0" -num-bigint = "0.4.3" -bytes = "1.3.0" -prost = "0.11.2" -prost-types = "0.11.2" -lazy_static = "1.4.0" -parking_lot = "0.12.1" -bech32 = "0.9.1" -base64 = "0.13.1" +bitcoin = "=0.29.2" +secp256k1 = {version ="=0.24.3", features = ["rand", "recovery"] } +tiny-bip39 = "=1.0.0" +anyhow = "=1.0.79" +hex = "=0.4.3" +serde = { version = "=1.0.147", features = ["derive"] } +serde_json = "=1.0.89" +bitcoin_hashes = "=0.11.0" +num-bigint = "=0.4.3" +bytes = "=1.4.0" +prost = "=0.11.2" +prost-types = "=0.11.2" +lazy_static = "=1.4.0" +parking_lot = "=0.12.1" +bech32 = "=0.9.1" +base64 = "=0.13.1" diff --git a/imkey-core/ikc-wallet/coin-btc-fork/src/address.rs b/imkey-core/ikc-wallet/coin-btc-fork/src/address.rs index 57fd847d..a3dd9215 100644 --- a/imkey-core/ikc-wallet/coin-btc-fork/src/address.rs +++ b/imkey-core/ikc-wallet/coin-btc-fork/src/address.rs @@ -16,10 +16,9 @@ use ikc_common::error::{CoinError, CommonError}; use ikc_common::path::check_path_validity; use bech32::{u5, ToBase32, Variant}; +use ikc_common::utility::uncompress_pubkey_2_compress; use std::fmt::{Display, Formatter}; use std::str::FromStr; -// use bitcoin::hashes::Hash; -use ikc_common::utility::hex_to_bytes; #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct BtcForkAddress { @@ -174,10 +173,45 @@ impl BtcForkAddress { addr.network.network == coin.network } } + + pub fn get_pub_key(path: &str) -> Result { + check_path_validity(path)?; + + let xpub_data = get_xpub_data(path, true)?; + let pub_key = uncompress_pubkey_2_compress(&xpub_data[..130]); + + if pub_key.starts_with("0x") { + Ok(pub_key) + } else { + Ok(format!("0x{}", pub_key)) + } + } + + pub fn from_pub_key(pub_key: Vec, btc_fork_network: BtcForkNetwork) -> Result { + let mut public_key = PublicKey::from_slice(&pub_key)?; + public_key.compressed = true; + let address = match btc_fork_network.seg_wit.to_uppercase().as_str() { + "P2WPKH" => { + let addr = Address::p2shwpkh(&public_key, Network::Bitcoin).unwrap(); + BtcForkAddress { + payload: addr.payload, + network: btc_fork_network, + } + } + _ => { + let addr = Address::p2pkh(&public_key, Network::Bitcoin); + BtcForkAddress { + payload: addr.payload, + network: btc_fork_network, + } + } + }; + Ok(address.to_string()) + } } impl FromStr for BtcForkAddress { - type Err = failure::Error; + type Err = anyhow::Error; fn from_str(s: &str) -> Result { // try bech32 @@ -272,7 +306,7 @@ impl FromStr for BtcForkAddress { Payload::ScriptHash(ScriptHash::from_slice(&data[1..]).unwrap()), ) } - x => { + _ => { return Err(CoinError::InvalidVersion.into()); } }; @@ -306,14 +340,13 @@ impl Display for BtcForkAddress { &mut bech32_writer, u5::try_from_u8(ver.to_num()).unwrap(), )?; - bech32::ToBase32::write_base32(&prog, &mut bech32_writer) + ToBase32::write_base32(&prog, &mut bech32_writer) } } } } /// Extract the bech32 prefix. -/// Returns the same slice when no prefix is found. fn bech32_network(bech32: &str) -> Option { let bech32_prefix = match bech32.rfind('1') { None => None, diff --git a/imkey-core/ikc-wallet/coin-btc-fork/src/btcforkapi.rs b/imkey-core/ikc-wallet/coin-btc-fork/src/btcforkapi.rs index 9cc8a2d7..fcb17cb2 100644 --- a/imkey-core/ikc-wallet/coin-btc-fork/src/btcforkapi.rs +++ b/imkey-core/ikc-wallet/coin-btc-fork/src/btcforkapi.rs @@ -1,43 +1,46 @@ +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Utxo { #[prost(string, tag = "1")] - pub tx_hash: std::string::String, + pub tx_hash: ::prost::alloc::string::String, #[prost(int32, tag = "2")] pub vout: i32, #[prost(int64, tag = "3")] pub amount: i64, #[prost(string, tag = "4")] - pub address: std::string::String, + pub address: ::prost::alloc::string::String, #[prost(string, tag = "5")] - pub script_pub_key: std::string::String, + pub script_pub_key: ::prost::alloc::string::String, #[prost(string, tag = "6")] - pub derived_path: std::string::String, + pub derived_path: ::prost::alloc::string::String, #[prost(int64, tag = "7")] pub sequence: i64, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BtcForkTxInput { #[prost(string, tag = "1")] - pub to: std::string::String, + pub to: ::prost::alloc::string::String, #[prost(int64, tag = "2")] pub amount: i64, #[prost(message, repeated, tag = "3")] - pub unspents: ::std::vec::Vec, + pub unspents: ::prost::alloc::vec::Vec, #[prost(int64, tag = "4")] pub fee: i64, #[prost(uint32, tag = "5")] pub change_address_index: u32, #[prost(string, tag = "6")] - pub change_address: std::string::String, + pub change_address: ::prost::alloc::string::String, #[prost(string, tag = "7")] - pub seg_wit: std::string::String, + pub seg_wit: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BtcForkTxOutput { #[prost(string, tag = "1")] - pub signature: std::string::String, + pub signature: ::prost::alloc::string::String, #[prost(string, tag = "2")] - pub tx_hash: std::string::String, + pub tx_hash: ::prost::alloc::string::String, #[prost(string, tag = "3")] - pub wtx_hash: std::string::String, + pub wtx_hash: ::prost::alloc::string::String, } diff --git a/imkey-core/ikc-wallet/coin-btc-fork/src/common.rs b/imkey-core/ikc-wallet/coin-btc-fork/src/common.rs index 1d76e5a4..1bc283dd 100644 --- a/imkey-core/ikc-wallet/coin-btc-fork/src/common.rs +++ b/imkey-core/ikc-wallet/coin-btc-fork/src/common.rs @@ -6,14 +6,11 @@ use bitcoin::util::base58; use bitcoin::util::bip32::{ChainCode, ChildNumber, ExtendedPubKey}; use bitcoin::Network; use bitcoin::{Address, PublicKey}; -use bitcoin_hashes::hex::ToHex; -use bitcoin_hashes::sha256d::Hash as Hash256; -use bitcoin_hashes::Hash; use ikc_common::apdu::{ApduCheck, BtcApdu, CoinCommonApdu}; use ikc_common::error::CoinError; -use ikc_common::utility::sha256_hash; +use ikc_common::utility::{hex_to_bytes, sha256_hash}; use ikc_transport::message::send_apdu; -use secp256k1::{Message, PublicKey as Secp256k1PublicKey, Secp256k1, Signature}; +use secp256k1::{ecdsa::Signature, Message, PublicKey as Secp256k1PublicKey, Secp256k1}; use std::convert::TryFrom; use std::str::FromStr; @@ -29,30 +26,30 @@ pub fn address_verify( ) -> Result> { let mut utxo_pub_key_vec: Vec = vec![]; for utxo in utxos { - //get utxo public key - let public_key_obj = Secp256k1PublicKey::from_str(public_key)?; - - //gen chain code obj - let chain_code_obj = ChainCode::try_from(chain_code)?; - //build extended public key - let mut extend_public_key = ExtendedPubKey { - network: network, - depth: 0, - parent_fingerprint: Default::default(), - child_number: ChildNumber::from_normal_idx(0)?, - public_key: public_key_obj, - chain_code: chain_code_obj, - }; - - let bitcoin_secp = BitcoinSecp256k1::new(); - if !utxo.derived_path.is_empty() { - let index_number_vec: Vec<&str> = utxo.derived_path.as_str().split('/').collect(); - for index_number in index_number_vec { - let test_chain_number = - ChildNumber::from_normal_idx(index_number.parse().unwrap())?; - extend_public_key = extend_public_key.ckd_pub(&bitcoin_secp, test_chain_number)?; + let extend_public_key = if !utxo.derived_path.is_empty() { + let xpub_data = get_xpub_data(&utxo.derived_path, false)?; + let public_key = &xpub_data[..130]; + let chain_code = &xpub_data[130..194]; + ExtendedPubKey { + network, + depth: 0, + parent_fingerprint: Default::default(), + child_number: ChildNumber::from_normal_idx(0)?, + public_key: Secp256k1PublicKey::from_str(public_key)?, + chain_code: ChainCode::from(hex_to_bytes(chain_code)?.as_slice()), } - } + } else { + let public_key_obj = Secp256k1PublicKey::from_str(public_key)?; + let chain_code_obj = ChainCode::try_from(chain_code)?; + ExtendedPubKey { + network, + depth: 0, + parent_fingerprint: Default::default(), + child_number: ChildNumber::from_normal_idx(0)?, + public_key: public_key_obj, + chain_code: chain_code_obj, + } + }; let se_gen_address = match trans_type_flg { TransTypeFlg::BTC => Address::p2pkh( @@ -110,13 +107,15 @@ pub fn secp256k1_sign_verify(public: &[u8], signed: &[u8], message: &[u8]) -> Re let mut sig_obj = Signature::from_der(signed)?; sig_obj.normalize_s(); //verify - Ok(secp.verify(&message_obj, &sig_obj, &public_obj).is_ok()) + Ok(secp + .verify_ecdsa(&message_obj, &sig_obj, &public_obj) + .is_ok()) } /** get address version */ -pub fn get_address_version(network: Network, address: &str) -> Result { +pub fn get_address_version(_network: Network, address: &str) -> Result { let address_bytes = base58::from(address)?; Ok(address_bytes.as_slice()[0]) } diff --git a/imkey-core/ikc-wallet/coin-btc-fork/src/lib.rs b/imkey-core/ikc-wallet/coin-btc-fork/src/lib.rs index 776e4482..b2ef765c 100644 --- a/imkey-core/ikc-wallet/coin-btc-fork/src/lib.rs +++ b/imkey-core/ikc-wallet/coin-btc-fork/src/lib.rs @@ -6,16 +6,8 @@ pub mod btcforkapi; pub mod common; pub mod transaction; -pub type Result = result::Result; -extern crate failure; +pub type Result = result::Result; +extern crate anyhow; #[macro_use] extern crate lazy_static; - -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - assert_eq!(2 + 2, 4); - } -} diff --git a/imkey-core/ikc-wallet/coin-btc-fork/src/transaction.rs b/imkey-core/ikc-wallet/coin-btc-fork/src/transaction.rs index d1c91c1e..a0e7d51e 100644 --- a/imkey-core/ikc-wallet/coin-btc-fork/src/transaction.rs +++ b/imkey-core/ikc-wallet/coin-btc-fork/src/transaction.rs @@ -1,19 +1,13 @@ use bitcoin::blockdata::{opcodes, script::Builder}; use bitcoin::consensus::{serialize, Encodable}; use bitcoin::hashes::hex::FromHex; -use bitcoin::util::psbt::serialize::Serialize; use bitcoin::{ - Address, EcdsaSighashType, LockTime, Network, OutPoint, PackedLockTime, Script, Sequence, - SigHashType, Transaction, TxIn, TxOut, Witness, + EcdsaSighashType, Network, OutPoint, PackedLockTime, Script, Sequence, Transaction, TxIn, + TxOut, Witness, }; use bitcoin_hashes::hash160; use bitcoin_hashes::hex::ToHex; -use bitcoin_hashes::sha256d::Hash as Hash256; use bitcoin_hashes::Hash; -use secp256k1::Signature; -use std::str::FromStr; -// use serde::Serialize; - use ikc_common::apdu::{ApduCheck, BtcForkApdu}; use ikc_common::coin_info::CoinInfo; use ikc_common::constants::{ @@ -24,6 +18,8 @@ use ikc_common::path::check_path_validity; use ikc_common::utility::{bigint_to_byte_vec, hex_to_bytes, secp256k1_sign}; use ikc_device::device_binding::KEY_MANAGER; use ikc_transport::message::{send_apdu, send_apdu_timeout}; +use secp256k1::ecdsa::Signature; +use std::str::FromStr; use crate::address::BtcForkAddress; use crate::btc_fork_network::network_from_param; @@ -48,7 +44,6 @@ impl BtcForkTransaction { ) -> Result { //path check check_path_validity(path)?; - let mut path_str = path.to_string(); let bip44_segments: Vec<&str> = path.split("/").collect(); let is_full_path = bip44_segments.len() == 6; let mut path_str: String = path.to_string(); @@ -200,16 +195,23 @@ impl BtcForkTransaction { if y >= utxo_pub_key_vec.len() { break; } + let sign_path = if self + .tx_input + .unspents + .get(y) + .unwrap() + .derived_path + .is_empty() + { + path_str.as_str() + } else { + self.tx_input.unspents.get(y).unwrap().derived_path.as_str() + }; let btc_sign_apdu = BtcForkApdu::btc_fork_sign( 0x4A, y as u8, EcdsaSighashType::All.to_u32() as u8, - format!( - "{}{}", - path_str, - self.tx_input.unspents.get(y).unwrap().derived_path - ) - .as_str(), + sign_path, ); //sign data let btc_sign_apdu_return = send_apdu(btc_sign_apdu)?; @@ -255,7 +257,6 @@ impl BtcForkTransaction { ) -> Result { //path check check_path_validity(path)?; - let mut path_str = path.to_string(); let bip44_segments: Vec<&str> = path.split("/").collect(); let is_full_path = bip44_segments.len() == 6; let mut path_str: String = path.to_string(); @@ -422,9 +423,13 @@ impl BtcForkTransaction { data.insert(0, data.len() as u8); //address let mut address_data: Vec = vec![]; - let sign_path = format!("{}{}", path_str, unspent.derived_path); - address_data.push(sign_path.as_bytes().len() as u8); - address_data.extend_from_slice(sign_path.as_bytes()); + if unspent.derived_path.is_empty() { + address_data.push(path_str.as_bytes().len() as u8); + address_data.extend_from_slice(path_str.as_bytes()); + } else { + address_data.push(unspent.derived_path.as_bytes().len() as u8); + address_data.extend_from_slice(unspent.derived_path.as_bytes()); + } data.extend(address_data.iter()); if index == self.tx_input.unspents.len() - 1 { @@ -582,19 +587,12 @@ impl BtcForkTransaction { #[cfg(test)] mod tests { - use bitcoin::{Address, Network}; - use hex::FromHex; - - use ikc_common::coin_info::coin_info_from_param; - use ikc_common::error::CoinError; - use ikc_device::device_binding::bind_test; - use ikc_device::device_binding::DeviceManage; - use ikc_transport::hid_api::hid_connect; - use std::str::FromStr; - use crate::btcforkapi::BtcForkTxInput; use crate::btcforkapi::Utxo; use crate::transaction::BtcForkTransaction; + use bitcoin::Network; + use ikc_common::coin_info::coin_info_from_param; + use ikc_device::device_binding::bind_test; #[test] fn test_sign_simple_ltc() { @@ -608,7 +606,7 @@ mod tests { amount: 1000000, address: "myxdgXjCRgAskD2g1b6WJttJbuv67hq6sQ".to_string(), script_pub_key: "76a914ca4d8acded69ce4f05d0925946d261f86c675fd888ac".to_string(), - derived_path: "0/0".to_string(), + derived_path: "m/44'/2'/0'/0/0".to_string(), sequence: 0, }; let mut unspents = Vec::new(); @@ -653,7 +651,7 @@ mod tests { amount: 1000000, address: "myxdgXjCRgAskD2g1b6WJttJbuv67hq6sQ".to_string(), script_pub_key: "76a914ca4d8acded69ce4f05d0925946d261f86c675fd888ac".to_string(), - derived_path: "0/0".to_string(), + derived_path: "m/44'/2'/0'/0/0".to_string(), sequence: 0, }; let mut unspents = Vec::new(); @@ -697,7 +695,7 @@ mod tests { amount: 19850000, address: "M7xo1Mi1gULZSwgvu7VVEvrwMRqngmFkVd".to_string(), script_pub_key: "76a914ca4d8acded69ce4f05d0925946d261f86c675fd888ac".to_string(), - derived_path: "0/0".to_string(), + derived_path: "m/44'/2'/0'/0/0".to_string(), sequence: 0, }]; let tx_input = BtcForkTxInput { diff --git a/imkey-core/ikc-wallet/coin-ckb/Cargo.toml b/imkey-core/ikc-wallet/coin-ckb/Cargo.toml index 72a04456..cff7f6ad 100644 --- a/imkey-core/ikc-wallet/coin-ckb/Cargo.toml +++ b/imkey-core/ikc-wallet/coin-ckb/Cargo.toml @@ -10,13 +10,14 @@ edition = "2018" ikc-common = {path = "../../ikc-common"} ikc-device = {path = "../../ikc-device"} ikc-transport = {path = "../../ikc-transport"} -blake2b-rs = "0.2.0" -failure = "0.1.8" -bech32 = "0.9.1" -hex = "0.4.3" -byteorder = "1.4.3" -prost = "0.11.2" -lazy_static = "1.4.0" -secp256k1 = {version ="0.24.1", features = ["rand", "recovery"] } -base64 = "0.13.1" -bitcoin = "0.29.2" \ No newline at end of file +blake2b-rs = "=0.2.0" +anyhow = "=1.0.79" +bech32 = "=0.9.1" +hex = "=0.4.3" +byteorder = "=1.4.3" +prost = "=0.11.2" +lazy_static = "=1.4.0" +secp256k1 = {version ="=0.24.3", features = ["rand", "recovery"] } +base64 = "=0.13.1" +bitcoin = "=0.29.2" +thiserror = "=1.0.56" \ No newline at end of file diff --git a/imkey-core/ikc-wallet/coin-ckb/src/address.rs b/imkey-core/ikc-wallet/coin-ckb/src/address.rs index 47e28b0c..82701334 100644 --- a/imkey-core/ikc-wallet/coin-ckb/src/address.rs +++ b/imkey-core/ikc-wallet/coin-ckb/src/address.rs @@ -2,17 +2,15 @@ use crate::hash::blake2b_160; use crate::Result; use bech32::{ToBase32, Variant}; use bitcoin::util::bip32::{ChainCode, ChildNumber, DerivationPath, ExtendedPubKey, Fingerprint}; -use bitcoin::{Network, PublicKey}; use ikc_common::apdu::{Apdu, ApduCheck, Secp256k1Apdu}; -use ikc_common::constants; use ikc_common::constants::NERVOS_AID; use ikc_common::error::{CoinError, CommonError}; use ikc_common::path::check_path_validity; -use ikc_common::utility::{secp256k1_sign, secp256k1_sign_verify, uncompress_pubkey_2_compress}; +use ikc_common::utility::{network_convert, secp256k1_sign, secp256k1_sign_verify}; use ikc_device::device_binding::KEY_MANAGER; use ikc_transport::message::send_apdu; -use secp256k1::PublicKey as Secp256k1PublicKey; -use std::convert::TryFrom; +use secp256k1::hashes::hex::FromHex; +use secp256k1::{PublicKey as Secp256k1PublicKey, PublicKey}; use std::str::FromStr; pub struct CkbAddress {} @@ -23,8 +21,7 @@ impl CkbAddress { "TESTNET" => "ckt", _ => "ckb", }; - - let pub_key_hash = blake2b_160(pubkey); + let pub_key_hash = blake2b_160(PublicKey::from_slice(pubkey)?.serialize()); let mut buf = vec![]; buf.extend(vec![0x1, 0x00]); // append short version for locks with popular codehash and default code hash index @@ -34,7 +31,7 @@ impl CkbAddress { } pub fn get_public_key(path: &str) -> Result { - check_path_validity(path).expect("check path error"); + check_path_validity(path)?; let select_apdu = Apdu::select_applet(NERVOS_AID); let select_response = send_apdu(select_apdu)?; @@ -75,9 +72,7 @@ impl CkbAddress { pub fn get_address(network: &str, path: &str) -> Result { let pub_key = CkbAddress::get_public_key(path)?; - let comprs_pubkey = uncompress_pubkey_2_compress(&pub_key); - let comprs_pubkey_bytes = hex::decode(&comprs_pubkey).expect("decode ckb pubkey error"); - let address = CkbAddress::from_public_key(network, &comprs_pubkey_bytes)?; + let address = CkbAddress::from_public_key(network, &Vec::from_hex(&pub_key)?)?; Ok(address) } @@ -90,7 +85,7 @@ impl CkbAddress { Ok(address) } - pub fn get_enc_xpub(network: Network, path: &str) -> Result { + pub fn get_enc_xpub(network: &str, path: &str) -> Result { let xpub = Self::get_xpub(network, path)?; let key = ikc_common::XPUB_COMMON_KEY_128.read(); let iv = ikc_common::XPUB_COMMON_IV.read(); @@ -101,7 +96,7 @@ impl CkbAddress { Ok(base64::encode(&encrypted)) } - pub fn get_xpub(network: Network, path: &str) -> Result { + pub fn get_xpub(network: &str, path: &str) -> Result { //path check check_path_validity(path)?; @@ -123,9 +118,10 @@ impl CkbAddress { //get parent public key fingerprint let parent_chain_code = ChainCode::from(hex::decode(parent_chain_code)?.as_slice()); + let network = network_convert(network); let parent_ext_pub_key = ExtendedPubKey { - network: network, - depth: 0 as u8, + network, + depth: 0u8, parent_fingerprint: Fingerprint::default(), child_number: ChildNumber::from_normal_idx(0).unwrap(), public_key: parent_pub_key_obj, @@ -187,7 +183,6 @@ impl CkbAddress { #[cfg(test)] mod tests { use crate::address::CkbAddress; - use bitcoin::Network; use ikc_common::constants; use ikc_common::{XPUB_COMMON_IV, XPUB_COMMON_KEY_128}; use ikc_device::device_binding::bind_test; @@ -217,7 +212,7 @@ mod tests { fn test_get_public_key() { bind_test(); - let network = "TESTNET"; + let _network = "TESTNET"; let pk = CkbAddress::get_public_key(constants::NERVOS_PATH).expect("get pubkey fail"); assert_eq!(&pk, "04554851980004FF256888612BF0D64D9B1002BF82331450FD5A7405D1B23CC5BD2F4DDA9D71F6502CD761AFB29B1A89AECEBC832851CD361D3351216F08635BBF"); } @@ -249,17 +244,15 @@ mod tests { *XPUB_COMMON_KEY_128.write() = "4A2B655485ABBAB54BD30298BB0A5B55".to_string(); *XPUB_COMMON_IV.write() = "73518399CB98DCD114D873E06EBF4BCC".to_string(); - let version: Network = Network::Bitcoin; let path: &str = "m/44'/309'/0'"; - let get_xpub_result = CkbAddress::get_xpub(version, path); + let get_xpub_result = CkbAddress::get_xpub("MAINNET", path); assert!(get_xpub_result.is_ok()); let xpub = get_xpub_result.ok().unwrap(); - assert_eq!("xpub6CuQc3kkPk2oPKAXnCpEJNkmwzMkXmv1BBG5a2aUbhGBR49zqmSUpJDG3veFgfiMDcjusGVoHP574ecgsyo48Hvmgq33oP8NRoC9kHqZYuN", xpub); + assert_eq!("xpub6CyvXfYwHJjJ9syYjG7qZMva1yMx93SUmqUcKHvoReUadCzqJA8mMXrrXQjRvzveuahgdQmCsdsuiCkMRsLec63DW83Wwu5UqKJQmsonKpo", xpub); - let version: Network = Network::Bitcoin; let path: &str = "m/44'/309'/0'"; - let get_enc_xpub_result = CkbAddress::get_enc_xpub(version, path); + let get_enc_xpub_result = CkbAddress::get_enc_xpub("MAINNET", path); let enc_xpub = get_enc_xpub_result.ok().unwrap(); - assert_eq!("iWHbNJrWJIb0Kj8GRWzQX9Z1wUNP4HQecGNaAI+KUqsMFCKaP1rDz0KCwlSVvwcONB3S80hdbZOoW56VGB1hcqPyS45qxPcqi+xTtDNYasP2mmnNd4rO1HEJIQOaejDEdGEg2psFu/dzrRHKoZ6gRQ==", enc_xpub); + assert_eq!("xkpmspgDJhDx7nBk/se+P0CRS/fbPKYivQiqocPEdXFIsNLCHy5lZEc59LGLbsFFamWX7j8TUs5ugKynEign+y0hDQIhm3y1PypmU+frhoWckc7vgkdzbd9xGdMTVv7J+JW4Zlenksb8a9UNkRfrJg==", enc_xpub); } } diff --git a/imkey-core/ikc-wallet/coin-ckb/src/lib.rs b/imkey-core/ikc-wallet/coin-ckb/src/lib.rs index c475fa0c..965b44ad 100644 --- a/imkey-core/ikc-wallet/coin-ckb/src/lib.rs +++ b/imkey-core/ikc-wallet/coin-ckb/src/lib.rs @@ -4,46 +4,46 @@ pub mod nervosapi; pub mod serializer; pub mod signer; pub mod transaction_helper; -extern crate failure; +extern crate anyhow; use core::result; -pub type Result = result::Result; -use failure::Fail; +pub type Result = result::Result; pub use nervosapi::{CachedCell, CellInput, CkbTxInput, CkbTxOutput, OutPoint, Script, Witness}; pub use serializer::Serializer; +use thiserror::Error; -#[derive(Fail, Debug, PartialEq)] +#[derive(Error, Debug, PartialEq)] pub enum Error { - #[fail(display = "invalid_output_point")] + #[error("invalid_output_point")] InvalidOutputPoint, - #[fail(display = "invalid_outputs_data_length")] + #[error("invalid_outputs_data_length")] InvalidOutputsDataLength, - #[fail(display = "required_witness")] + #[error("required_witness")] RequiredWitness, - #[fail(display = "invalid_input_cells")] + #[error("invalid_input_cells")] InvalidInputCells, - #[fail(display = "required_output_data")] + #[error("required_output_data")] RequiredOutputsData, - #[fail(display = "witness_group_empty")] + #[error("witness_group_empty")] WitnessGroupEmpty, - #[fail(display = "witness_empty")] + #[error("witness_empty")] WitnessEmpty, - #[fail(display = "invalid_tx_hash")] + #[error("invalid_tx_hash")] InvalidTxHash, - #[fail(display = "invalid_hash_type")] + #[error("invalid_hash_type")] InvalidHashType, - #[fail(display = "cell_input_not_cached")] + #[error("cell_input_not_cached")] CellInputNotCached, - #[fail(display = "invalid_hex_value")] + #[error("invalid_hex_value")] InvalidHexValue, } diff --git a/imkey-core/ikc-wallet/coin-ckb/src/nervosapi.rs b/imkey-core/ikc-wallet/coin-ckb/src/nervosapi.rs index c8e204bb..56044ed1 100644 --- a/imkey-core/ikc-wallet/coin-ckb/src/nervosapi.rs +++ b/imkey-core/ikc-wallet/coin-ckb/src/nervosapi.rs @@ -1,61 +1,68 @@ +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct OutPoint { #[prost(string, tag = "1")] - pub tx_hash: std::string::String, + pub tx_hash: ::prost::alloc::string::String, #[prost(int32, tag = "2")] pub index: i32, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Witness { #[prost(string, tag = "1")] - pub lock: std::string::String, + pub lock: ::prost::alloc::string::String, #[prost(string, tag = "2")] - pub input_type: std::string::String, + pub input_type: ::prost::alloc::string::String, #[prost(string, tag = "3")] - pub output_type: std::string::String, + pub output_type: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Script { #[prost(string, tag = "1")] - pub args: std::string::String, + pub args: ::prost::alloc::string::String, #[prost(string, tag = "2")] - pub code_hash: std::string::String, + pub code_hash: ::prost::alloc::string::String, #[prost(string, tag = "3")] - pub hash_type: std::string::String, + pub hash_type: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CellInput { #[prost(message, optional, tag = "1")] - pub previous_output: ::std::option::Option, + pub previous_output: ::core::option::Option, #[prost(string, tag = "2")] - pub since: std::string::String, + pub since: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CachedCell { #[prost(int64, tag = "1")] pub capacity: i64, #[prost(message, optional, tag = "2")] - pub lock: ::std::option::Option