增加使用钱包密钥和公钥加解密的方法
This commit is contained in:
parent
c8527f97c4
commit
0c35f61d70
336
Cargo.lock
generated
336
Cargo.lock
generated
@ -2,12 +2,53 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aead"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8"
|
||||||
|
dependencies = [
|
||||||
|
"crypto-common",
|
||||||
|
"generic-array",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aes"
|
||||||
|
version = "0.8.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"cipher",
|
||||||
|
"cpufeatures",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aes-gcm"
|
||||||
|
version = "0.10.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c"
|
||||||
|
dependencies = [
|
||||||
|
"aead",
|
||||||
|
"aes",
|
||||||
|
"cipher",
|
||||||
|
"ctr",
|
||||||
|
"ghash",
|
||||||
|
"subtle",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.65"
|
version = "1.0.65"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602"
|
checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "arrayref"
|
||||||
|
version = "0.3.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arrayvec"
|
name = "arrayvec"
|
||||||
version = "0.7.2"
|
version = "0.7.2"
|
||||||
@ -20,6 +61,12 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "base64"
|
||||||
|
version = "0.13.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitcoin_hashes"
|
name = "bitcoin_hashes"
|
||||||
version = "0.11.0"
|
version = "0.11.0"
|
||||||
@ -44,6 +91,24 @@ dependencies = [
|
|||||||
"wyz",
|
"wyz",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "block-buffer"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
|
||||||
|
dependencies = [
|
||||||
|
"generic-array",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "block-buffer"
|
||||||
|
version = "0.10.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
|
||||||
|
dependencies = [
|
||||||
|
"generic-array",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bumpalo"
|
name = "bumpalo"
|
||||||
version = "3.11.0"
|
version = "3.11.0"
|
||||||
@ -74,6 +139,16 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cipher"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e"
|
||||||
|
dependencies = [
|
||||||
|
"crypto-common",
|
||||||
|
"inout",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cloudabi"
|
name = "cloudabi"
|
||||||
version = "0.0.3"
|
version = "0.0.3"
|
||||||
@ -83,12 +158,86 @@ dependencies = [
|
|||||||
"bitflags",
|
"bitflags",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cpufeatures"
|
||||||
|
version = "0.2.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crunchy"
|
name = "crunchy"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
|
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crypto-common"
|
||||||
|
version = "0.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||||
|
dependencies = [
|
||||||
|
"generic-array",
|
||||||
|
"rand_core 0.6.4",
|
||||||
|
"typenum",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crypto-mac"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
|
||||||
|
dependencies = [
|
||||||
|
"generic-array",
|
||||||
|
"subtle",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ctr"
|
||||||
|
version = "0.9.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
|
||||||
|
dependencies = [
|
||||||
|
"cipher",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "digest"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
||||||
|
dependencies = [
|
||||||
|
"generic-array",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "digest"
|
||||||
|
version = "0.10.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
|
||||||
|
dependencies = [
|
||||||
|
"block-buffer 0.10.3",
|
||||||
|
"crypto-common",
|
||||||
|
"subtle",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ecies"
|
||||||
|
version = "0.2.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "374125c18bfe63716aae1b6b4ee0243e6264f1766056b5efdd4f257732aa3543"
|
||||||
|
dependencies = [
|
||||||
|
"aes-gcm",
|
||||||
|
"getrandom",
|
||||||
|
"hkdf",
|
||||||
|
"libsecp256k1",
|
||||||
|
"rand 0.8.5",
|
||||||
|
"sha2 0.10.6",
|
||||||
|
"typenum",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fixed-hash"
|
name = "fixed-hash"
|
||||||
version = "0.8.0"
|
version = "0.8.0"
|
||||||
@ -113,6 +262,16 @@ version = "2.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
|
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "generic-array"
|
||||||
|
version = "0.14.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
|
||||||
|
dependencies = [
|
||||||
|
"typenum",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.2.7"
|
version = "0.2.7"
|
||||||
@ -126,12 +285,61 @@ dependencies = [
|
|||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ghash"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40"
|
||||||
|
dependencies = [
|
||||||
|
"opaque-debug",
|
||||||
|
"polyval",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hex"
|
name = "hex"
|
||||||
version = "0.4.3"
|
version = "0.4.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hkdf"
|
||||||
|
version = "0.12.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
|
||||||
|
dependencies = [
|
||||||
|
"hmac 0.12.1",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hmac"
|
||||||
|
version = "0.8.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840"
|
||||||
|
dependencies = [
|
||||||
|
"crypto-mac",
|
||||||
|
"digest 0.9.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hmac"
|
||||||
|
version = "0.12.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
|
||||||
|
dependencies = [
|
||||||
|
"digest 0.10.6",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hmac-drbg"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1"
|
||||||
|
dependencies = [
|
||||||
|
"digest 0.9.0",
|
||||||
|
"generic-array",
|
||||||
|
"hmac 0.8.1",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "impl-codec"
|
name = "impl-codec"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
@ -152,6 +360,15 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "inout"
|
||||||
|
version = "0.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
|
||||||
|
dependencies = [
|
||||||
|
"generic-array",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.3"
|
version = "1.0.3"
|
||||||
@ -173,6 +390,54 @@ version = "0.2.133"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966"
|
checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libsecp256k1"
|
||||||
|
version = "0.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1"
|
||||||
|
dependencies = [
|
||||||
|
"arrayref",
|
||||||
|
"base64",
|
||||||
|
"digest 0.9.0",
|
||||||
|
"hmac-drbg",
|
||||||
|
"libsecp256k1-core",
|
||||||
|
"libsecp256k1-gen-ecmult",
|
||||||
|
"libsecp256k1-gen-genmult",
|
||||||
|
"rand 0.8.5",
|
||||||
|
"serde",
|
||||||
|
"sha2 0.9.9",
|
||||||
|
"typenum",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libsecp256k1-core"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451"
|
||||||
|
dependencies = [
|
||||||
|
"crunchy",
|
||||||
|
"digest 0.9.0",
|
||||||
|
"subtle",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libsecp256k1-gen-ecmult"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809"
|
||||||
|
dependencies = [
|
||||||
|
"libsecp256k1-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libsecp256k1-gen-genmult"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c"
|
||||||
|
dependencies = [
|
||||||
|
"libsecp256k1-core",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.17"
|
version = "0.4.17"
|
||||||
@ -219,6 +484,12 @@ version = "1.15.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
|
checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "opaque-debug"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parity-scale-codec"
|
name = "parity-scale-codec"
|
||||||
version = "3.2.1"
|
version = "3.2.1"
|
||||||
@ -245,6 +516,18 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "polyval"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"cpufeatures",
|
||||||
|
"opaque-debug",
|
||||||
|
"universal-hash",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ppv-lite86"
|
name = "ppv-lite86"
|
||||||
version = "0.2.16"
|
version = "0.2.16"
|
||||||
@ -367,6 +650,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bitcoin_hashes",
|
"bitcoin_hashes",
|
||||||
|
"ecies",
|
||||||
"getrandom",
|
"getrandom",
|
||||||
"hex",
|
"hex",
|
||||||
"primitive-types",
|
"primitive-types",
|
||||||
@ -435,6 +719,30 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sha2"
|
||||||
|
version = "0.9.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
|
||||||
|
dependencies = [
|
||||||
|
"block-buffer 0.9.0",
|
||||||
|
"cfg-if",
|
||||||
|
"cpufeatures",
|
||||||
|
"digest 0.9.0",
|
||||||
|
"opaque-debug",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sha2"
|
||||||
|
version = "0.10.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"cpufeatures",
|
||||||
|
"digest 0.10.6",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "shamir_secret_sharing"
|
name = "shamir_secret_sharing"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
@ -452,6 +760,12 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "subtle"
|
||||||
|
version = "2.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.100"
|
version = "1.0.100"
|
||||||
@ -507,6 +821,12 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typenum"
|
||||||
|
version = "1.16.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uint"
|
name = "uint"
|
||||||
version = "0.9.4"
|
version = "0.9.4"
|
||||||
@ -525,6 +845,22 @@ version = "1.0.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
|
checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "universal-hash"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5"
|
||||||
|
dependencies = [
|
||||||
|
"crypto-common",
|
||||||
|
"subtle",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "version_check"
|
||||||
|
version = "0.9.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasi"
|
name = "wasi"
|
||||||
version = "0.11.0+wasi-snapshot-preview1"
|
version = "0.11.0+wasi-snapshot-preview1"
|
||||||
|
@ -24,6 +24,7 @@ shamir_secret_sharing = "0.1.1"
|
|||||||
tiny-keccak = "1.5"
|
tiny-keccak = "1.5"
|
||||||
primitive-types = "0.12.1"
|
primitive-types = "0.12.1"
|
||||||
getrandom = { version = "0.2.7", features = ["js"]}
|
getrandom = { version = "0.2.7", features = ["js"]}
|
||||||
|
ecies = {version = "0.2", default-features = false, features = ["pure"]}
|
||||||
#[target.'cfg(target_arch = "wasm32")'.dependencies]
|
#[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||||||
wasm-bindgen = "0.2.83"
|
wasm-bindgen = "0.2.83"
|
||||||
|
|
||||||
|
@ -4,45 +4,39 @@
|
|||||||
// 测试钱包在C侧调用接口存储和重新读出钱包密钥
|
// 测试钱包在C侧调用接口存储和重新读出钱包密钥
|
||||||
//
|
//
|
||||||
|
|
||||||
|
use rustwallet::{
|
||||||
|
decrypt, encrypt, generate_sec_key, get_address, new_wallet, sign, sign_for_tran, CWallet,
|
||||||
|
};
|
||||||
use std::ffi::{CStr, CString};
|
use std::ffi::{CStr, CString};
|
||||||
use std::os::raw::c_char;
|
use std::os::raw::c_char;
|
||||||
use rustwallet::{new_wallet, get_address, sign, sign_for_tran, CWallet, generate_sec_key};
|
|
||||||
|
|
||||||
macro_rules! print_cchar{
|
macro_rules! print_cchar {
|
||||||
($p1:expr) => (
|
($p1:expr) => {
|
||||||
let s = CStr::from_ptr($p1);
|
let s = CStr::from_ptr($p1);
|
||||||
let ps = s.to_str().unwrap();
|
let ps = s.to_str().unwrap();
|
||||||
println!("{}=> {}",
|
println!("{}=> {}", stringify!($p1), ps)
|
||||||
stringify!($p1),
|
};
|
||||||
ps)
|
($p1:expr, $p2:expr) => {
|
||||||
);
|
|
||||||
($p1:expr, $p2:expr) => (
|
|
||||||
let s = CStr::from_ptr($p2);
|
let s = CStr::from_ptr($p2);
|
||||||
let ps = s.to_str().unwrap();
|
let ps = s.to_str().unwrap();
|
||||||
println!("{}{}",
|
println!("{}{}", $p1, ps)
|
||||||
$p1,
|
};
|
||||||
ps)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! cchar_to_str{
|
macro_rules! cchar_to_str {
|
||||||
($p1:expr) => {
|
($p1:expr) => {{
|
||||||
{
|
let s = CStr::from_ptr($p1);
|
||||||
let s = CStr::from_ptr($p1);
|
let ps = s.to_str().unwrap();
|
||||||
let ps = s.to_str().unwrap();
|
ps
|
||||||
ps
|
}};
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! str_to_cchar {
|
macro_rules! str_to_cchar {
|
||||||
($p1:expr) => {
|
($p1:expr) => {{
|
||||||
{
|
let msgkey = CString::new($p1).unwrap();
|
||||||
let msgkey = CString::new($p1).unwrap();
|
let c_msgkey: *mut c_char = msgkey.into_raw();
|
||||||
let c_msgkey: *mut c_char = msgkey.into_raw();
|
c_msgkey
|
||||||
c_msgkey
|
}};
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
@ -60,7 +54,6 @@ fn main() {
|
|||||||
// let s_key = generate_sec_key(&wallet);
|
// let s_key = generate_sec_key(&wallet);
|
||||||
// print_cchar!(s_key);
|
// print_cchar!(s_key);
|
||||||
|
|
||||||
|
|
||||||
let key0 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2cd";
|
let key0 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2cd";
|
||||||
let key1 = "";
|
let key1 = "";
|
||||||
let key2 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5";
|
let key2 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5";
|
||||||
@ -68,7 +61,7 @@ fn main() {
|
|||||||
str_to_cchar!(msg),
|
str_to_cchar!(msg),
|
||||||
str_to_cchar!(key0),
|
str_to_cchar!(key0),
|
||||||
str_to_cchar!(key1),
|
str_to_cchar!(key1),
|
||||||
str_to_cchar!(key2)
|
str_to_cchar!(key2),
|
||||||
);
|
);
|
||||||
print_cchar!(private_key);
|
print_cchar!(private_key);
|
||||||
|
|
||||||
@ -76,9 +69,29 @@ fn main() {
|
|||||||
str_to_cchar!(msg),
|
str_to_cchar!(msg),
|
||||||
str_to_cchar!(key0),
|
str_to_cchar!(key0),
|
||||||
str_to_cchar!(key1),
|
str_to_cchar!(key1),
|
||||||
str_to_cchar!(key2)
|
str_to_cchar!(key2),
|
||||||
);
|
);
|
||||||
print_cchar!(address2);
|
print_cchar!(address2);
|
||||||
|
let message = "helloword";
|
||||||
|
let msg_encrypt = encrypt(
|
||||||
|
str_to_cchar!(msg),
|
||||||
|
str_to_cchar!(key0),
|
||||||
|
str_to_cchar!(key1),
|
||||||
|
str_to_cchar!(key2),
|
||||||
|
str_to_cchar!(message),
|
||||||
|
);
|
||||||
|
print_cchar!(msg_encrypt);
|
||||||
|
|
||||||
|
let msg_decrypt = decrypt(
|
||||||
|
str_to_cchar!(msg),
|
||||||
|
str_to_cchar!(key0),
|
||||||
|
str_to_cchar!(key1),
|
||||||
|
str_to_cchar!(key2),
|
||||||
|
msg_encrypt,
|
||||||
|
);
|
||||||
|
print_cchar!(msg_decrypt);
|
||||||
|
let msg_decrypt = cchar_to_str!(msg_decrypt);
|
||||||
|
assert_eq!(message, msg_decrypt);
|
||||||
// let tmp_cwallet2 = restore_wallet(&tmp_cwallet);
|
// let tmp_cwallet2 = restore_wallet(&tmp_cwallet);
|
||||||
// let address3 = get_address(&tmp_cwallet2);
|
// let address3 = get_address(&tmp_cwallet2);
|
||||||
// print_cchar!(address3);
|
// print_cchar!(address3);
|
||||||
|
0
scripts/wasm_build.sh
Normal file → Executable file
0
scripts/wasm_build.sh
Normal file → Executable file
148
src/lib.rs
148
src/lib.rs
@ -16,64 +16,52 @@ use crate::wallet::*;
|
|||||||
|
|
||||||
// #[cfg(target_os = "android")]
|
// #[cfg(target_os = "android")]
|
||||||
// mod android;
|
// mod android;
|
||||||
macro_rules! cchar_to_str{
|
macro_rules! cchar_to_str {
|
||||||
($p1:expr) => {
|
($p1:expr) => {{
|
||||||
{
|
let s = CStr::from_ptr($p1);
|
||||||
let s = CStr::from_ptr($p1);
|
let ps = s.to_str().unwrap();
|
||||||
let ps = s.to_str().unwrap();
|
ps
|
||||||
ps
|
}};
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! cchar_to_string{
|
macro_rules! cchar_to_string {
|
||||||
($p1:expr) => {
|
($p1:expr) => {{
|
||||||
{
|
let s = CStr::from_ptr($p1);
|
||||||
let s = CStr::from_ptr($p1);
|
let ps = s.to_str().unwrap();
|
||||||
let ps = s.to_str().unwrap();
|
ps.to_string()
|
||||||
ps.to_string()
|
}};
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! cchar_to_ostring{
|
macro_rules! cchar_to_ostring {
|
||||||
($p1:expr) => {
|
($p1:expr) => {{
|
||||||
{
|
let s = CStr::from_ptr($p1);
|
||||||
let s = CStr::from_ptr($p1);
|
let pb = s.to_str().unwrap();
|
||||||
let pb = s.to_str().unwrap();
|
let result = if pb.is_empty() {
|
||||||
let result = if pb.is_empty() {
|
None
|
||||||
None
|
} else {
|
||||||
} else {
|
Some(pb.to_string())
|
||||||
Some(pb.to_string())
|
};
|
||||||
};
|
result
|
||||||
result
|
}};
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! str_to_cchar {
|
macro_rules! str_to_cchar {
|
||||||
($p1:expr) => {
|
($p1:expr) => {{
|
||||||
{
|
let msgkey = CString::new($p1).unwrap();
|
||||||
let msgkey = CString::new($p1).unwrap();
|
let c_msgkey: *mut c_char = msgkey.into_raw();
|
||||||
let c_msgkey: *mut c_char = msgkey.into_raw();
|
c_msgkey
|
||||||
c_msgkey
|
}};
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! ostr_to_cchar{
|
macro_rules! ostr_to_cchar {
|
||||||
($p1:expr) => {
|
($p1:expr) => {{
|
||||||
{
|
let key = match $p1 {
|
||||||
let key = match $p1 {
|
Some(val) => CString::new(val).unwrap(),
|
||||||
Some(val) => {
|
None => CString::new("").unwrap(),
|
||||||
CString::new(val).unwrap()
|
};
|
||||||
},
|
let c_key: *mut c_char = key.into_raw();
|
||||||
None => CString::new("").unwrap()
|
c_key
|
||||||
};
|
}};
|
||||||
let c_key: *mut c_char = key.into_raw();
|
|
||||||
c_key
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
@ -115,7 +103,6 @@ pub unsafe extern "C" fn new_wallet(msg: *const c_char) -> CWallet {
|
|||||||
convert_to_cwallet(rust_wallet)
|
convert_to_cwallet(rust_wallet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn reset_wallet(
|
pub unsafe extern "C" fn reset_wallet(
|
||||||
msg_key: *const c_char,
|
msg_key: *const c_char,
|
||||||
@ -142,7 +129,7 @@ pub unsafe extern "C" fn get_address(
|
|||||||
master_key: *const c_char,
|
master_key: *const c_char,
|
||||||
second_key: *const c_char,
|
second_key: *const c_char,
|
||||||
backup_key: *const c_char,
|
backup_key: *const c_char,
|
||||||
) -> *mut c_char{
|
) -> *mut c_char {
|
||||||
let rwallet = generate_rwallet(msg_key, master_key, second_key, backup_key);
|
let rwallet = generate_rwallet(msg_key, master_key, second_key, backup_key);
|
||||||
let address = rwallet.get_address();
|
let address = rwallet.get_address();
|
||||||
let address_str = format!("{:?}", address);
|
let address_str = format!("{:?}", address);
|
||||||
@ -151,13 +138,18 @@ pub unsafe extern "C" fn get_address(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn wget_address(msg_key: String, master_key: String, second_key: Option<String>, backup_key: Option<String>) -> String {
|
pub fn wget_address(
|
||||||
|
msg_key: String,
|
||||||
|
master_key: String,
|
||||||
|
second_key: Option<String>,
|
||||||
|
backup_key: Option<String>,
|
||||||
|
) -> String {
|
||||||
console_log!("wget_address: {}, {}!", msg_key, master_key);
|
console_log!("wget_address: {}, {}!", msg_key, master_key);
|
||||||
let rwallet = Wallet{
|
let rwallet = Wallet {
|
||||||
msg_key,
|
msg_key,
|
||||||
master_key,
|
master_key,
|
||||||
second_key,
|
second_key,
|
||||||
backup_key
|
backup_key,
|
||||||
};
|
};
|
||||||
console_log!("wallet: {:?}", rwallet);
|
console_log!("wallet: {:?}", rwallet);
|
||||||
let address = rwallet.get_address();
|
let address = rwallet.get_address();
|
||||||
@ -184,8 +176,8 @@ pub unsafe extern "C" fn sign(
|
|||||||
master_key: *const c_char,
|
master_key: *const c_char,
|
||||||
second_key: *const c_char,
|
second_key: *const c_char,
|
||||||
backup_key: *const c_char,
|
backup_key: *const c_char,
|
||||||
msg: *const c_char
|
msg: *const c_char,
|
||||||
) -> *mut c_char{
|
) -> *mut c_char {
|
||||||
let rwallet = generate_rwallet(msg_key, master_key, second_key, backup_key);
|
let rwallet = generate_rwallet(msg_key, master_key, second_key, backup_key);
|
||||||
let msg_str = cchar_to_str!(msg);
|
let msg_str = cchar_to_str!(msg);
|
||||||
let signature = rwallet.sign(msg_str);
|
let signature = rwallet.sign(msg_str);
|
||||||
@ -201,9 +193,9 @@ pub unsafe extern "C" fn sign_for_tran(
|
|||||||
msg_key: *const c_char,
|
msg_key: *const c_char,
|
||||||
master_key: *const c_char,
|
master_key: *const c_char,
|
||||||
second_key: *const c_char,
|
second_key: *const c_char,
|
||||||
backup_key: *const c_char,
|
backup_key: *const c_char,
|
||||||
msg: *const c_char
|
msg: *const c_char,
|
||||||
) -> *mut c_char{
|
) -> *mut c_char {
|
||||||
let rwallet = generate_rwallet(msg_key, master_key, second_key, backup_key);
|
let rwallet = generate_rwallet(msg_key, master_key, second_key, backup_key);
|
||||||
let msg_str = cchar_to_str!(msg);
|
let msg_str = cchar_to_str!(msg);
|
||||||
let signature = rwallet.sign_for_tran(msg_str);
|
let signature = rwallet.sign_for_tran(msg_str);
|
||||||
@ -215,6 +207,40 @@ pub unsafe extern "C" fn sign_for_tran(
|
|||||||
str_to_cchar!(result)
|
str_to_cchar!(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn encrypt(
|
||||||
|
msg_key: *const c_char,
|
||||||
|
master_key: *const c_char,
|
||||||
|
second_key: *const c_char,
|
||||||
|
backup_key: *const c_char,
|
||||||
|
msg: *const c_char,
|
||||||
|
) -> *mut c_char {
|
||||||
|
let rwallet = generate_rwallet(msg_key, master_key, second_key, backup_key);
|
||||||
|
let msg_str = cchar_to_str!(msg);
|
||||||
|
let r = match rwallet.zencrypt(msg_str) {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(err) => panic!("Problem encrypt: {:?}", err),
|
||||||
|
};
|
||||||
|
str_to_cchar!(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn decrypt(
|
||||||
|
msg_key: *const c_char,
|
||||||
|
master_key: *const c_char,
|
||||||
|
second_key: *const c_char,
|
||||||
|
backup_key: *const c_char,
|
||||||
|
msg: *const c_char,
|
||||||
|
) -> *mut c_char {
|
||||||
|
let rwallet = generate_rwallet(msg_key, master_key, second_key, backup_key);
|
||||||
|
let msg_str = cchar_to_str!(msg);
|
||||||
|
println!("{}", msg_str);
|
||||||
|
let r = match rwallet.zdecrypt(msg_str) {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(err) => panic!("Problem encrypt: {:?}", err),
|
||||||
|
};
|
||||||
|
str_to_cchar!(r)
|
||||||
|
}
|
||||||
|
|
||||||
unsafe fn convert_to_cwallet(rwallet: Wallet) -> CWallet {
|
unsafe fn convert_to_cwallet(rwallet: Wallet) -> CWallet {
|
||||||
let c_msgkey: *mut c_char = str_to_cchar!(rwallet.msg_key);
|
let c_msgkey: *mut c_char = str_to_cchar!(rwallet.msg_key);
|
||||||
@ -249,7 +275,7 @@ unsafe fn generate_rwallet(
|
|||||||
master_key: *const c_char,
|
master_key: *const c_char,
|
||||||
second_key: *const c_char,
|
second_key: *const c_char,
|
||||||
backup_key: *const c_char,
|
backup_key: *const c_char,
|
||||||
) ->Wallet {
|
) -> Wallet {
|
||||||
let pmsg = cchar_to_string!(msg_key);
|
let pmsg = cchar_to_string!(msg_key);
|
||||||
let pm = cchar_to_string!(master_key);
|
let pm = cchar_to_string!(master_key);
|
||||||
let second_key = cchar_to_ostring!(second_key);
|
let second_key = cchar_to_ostring!(second_key);
|
||||||
@ -258,6 +284,6 @@ unsafe fn generate_rwallet(
|
|||||||
msg_key: pmsg,
|
msg_key: pmsg,
|
||||||
master_key: pm,
|
master_key: pm,
|
||||||
second_key: second_key,
|
second_key: second_key,
|
||||||
backup_key: backup_key
|
backup_key: backup_key,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ extern crate hex;
|
|||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use core::fmt::Write;
|
use core::fmt::Write;
|
||||||
|
use ecies::{decrypt, encrypt};
|
||||||
|
use primitive_types::{H160, H256};
|
||||||
use secp256k1::rand::rngs::OsRng;
|
use secp256k1::rand::rngs::OsRng;
|
||||||
use secp256k1::{Message, PublicKey, Secp256k1, SecretKey};
|
use secp256k1::{Message, PublicKey, Secp256k1, SecretKey};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
@ -10,7 +12,6 @@ use shamir_secret_sharing::ShamirSecretSharing as SSS;
|
|||||||
use std::str;
|
use std::str;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use tiny_keccak::keccak256;
|
use tiny_keccak::keccak256;
|
||||||
use primitive_types::{H160, H256};
|
|
||||||
|
|
||||||
pub fn generate_keypair() -> (SecretKey, PublicKey) {
|
pub fn generate_keypair() -> (SecretKey, PublicKey) {
|
||||||
let secp = Secp256k1::new();
|
let secp = Secp256k1::new();
|
||||||
@ -43,11 +44,7 @@ pub fn get_sss(msg: &str) -> SSS {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_sss_keypair(msg: &str, skey: &str) -> Vec<String> {
|
pub fn generate_sss_keypair(msg: &str, skey: &str) -> Vec<String> {
|
||||||
let secret = BigInt::parse_bytes(
|
let secret = BigInt::parse_bytes(&skey.as_bytes(), 16).unwrap();
|
||||||
&skey.as_bytes(),
|
|
||||||
16,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
let sss = get_sss(msg);
|
let sss = get_sss(msg);
|
||||||
let shares = sss.split(secret.clone());
|
let shares = sss.split(secret.clone());
|
||||||
let mut shares_str: Vec<String> = Vec::new();
|
let mut shares_str: Vec<String> = Vec::new();
|
||||||
@ -57,7 +54,6 @@ pub fn generate_sss_keypair(msg: &str, skey: &str) -> Vec<String> {
|
|||||||
shares_str
|
shares_str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn hash_message<S>(message: S) -> H256
|
pub fn hash_message<S>(message: S) -> H256
|
||||||
where
|
where
|
||||||
S: AsRef<[u8]>,
|
S: AsRef<[u8]>,
|
||||||
@ -79,7 +75,7 @@ pub struct Wallet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Wallet {
|
impl Wallet {
|
||||||
pub fn new(msg: &str) -> Self{
|
pub fn new(msg: &str) -> Self {
|
||||||
let (secret_key, _pub_key) = generate_keypair();
|
let (secret_key, _pub_key) = generate_keypair();
|
||||||
let s = hex::encode(&secret_key.secret_bytes());
|
let s = hex::encode(&secret_key.secret_bytes());
|
||||||
let shares_str = generate_sss_keypair(msg, &s);
|
let shares_str = generate_sss_keypair(msg, &s);
|
||||||
@ -91,11 +87,11 @@ impl Wallet {
|
|||||||
msg_key: msg.to_string(),
|
msg_key: msg.to_string(),
|
||||||
master_key: shares_str.get(0).unwrap().to_string(),
|
master_key: shares_str.get(0).unwrap().to_string(),
|
||||||
second_key: second_key,
|
second_key: second_key,
|
||||||
backup_key: backup_key
|
backup_key: backup_key,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn reset_wallet(&self) -> Self{
|
pub fn reset_wallet(&self) -> Self {
|
||||||
let secret_key = self.get_secret_key();
|
let secret_key = self.get_secret_key();
|
||||||
let s = hex::encode(&secret_key.secret_bytes());
|
let s = hex::encode(&secret_key.secret_bytes());
|
||||||
let shares_str = generate_sss_keypair(&self.msg_key, &s);
|
let shares_str = generate_sss_keypair(&self.msg_key, &s);
|
||||||
@ -106,16 +102,13 @@ impl Wallet {
|
|||||||
msg_key: self.msg_key.clone(),
|
msg_key: self.msg_key.clone(),
|
||||||
master_key: shares_str.get(0).unwrap().to_string(),
|
master_key: shares_str.get(0).unwrap().to_string(),
|
||||||
second_key: second_key,
|
second_key: second_key,
|
||||||
backup_key: backup_key
|
backup_key: backup_key,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_secret_key(&self) -> SecretKey {
|
fn get_secret_key(&self) -> SecretKey {
|
||||||
let key_str_0: &str = &self.master_key;
|
let key_str_0: &str = &self.master_key;
|
||||||
let key0 = BigInt::parse_bytes(
|
let key0 = BigInt::parse_bytes(&key_str_0.as_bytes(), 16).unwrap();
|
||||||
&key_str_0.as_bytes(),
|
|
||||||
16,
|
|
||||||
).unwrap();
|
|
||||||
let kp0: (usize, BigInt) = (1, key0);
|
let kp0: (usize, BigInt) = (1, key0);
|
||||||
let i: usize;
|
let i: usize;
|
||||||
let key_str_1: &str;
|
let key_str_1: &str;
|
||||||
@ -130,11 +123,7 @@ impl Wallet {
|
|||||||
i = 2;
|
i = 2;
|
||||||
key_str_1 = "";
|
key_str_1 = "";
|
||||||
}
|
}
|
||||||
let key1 = BigInt::parse_bytes(
|
let key1 = BigInt::parse_bytes(&key_str_1.as_bytes(), 16).unwrap();
|
||||||
&key_str_1.as_bytes(),
|
|
||||||
16,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
let kp1 = (i, key1);
|
let kp1 = (i, key1);
|
||||||
let _tmp = vec![kp0, kp1];
|
let _tmp = vec![kp0, kp1];
|
||||||
let sss = get_sss(&self.msg_key);
|
let sss = get_sss(&self.msg_key);
|
||||||
@ -151,7 +140,6 @@ impl Wallet {
|
|||||||
get_public_key(&s_key)
|
get_public_key(&s_key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn generate_sec_key(&self) -> String {
|
pub fn generate_sec_key(&self) -> String {
|
||||||
let secret_key = self.get_secret_key();
|
let secret_key = self.get_secret_key();
|
||||||
let s = hex::encode(&secret_key.secret_bytes());
|
let s = hex::encode(&secret_key.secret_bytes());
|
||||||
@ -199,4 +187,41 @@ impl Wallet {
|
|||||||
let recid = _recovery_id.to_i32();
|
let recid = _recovery_id.to_i32();
|
||||||
Ok((s, recid))
|
Ok((s, recid))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn zencrypt(&self, msg: &str) -> Result<String> {
|
||||||
|
let pk = self.get_public_key();
|
||||||
|
let pk = &pk.serialize();
|
||||||
|
let msg = msg.as_bytes();
|
||||||
|
println!("msg before encrypt: {:?}", msg);
|
||||||
|
let msg_encrypt = match encrypt(pk, &msg) {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(e) => panic!("error encrypt content: {}", e),
|
||||||
|
};
|
||||||
|
println!("msg after encrypt: {:?}", &msg_encrypt);
|
||||||
|
let str_encrypt = hex::encode(&msg_encrypt);
|
||||||
|
Ok(str_encrypt)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn zdecrypt(&self, msg: &str) -> Result<String> {
|
||||||
|
let sk = self.get_secret_key();
|
||||||
|
let sk = sk.secret_bytes();
|
||||||
|
let msg = match hex::decode(&msg) {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(e) => panic!("error decode hex str {}", e),
|
||||||
|
};
|
||||||
|
println!("msg to decrypt: {:?}", &msg);
|
||||||
|
let msg_decrypt = match decrypt(&sk, &msg) {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(e) => panic!("error decrypt content: {}", e),
|
||||||
|
};
|
||||||
|
println!("msg after decrypt: {:?}", &msg_decrypt);
|
||||||
|
// let msg_decrypt = hex::encode(msg_decrypt);
|
||||||
|
let str_decrypt = match str::from_utf8(&msg_decrypt) {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
|
||||||
|
};
|
||||||
|
let result = str_decrypt.to_string();
|
||||||
|
|
||||||
|
Ok(result)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user