feat(dubp): impl new dewif spec & add method getBip32DewifMnemonic
This commit is contained in:
parent
20b42742a4
commit
c11282d27c
|
@ -15,37 +15,6 @@ version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aes"
|
|
||||||
version = "0.6.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561"
|
|
||||||
dependencies = [
|
|
||||||
"aes-soft",
|
|
||||||
"aesni",
|
|
||||||
"cipher",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aes-soft"
|
|
||||||
version = "0.6.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072"
|
|
||||||
dependencies = [
|
|
||||||
"cipher",
|
|
||||||
"opaque-debug 0.3.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aesni"
|
|
||||||
version = "0.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce"
|
|
||||||
dependencies = [
|
|
||||||
"cipher",
|
|
||||||
"opaque-debug 0.3.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "allo-isolate"
|
name = "allo-isolate"
|
||||||
version = "0.1.7"
|
version = "0.1.7"
|
||||||
|
@ -280,15 +249,6 @@ dependencies = [
|
||||||
"envmnt",
|
"envmnt",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cipher"
|
|
||||||
version = "0.2.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.14.4",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clang"
|
name = "clang"
|
||||||
version = "0.24.0"
|
version = "0.24.0"
|
||||||
|
@ -405,28 +365,34 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dubp"
|
name = "dubp"
|
||||||
version = "0.50.0"
|
version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1669c61ccfe0d3fc7be8fe3175ebd401b9c879f638425f31e92777c73b32ea86"
|
checksum = "5649c2ed6d55ce1dda5c2ef3af34f5c669c4f8882c81a5d9a395c044c8d001fe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dubp-common",
|
"dubp-common",
|
||||||
"dubp-documents",
|
"dubp-documents",
|
||||||
"dubp-documents-parser",
|
"dubp-documents-parser",
|
||||||
"dubp-wallet",
|
"dubp-wallet",
|
||||||
"dup-crypto 0.50.0",
|
"dup-crypto",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dubp-client"
|
name = "dubp-client"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.duniter.org/libs/dubp-rs-client-lib?branch=master#a690f9b1bb029495c6aaf957c31d528dd282b49c"
|
source = "git+https://git.duniter.org/libs/dubp-rs-client-lib?branch=master#13ea957330fcb5507d544c9ce4d61902c731a059"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"arrayvec",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
"cfg-if 1.0.0",
|
||||||
"dubp",
|
"dubp",
|
||||||
"duniter-bca-types",
|
"duniter-bca-types",
|
||||||
|
"fast-threadpool 0.3.1-alpha.0",
|
||||||
|
"flume",
|
||||||
"graphql_client",
|
"graphql_client",
|
||||||
"maybe-async",
|
"maybe-async",
|
||||||
|
"rand",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
|
"resiter",
|
||||||
"serde",
|
"serde",
|
||||||
"static_assertions",
|
"static_assertions",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
@ -434,11 +400,11 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dubp-common"
|
name = "dubp-common"
|
||||||
version = "0.50.0"
|
version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "515fb09166a50b4543a99c42359fc4afa5a4c7af118c6f9627575c2760f3fef8"
|
checksum = "af754efaf281211ef4253f9a833adf9064ef95c594f1acb86bee37202d23104b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dup-crypto 0.50.0",
|
"dup-crypto",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
@ -447,9 +413,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dubp-documents"
|
name = "dubp-documents"
|
||||||
version = "0.50.0"
|
version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ccc9327c62778ee4fd060c0efbe32c6cfda5e317c4a2eb4ddee8293fbd278904"
|
checksum = "0ea7da99c4b73abafa67362741f0271b41e987f33c566daa794fb3aa78adbe55"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"beef",
|
"beef",
|
||||||
"dubp-wallet",
|
"dubp-wallet",
|
||||||
|
@ -461,9 +427,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dubp-documents-parser"
|
name = "dubp-documents-parser"
|
||||||
version = "0.50.0"
|
version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "271ce4a6bebfdfdaefb0e51f57c9bb04976fce5fbe2744dd60c1dcf857c60c20"
|
checksum = "c31fa6ba34a4f0e86e2fe2ac4d1c9e9ff6e36bdcfef64e78279b9a05297bd069"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dubp-documents",
|
"dubp-documents",
|
||||||
"json-pest-parser",
|
"json-pest-parser",
|
||||||
|
@ -475,9 +441,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dubp-wallet"
|
name = "dubp-wallet"
|
||||||
version = "0.50.0"
|
version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f6e65a121fa6745038e903ed3d1eb6a97f9658c6c6e2bfbf7e9ffdaf34161d23"
|
checksum = "34ff32a5d34243b2e435f1a7d3b0930fedf2396da07ca2ef6ba51aac1debb0ad"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"dubp-common",
|
"dubp-common",
|
||||||
|
@ -496,8 +462,7 @@ dependencies = [
|
||||||
"cbindgen",
|
"cbindgen",
|
||||||
"dart-bindgen",
|
"dart-bindgen",
|
||||||
"dubp-client",
|
"dubp-client",
|
||||||
"dup-crypto 0.46.0",
|
"fast-threadpool 0.3.0",
|
||||||
"fast-threadpool",
|
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"rusty-hook",
|
"rusty-hook",
|
||||||
|
@ -507,7 +472,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "duniter-bca-types"
|
name = "duniter-bca-types"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.duniter.org/nodes/typescript/duniter?branch=dev#591f334185151a200a7dbb06b32ff434a19b0885"
|
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#d602fca862972b0ecc6639033e67720a268ce9d7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
@ -519,34 +484,10 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dup-crypto"
|
name = "dup-crypto"
|
||||||
version = "0.46.0"
|
version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "97b1ebfa9edbb53cd4434f01877fcd74fb2416b93a217754d2daecbeecad67eb"
|
checksum = "d66627bb4c014d390a345230745931e2144cc10f3dc16989399dde85510a6543"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes",
|
|
||||||
"arrayvec",
|
|
||||||
"base64",
|
|
||||||
"blake3",
|
|
||||||
"bs58",
|
|
||||||
"byteorder",
|
|
||||||
"cryptoxide",
|
|
||||||
"ed25519-bip32",
|
|
||||||
"getrandom",
|
|
||||||
"once_cell",
|
|
||||||
"ring",
|
|
||||||
"serde",
|
|
||||||
"thiserror",
|
|
||||||
"zerocopy",
|
|
||||||
"zeroize",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "dup-crypto"
|
|
||||||
version = "0.50.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3032421000ca2cdd372bd72f4c548be7f1386d357abb0936291890064d3072e8"
|
|
||||||
dependencies = [
|
|
||||||
"aes",
|
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"base64",
|
"base64",
|
||||||
"blake3",
|
"blake3",
|
||||||
|
@ -555,6 +496,7 @@ dependencies = [
|
||||||
"cryptoxide",
|
"cryptoxide",
|
||||||
"ed25519-bip32",
|
"ed25519-bip32",
|
||||||
"getrandom",
|
"getrandom",
|
||||||
|
"hex",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"ring",
|
"ring",
|
||||||
"serde",
|
"serde",
|
||||||
|
@ -636,6 +578,16 @@ dependencies = [
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fast-threadpool"
|
||||||
|
version = "0.3.1-alpha.0"
|
||||||
|
source = "git+https://github.com/librelois/fast-threadpool?branch=main#1a271710677ecc43cbfe43234ec21c954dfdbef7"
|
||||||
|
dependencies = [
|
||||||
|
"async-oneshot",
|
||||||
|
"flume",
|
||||||
|
"num_cpus",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "flate2"
|
name = "flate2"
|
||||||
version = "1.0.20"
|
version = "1.0.20"
|
||||||
|
@ -654,6 +606,10 @@ version = "0.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0362ef9c4c1fa854ff95b4cb78045a86e810d804dc04937961988b45427104a9"
|
checksum = "0362ef9c4c1fa854ff95b4cb78045a86e810d804dc04937961988b45427104a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"nanorand",
|
||||||
|
"pin-project",
|
||||||
"spinning_top",
|
"spinning_top",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -783,8 +739,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
|
checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
|
"js-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"wasi",
|
"wasi",
|
||||||
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -903,6 +861,12 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hex"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "http"
|
name = "http"
|
||||||
version = "0.2.3"
|
version = "0.2.3"
|
||||||
|
@ -1136,6 +1100,15 @@ dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nanorand"
|
||||||
|
version = "0.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ac1378b66f7c93a1c0f8464a19bf47df8795083842e5090f4b7305973d5a22d0"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nias"
|
name = "nias"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
|
@ -1179,12 +1152,6 @@ version = "0.2.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
|
checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "opaque-debug"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot"
|
name = "parking_lot"
|
||||||
version = "0.11.1"
|
version = "0.11.1"
|
||||||
|
@ -1423,6 +1390,12 @@ dependencies = [
|
||||||
"winreg",
|
"winreg",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "resiter"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bd69ab1e90258b7769f0b5c46bfd802b8206d0707ced4ca4b9d5681b744de1be"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ring"
|
name = "ring"
|
||||||
version = "0.16.20"
|
version = "0.16.20"
|
||||||
|
@ -1543,7 +1516,7 @@ dependencies = [
|
||||||
"block-buffer",
|
"block-buffer",
|
||||||
"digest 0.8.1",
|
"digest 0.8.1",
|
||||||
"fake-simd",
|
"fake-simd",
|
||||||
"opaque-debug 0.2.3",
|
"opaque-debug",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -13,7 +13,6 @@ crate-type = ["rlib"]
|
||||||
allo-isolate = "0.1.6"
|
allo-isolate = "0.1.6"
|
||||||
dubp-client = { git = "https://git.duniter.org/libs/dubp-rs-client-lib", branch = "master", features = ["blocking"], default-features = false }
|
dubp-client = { git = "https://git.duniter.org/libs/dubp-rs-client-lib", branch = "master", features = ["blocking"], default-features = false }
|
||||||
#dubp-client= { path = "../dubp-rs-client-lib", features = ["blocking"], default-features = false }
|
#dubp-client= { path = "../dubp-rs-client-lib", features = ["blocking"], default-features = false }
|
||||||
dup-crypto = { version = "0.46.0", features = ["bip32-ed25519", "dewif", "mnemonic", "mnemonic_french", "scrypt"] }
|
|
||||||
fast-threadpool = { version = "0.3.0", default-features = false }
|
fast-threadpool = { version = "0.3.0", default-features = false }
|
||||||
once_cell = { version = "1.3.1", default-features = false, features = ["std"] }
|
once_cell = { version = "1.3.1", default-features = false, features = ["std"] }
|
||||||
parking_lot = "0.11.1"
|
parking_lot = "0.11.1"
|
||||||
|
|
|
@ -49,20 +49,12 @@ pub(super) fn gen_dewif(
|
||||||
let currency = parse_currency(currency)?;
|
let currency = parse_currency(currency)?;
|
||||||
let mnemonic =
|
let mnemonic =
|
||||||
Mnemonic::from_phrase(mnemonic, language).map_err(|_| DubpError::WrongLanguage)?;
|
Mnemonic::from_phrase(mnemonic, language).map_err(|_| DubpError::WrongLanguage)?;
|
||||||
let seed = dubp_client::crypto::mnemonic::mnemonic_to_seed(&mnemonic);
|
|
||||||
|
|
||||||
let log_n = log_n(system_memory);
|
let log_n = log_n(system_memory);
|
||||||
let secret_code = gen_secret_code(member_wallet, secret_code_type, log_n)?;
|
let secret_code = gen_secret_code(member_wallet, secret_code_type, log_n)?;
|
||||||
|
|
||||||
let keypair = dubp_client::crypto::keys::ed25519::bip32::KeyPair::from_seed(seed.clone());
|
let dewif =
|
||||||
let pubkey = keypair.public_key();
|
dubp_client::crypto::dewif::create_dewif_v1(currency, log_n, &mnemonic, &secret_code);
|
||||||
let dewif = dubp_client::crypto::dewif::write_dewif_v4_content(
|
|
||||||
currency,
|
|
||||||
log_n,
|
|
||||||
&secret_code,
|
|
||||||
&pubkey,
|
|
||||||
seed,
|
|
||||||
);
|
|
||||||
|
|
||||||
Ok(vec![dewif, secret_code])
|
Ok(vec![dewif, secret_code])
|
||||||
}
|
}
|
||||||
|
@ -73,6 +65,7 @@ pub(super) fn get_dewif_meta(
|
||||||
secret_code_type: SecretCodeType,
|
secret_code_type: SecretCodeType,
|
||||||
) -> Result<Vec<String>, DubpError> {
|
) -> Result<Vec<String>, DubpError> {
|
||||||
let dubp_client::crypto::dewif::DewifMeta {
|
let dubp_client::crypto::dewif::DewifMeta {
|
||||||
|
algo,
|
||||||
currency,
|
currency,
|
||||||
log_n,
|
log_n,
|
||||||
version,
|
version,
|
||||||
|
@ -82,6 +75,11 @@ pub(super) fn get_dewif_meta(
|
||||||
crate::secret_code::compute_secret_code_len(member_wallet, secret_code_type, log_n)?;
|
crate::secret_code::compute_secret_code_len(member_wallet, secret_code_type, log_n)?;
|
||||||
|
|
||||||
Ok(vec![
|
Ok(vec![
|
||||||
|
if algo == KeysAlgo::Bip32Ed25519 {
|
||||||
|
"Bip32Ed25519".to_owned()
|
||||||
|
} else {
|
||||||
|
"Ed25519".to_owned()
|
||||||
|
},
|
||||||
currency.to_string(),
|
currency.to_string(),
|
||||||
secret_code_len.to_string(),
|
secret_code_len.to_string(),
|
||||||
version.to_string(),
|
version.to_string(),
|
||||||
|
@ -106,18 +104,16 @@ pub(super) fn get_pubkey(
|
||||||
secret_code,
|
secret_code,
|
||||||
)
|
)
|
||||||
} else if address_index_opt.is_none() && external_opt.is_none() {
|
} else if address_index_opt.is_none() && external_opt.is_none() {
|
||||||
let mut keypairs = dubp_client::crypto::dewif::read_dewif_file_content(
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
ExpectedCurrency::Specific(currency),
|
ExpectedCurrency::Specific(currency),
|
||||||
dewif,
|
dewif,
|
||||||
&secret_code.to_ascii_uppercase(),
|
&secret_code.to_ascii_uppercase(),
|
||||||
)
|
)
|
||||||
.map_err(DubpError::DewifReadError)?;
|
.map_err(DubpError::DewifReadError)?;
|
||||||
|
|
||||||
match keypairs.next() {
|
match payload {
|
||||||
Some(KeyPairEnum::Ed25519(keypair)) => Ok(keypair.public_key().to_base58()),
|
DewifPayload::Ed25519(keypair) => Ok(keypair.public_key().to_base58()),
|
||||||
Some(KeyPairEnum::Bip32Ed25519(_)) => Err(DubpError::GetMasterPubkeyOfHdWallet),
|
DewifPayload::Bip32Ed25519(_) => Err(DubpError::GetMasterPubkeyOfHdWallet),
|
||||||
Some(_) => Err(DubpError::UnsupportedDewifVersion),
|
|
||||||
None => Err(DubpError::DewifReadError(DewifReadError::CorruptedContent)),
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Err(DubpError::GiveExternalBoolOrAddressIndexForLegacyWallet)
|
Err(DubpError::GiveExternalBoolOrAddressIndexForLegacyWallet)
|
||||||
|
@ -136,11 +132,7 @@ pub(super) fn get_secret_code_len(
|
||||||
let log_n = dubp_client::crypto::dewif::read_dewif_log_n(ExpectedCurrency::Any, dewif)
|
let log_n = dubp_client::crypto::dewif::read_dewif_log_n(ExpectedCurrency::Any, dewif)
|
||||||
.map_err(DubpError::DewifReadError)?;
|
.map_err(DubpError::DewifReadError)?;
|
||||||
|
|
||||||
Ok(crate::secret_code::compute_secret_code_len(
|
crate::secret_code::compute_secret_code_len(member_wallet, secret_code_type, log_n)
|
||||||
member_wallet,
|
|
||||||
secret_code_type,
|
|
||||||
log_n,
|
|
||||||
)?)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn log_n(system_memory: i64) -> u8 {
|
pub(crate) fn log_n(system_memory: i64) -> u8 {
|
||||||
|
|
|
@ -34,22 +34,24 @@ pub(crate) fn get_accounts_pubkeys(
|
||||||
if accounts_indexs.contains(&U31::new(0)?) {
|
if accounts_indexs.contains(&U31::new(0)?) {
|
||||||
verify_member_secret_code(currency, dewif, secret_code)?;
|
verify_member_secret_code(currency, dewif, secret_code)?;
|
||||||
}
|
}
|
||||||
let mut keypairs = dubp_client::crypto::dewif::read_dewif_file_content(
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
ExpectedCurrency::Specific(currency),
|
ExpectedCurrency::Specific(currency),
|
||||||
dewif,
|
dewif,
|
||||||
&secret_code.to_ascii_uppercase(),
|
&secret_code.to_ascii_uppercase(),
|
||||||
)
|
)
|
||||||
.map_err(DubpError::DewifReadError)?;
|
.map_err(DubpError::DewifReadError)?;
|
||||||
match keypairs.next() {
|
match payload {
|
||||||
Some(KeyPairEnum::Bip32Ed25519(master_keypair)) => Ok(accounts_indexs
|
DewifPayload::Bip32Ed25519(mnemonic) => {
|
||||||
|
let master_keypair = KeyPair::from_mnemonic(&mnemonic);
|
||||||
|
Ok(accounts_indexs
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|account_index| {
|
.map(|account_index| {
|
||||||
PrivateDerivationPath::transparent(account_index)
|
PrivateDerivationPath::transparent(account_index)
|
||||||
.map(|path| master_keypair.derive(path).public_key().to_base58())
|
.map(|path| master_keypair.derive(path).public_key().to_base58())
|
||||||
})
|
})
|
||||||
.collect::<Result<Vec<_>, InvalidAccountIndex>>()?),
|
.collect::<Result<Vec<_>, InvalidAccountIndex>>()?)
|
||||||
Some(_) => Err(DubpError::NotHdWallet),
|
}
|
||||||
None => Err(DubpError::DewifReadError(DewifReadError::CorruptedContent)),
|
_ => Err(DubpError::NotHdWallet),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +63,7 @@ pub(crate) fn get_bip32_keypair(
|
||||||
external_opt: Option<bool>,
|
external_opt: Option<bool>,
|
||||||
secret_code: &str,
|
secret_code: &str,
|
||||||
) -> Result<KeyPairEnum, DubpError> {
|
) -> Result<KeyPairEnum, DubpError> {
|
||||||
let mut keypairs = dubp_client::crypto::dewif::read_dewif_file_content(
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
ExpectedCurrency::Specific(currency),
|
ExpectedCurrency::Specific(currency),
|
||||||
dewif,
|
dewif,
|
||||||
&secret_code.to_ascii_uppercase(),
|
&secret_code.to_ascii_uppercase(),
|
||||||
|
@ -72,14 +74,14 @@ pub(crate) fn get_bip32_keypair(
|
||||||
verify_member_secret_code(currency, dewif, secret_code)?;
|
verify_member_secret_code(currency, dewif, secret_code)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
match keypairs.next() {
|
match payload {
|
||||||
Some(KeyPairEnum::Bip32Ed25519(master_keypair)) => {
|
DewifPayload::Bip32Ed25519(mnemonic) => {
|
||||||
|
let master_keypair = KeyPair::from_mnemonic(&mnemonic);
|
||||||
Ok(KeyPairEnum::Bip32Ed25519(master_keypair.derive(
|
Ok(KeyPairEnum::Bip32Ed25519(master_keypair.derive(
|
||||||
z_get_derivation_path(account_index, address_index_opt, external_opt)?,
|
z_get_derivation_path(account_index, address_index_opt, external_opt)?,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
Some(_) => Err(DubpError::NotHdWallet),
|
_ => Err(DubpError::NotHdWallet),
|
||||||
None => Err(DubpError::DewifReadError(DewifReadError::CorruptedContent)),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +93,7 @@ pub(crate) fn get_bip32_pubkey(
|
||||||
external_opt: Option<bool>,
|
external_opt: Option<bool>,
|
||||||
secret_code: &str,
|
secret_code: &str,
|
||||||
) -> Result<String, DubpError> {
|
) -> Result<String, DubpError> {
|
||||||
let mut keypairs = dubp_client::crypto::dewif::read_dewif_file_content(
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
ExpectedCurrency::Specific(currency),
|
ExpectedCurrency::Specific(currency),
|
||||||
dewif,
|
dewif,
|
||||||
&secret_code.to_ascii_uppercase(),
|
&secret_code.to_ascii_uppercase(),
|
||||||
|
@ -102,17 +104,19 @@ pub(crate) fn get_bip32_pubkey(
|
||||||
verify_member_secret_code(currency, dewif, secret_code)?;
|
verify_member_secret_code(currency, dewif, secret_code)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
match keypairs.next() {
|
match payload {
|
||||||
Some(KeyPairEnum::Bip32Ed25519(master_keypair)) => Ok(master_keypair
|
DewifPayload::Bip32Ed25519(mnemonic) => {
|
||||||
|
let master_keypair = KeyPair::from_mnemonic(&mnemonic);
|
||||||
|
Ok(master_keypair
|
||||||
.derive(z_get_derivation_path(
|
.derive(z_get_derivation_path(
|
||||||
account_index,
|
account_index,
|
||||||
address_index_opt,
|
address_index_opt,
|
||||||
external_opt,
|
external_opt,
|
||||||
)?)
|
)?)
|
||||||
.public_key()
|
.public_key()
|
||||||
.to_base58()),
|
.to_base58())
|
||||||
Some(_) => Err(DubpError::NotHdWallet),
|
}
|
||||||
None => Err(DubpError::DewifReadError(DewifReadError::CorruptedContent)),
|
_ => Err(DubpError::NotHdWallet),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,20 +141,39 @@ pub(crate) fn get_opaque_account_next_external_address(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn get_mnemonic(
|
||||||
|
currency: Currency,
|
||||||
|
dewif: &str,
|
||||||
|
secret_code: &str,
|
||||||
|
) -> Result<String, DubpError> {
|
||||||
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
|
ExpectedCurrency::Specific(currency),
|
||||||
|
dewif,
|
||||||
|
&secret_code.to_ascii_uppercase(),
|
||||||
|
)
|
||||||
|
.map_err(DubpError::DewifReadError)?;
|
||||||
|
|
||||||
|
match payload {
|
||||||
|
DewifPayload::Bip32Ed25519(mnemonic) => Ok(mnemonic.phrase().to_owned()),
|
||||||
|
_ => Err(DubpError::NotHdWallet),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn load_opaque_bip32_accounts(
|
pub(crate) fn load_opaque_bip32_accounts(
|
||||||
accounts_indexs: Vec<U31>,
|
accounts_indexs: Vec<U31>,
|
||||||
currency: Currency,
|
currency: Currency,
|
||||||
dewif: &str,
|
dewif: &str,
|
||||||
secret_code: &str,
|
secret_code: &str,
|
||||||
) -> Result<(), DubpError> {
|
) -> Result<(), DubpError> {
|
||||||
let mut keypairs = dubp_client::crypto::dewif::read_dewif_file_content(
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
ExpectedCurrency::Specific(currency),
|
ExpectedCurrency::Specific(currency),
|
||||||
dewif,
|
dewif,
|
||||||
&secret_code.to_ascii_uppercase(),
|
&secret_code.to_ascii_uppercase(),
|
||||||
)
|
)
|
||||||
.map_err(DubpError::DewifReadError)?;
|
.map_err(DubpError::DewifReadError)?;
|
||||||
match keypairs.next() {
|
match payload {
|
||||||
Some(KeyPairEnum::Bip32Ed25519(master_keypair)) => {
|
DewifPayload::Bip32Ed25519(mnemonic) => {
|
||||||
|
let master_keypair = KeyPair::from_mnemonic(&mnemonic);
|
||||||
for account_index in accounts_indexs {
|
for account_index in accounts_indexs {
|
||||||
let external_path = PrivateDerivationPath::opaque(account_index, true, None)?;
|
let external_path = PrivateDerivationPath::opaque(account_index, true, None)?;
|
||||||
let external_kp = master_keypair.derive(external_path);
|
let external_kp = master_keypair.derive(external_path);
|
||||||
|
@ -165,8 +188,7 @@ pub(crate) fn load_opaque_bip32_accounts(
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
Some(_) => Err(DubpError::NotHdWallet),
|
_ => Err(DubpError::NotHdWallet),
|
||||||
None => Err(DubpError::DewifReadError(DewifReadError::CorruptedContent)),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +201,7 @@ pub(crate) fn sign_bip32(
|
||||||
secret_code: &str,
|
secret_code: &str,
|
||||||
msg: &str,
|
msg: &str,
|
||||||
) -> Result<String, DubpError> {
|
) -> Result<String, DubpError> {
|
||||||
let mut keypairs = dubp_client::crypto::dewif::read_dewif_file_content(
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
ExpectedCurrency::Specific(currency),
|
ExpectedCurrency::Specific(currency),
|
||||||
dewif,
|
dewif,
|
||||||
&secret_code.to_ascii_uppercase(),
|
&secret_code.to_ascii_uppercase(),
|
||||||
|
@ -190,16 +212,18 @@ pub(crate) fn sign_bip32(
|
||||||
verify_member_secret_code(currency, dewif, secret_code)?;
|
verify_member_secret_code(currency, dewif, secret_code)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
match keypairs.next() {
|
match payload {
|
||||||
Some(KeyPairEnum::Bip32Ed25519(master_keypair)) => sign_bip32_inner(
|
DewifPayload::Bip32Ed25519(mnemonic) => {
|
||||||
|
let master_keypair = KeyPair::from_mnemonic(&mnemonic);
|
||||||
|
sign_bip32_inner(
|
||||||
account_index,
|
account_index,
|
||||||
address_index_opt,
|
address_index_opt,
|
||||||
external_opt,
|
external_opt,
|
||||||
master_keypair,
|
master_keypair,
|
||||||
msg,
|
msg,
|
||||||
),
|
)
|
||||||
Some(_) => Err(DubpError::NotHdWallet),
|
}
|
||||||
None => Err(DubpError::DewifReadError(DewifReadError::CorruptedContent)),
|
_ => Err(DubpError::NotHdWallet),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,7 +236,7 @@ pub(crate) fn sign_several_bip32(
|
||||||
secret_code: &str,
|
secret_code: &str,
|
||||||
msgs: &[&str],
|
msgs: &[&str],
|
||||||
) -> Result<Vec<String>, DubpError> {
|
) -> Result<Vec<String>, DubpError> {
|
||||||
let mut keypairs = dubp_client::crypto::dewif::read_dewif_file_content(
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
ExpectedCurrency::Specific(currency),
|
ExpectedCurrency::Specific(currency),
|
||||||
dewif,
|
dewif,
|
||||||
&secret_code.to_ascii_uppercase(),
|
&secret_code.to_ascii_uppercase(),
|
||||||
|
@ -223,16 +247,18 @@ pub(crate) fn sign_several_bip32(
|
||||||
verify_member_secret_code(currency, dewif, secret_code)?;
|
verify_member_secret_code(currency, dewif, secret_code)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
match keypairs.next() {
|
match payload {
|
||||||
Some(KeyPairEnum::Bip32Ed25519(master_keypair)) => sign_several_bip32_inner(
|
DewifPayload::Bip32Ed25519(mnemonic) => {
|
||||||
|
let master_keypair = KeyPair::from_mnemonic(&mnemonic);
|
||||||
|
sign_several_bip32_inner(
|
||||||
account_index,
|
account_index,
|
||||||
address_index_opt,
|
address_index_opt,
|
||||||
external_opt,
|
external_opt,
|
||||||
master_keypair,
|
master_keypair,
|
||||||
msgs,
|
msgs,
|
||||||
),
|
)
|
||||||
Some(_) => Err(DubpError::NotHdWallet),
|
}
|
||||||
None => Err(DubpError::DewifReadError(DewifReadError::CorruptedContent)),
|
_ => Err(DubpError::NotHdWallet),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,13 +21,13 @@ pub(crate) fn sign(
|
||||||
secret_code: &str,
|
secret_code: &str,
|
||||||
msg: &str,
|
msg: &str,
|
||||||
) -> Result<String, DubpError> {
|
) -> Result<String, DubpError> {
|
||||||
let mut keypairs = dubp_client::crypto::dewif::read_dewif_file_content(
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
ExpectedCurrency::Specific(currency),
|
ExpectedCurrency::Specific(currency),
|
||||||
dewif,
|
dewif,
|
||||||
&secret_code.to_ascii_uppercase(),
|
&secret_code.to_ascii_uppercase(),
|
||||||
)
|
)
|
||||||
.map_err(DubpError::DewifReadError)?;
|
.map_err(DubpError::DewifReadError)?;
|
||||||
if let Some(KeyPairEnum::Ed25519(keypair)) = keypairs.next() {
|
if let DewifPayload::Ed25519(keypair) = payload {
|
||||||
Ok(keypair.generate_signator().sign(msg.as_bytes()).to_base64())
|
Ok(keypair.generate_signator().sign(msg.as_bytes()).to_base64())
|
||||||
} else {
|
} else {
|
||||||
Err(DubpError::DewifReadError(DewifReadError::CorruptedContent))
|
Err(DubpError::DewifReadError(DewifReadError::CorruptedContent))
|
||||||
|
@ -40,13 +40,13 @@ pub(crate) fn sign_several(
|
||||||
secret_code: &str,
|
secret_code: &str,
|
||||||
msgs: &[&str],
|
msgs: &[&str],
|
||||||
) -> Result<Vec<String>, DubpError> {
|
) -> Result<Vec<String>, DubpError> {
|
||||||
let mut keypairs = dubp_client::crypto::dewif::read_dewif_file_content(
|
let DewifContent { payload, .. } = dubp_client::crypto::dewif::read_dewif_file_content(
|
||||||
ExpectedCurrency::Specific(currency),
|
ExpectedCurrency::Specific(currency),
|
||||||
dewif,
|
dewif,
|
||||||
&secret_code.to_ascii_uppercase(),
|
&secret_code.to_ascii_uppercase(),
|
||||||
)
|
)
|
||||||
.map_err(DubpError::DewifReadError)?;
|
.map_err(DubpError::DewifReadError)?;
|
||||||
if let Some(KeyPairEnum::Ed25519(keypair)) = keypairs.next() {
|
if let DewifPayload::Ed25519(keypair) = payload {
|
||||||
let signator = keypair.generate_signator();
|
let signator = keypair.generate_signator();
|
||||||
Ok(msgs
|
Ok(msgs
|
||||||
.iter()
|
.iter()
|
||||||
|
|
|
@ -63,8 +63,8 @@ pub(crate) enum DubpError {
|
||||||
UnknownCurrencyName,
|
UnknownCurrencyName,
|
||||||
#[error("Unknown language")]
|
#[error("Unknown language")]
|
||||||
UnknownLanguage,
|
UnknownLanguage,
|
||||||
#[error("Unsupported DEWIF version")]
|
//#[error("Unsupported DEWIF version")]
|
||||||
UnsupportedDewifVersion,
|
//UnsupportedDewifVersion,
|
||||||
#[error("{0}")]
|
#[error("{0}")]
|
||||||
Utf8Error(std::str::Utf8Error),
|
Utf8Error(std::str::Utf8Error),
|
||||||
#[error("Wrong language")]
|
#[error("Wrong language")]
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
use crate::*;
|
use crate::*;
|
||||||
use dubp_client::crypto::keys::ed25519::{KeyPairFromSaltedPasswordGenerator, SaltedPassword};
|
use dubp_client::crypto::keys::ed25519::{KeyPairFromSaltedPasswordGenerator, SaltedPassword};
|
||||||
|
|
||||||
|
#[allow(deprecated)]
|
||||||
pub(super) fn gen_dewif_from_legacy(
|
pub(super) fn gen_dewif_from_legacy(
|
||||||
currency: &str,
|
currency: &str,
|
||||||
salt: String,
|
salt: String,
|
||||||
|
@ -26,12 +27,17 @@ pub(super) fn gen_dewif_from_legacy(
|
||||||
) -> Result<Vec<String>, DubpError> {
|
) -> Result<Vec<String>, DubpError> {
|
||||||
let currency = parse_currency(currency)?;
|
let currency = parse_currency(currency)?;
|
||||||
let keypair = KeyPairFromSaltedPasswordGenerator::with_default_parameters()
|
let keypair = KeyPairFromSaltedPasswordGenerator::with_default_parameters()
|
||||||
.generate(SaltedPassword::new(salt, password));
|
.generate(SaltedPassword::new(salt.clone(), password.clone()));
|
||||||
|
|
||||||
let log_n = crate::dewif::log_n(system_memory);
|
let log_n = crate::dewif::log_n(system_memory);
|
||||||
let secret_code = gen_secret_code(member_wallet, secret_code_type, log_n)?;
|
let secret_code = gen_secret_code(member_wallet, secret_code_type, log_n)?;
|
||||||
let dewif =
|
let dewif = dubp_client::crypto::dewif::create_dewif_v1_legacy(
|
||||||
dubp_client::crypto::dewif::write_dewif_v3_content(currency, &keypair, log_n, &secret_code);
|
currency,
|
||||||
|
log_n,
|
||||||
|
password,
|
||||||
|
salt,
|
||||||
|
&secret_code,
|
||||||
|
);
|
||||||
let pubkey = keypair.public_key().to_base58();
|
let pubkey = keypair.public_key().to_base58();
|
||||||
Ok(vec![dewif, secret_code, pubkey])
|
Ok(vec![dewif, secret_code, pubkey])
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,13 +32,16 @@ use crate::secret_code::gen_secret_code;
|
||||||
use allo_isolate::{IntoDart, Isolate};
|
use allo_isolate::{IntoDart, Isolate};
|
||||||
use dubp_client::crypto::{
|
use dubp_client::crypto::{
|
||||||
bases::b58::ToBase58,
|
bases::b58::ToBase58,
|
||||||
dewif::{Currency, DewifReadError, ExpectedCurrency, G1_CURRENCY, G1_TEST_CURRENCY},
|
dewif::{
|
||||||
|
Currency, DewifContent, DewifPayload, DewifReadError, ExpectedCurrency, G1_CURRENCY,
|
||||||
|
G1_TEST_CURRENCY,
|
||||||
|
},
|
||||||
keys::{
|
keys::{
|
||||||
ed25519::bip32::{
|
ed25519::bip32::{
|
||||||
ChainCode, InvalidAccountIndex, KeyPair, PrivateDerivationPath, PublicKeyWithChainCode,
|
ChainCode, InvalidAccountIndex, KeyPair, PrivateDerivationPath, PublicKeyWithChainCode,
|
||||||
},
|
},
|
||||||
ed25519::{KeyPairFromSeed32Generator, PublicKey, PublicKeyFromStrErr},
|
ed25519::{KeyPairFromSeed32Generator, PublicKey, PublicKeyFromStrErr},
|
||||||
KeyPair as _, KeyPairEnum, PublicKey as _, Signator as _, Signature as _,
|
KeyPair as _, KeyPairEnum, KeysAlgo, PublicKey as _, Signator as _, Signature as _,
|
||||||
},
|
},
|
||||||
mnemonic::{Language, Mnemonic, MnemonicType},
|
mnemonic::{Language, Mnemonic, MnemonicType},
|
||||||
utils::{U31Error, U31},
|
utils::{U31Error, U31},
|
||||||
|
@ -87,16 +90,12 @@ pub extern "C" fn change_dewif_secret_code(
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn check_pubkey(port: i64, pubkey: *const raw::c_char) {
|
pub extern "C" fn check_pubkey(port: i64, pubkey: *const raw::c_char) {
|
||||||
exec_async(port, || Ok(char_ptr_to_str(pubkey)?), pubkey::check_pubkey)
|
exec_async(port, || char_ptr_to_str(pubkey), pubkey::check_pubkey)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn compute_checksum(port: i64, pubkey: *const raw::c_char) {
|
pub extern "C" fn compute_checksum(port: i64, pubkey: *const raw::c_char) {
|
||||||
exec_async(
|
exec_async(port, || char_ptr_to_str(pubkey), pubkey::compute_checksum)
|
||||||
port,
|
|
||||||
|| Ok(char_ptr_to_str(pubkey)?),
|
|
||||||
pubkey::compute_checksum,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -208,6 +207,25 @@ pub extern "C" fn get_bip32_dewif_accounts_pubkeys(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn get_bip32_dewif_mnemonic(
|
||||||
|
port: i64,
|
||||||
|
currency: *const raw::c_char,
|
||||||
|
dewif: *const raw::c_char,
|
||||||
|
secret_code: *const raw::c_char,
|
||||||
|
) {
|
||||||
|
exec_async(
|
||||||
|
port,
|
||||||
|
|| {
|
||||||
|
let currency = parse_currency(char_ptr_to_str(currency)?)?;
|
||||||
|
let dewif = char_ptr_to_str(dewif)?;
|
||||||
|
let secret_code = char_ptr_to_str(secret_code)?;
|
||||||
|
Ok((currency, dewif, secret_code))
|
||||||
|
},
|
||||||
|
|(currency, dewif, secret_code)| dewif::bip32::get_mnemonic(currency, dewif, secret_code),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn get_dewif_meta(
|
pub extern "C" fn get_dewif_meta(
|
||||||
port: i64,
|
port: i64,
|
||||||
|
|
|
@ -232,6 +232,21 @@ class DubpRust {
|
||||||
return completer.future;
|
return completer.future;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get mnemonic phrase of `dewif` (algo Bip32-Ed25519 only).
|
||||||
|
static Future<List<String>> getBip32DewifMnemonic(
|
||||||
|
{String currency = "g1", String dewif, String secretCode}) async {
|
||||||
|
final completer = Completer<List<String>>();
|
||||||
|
final sendPort = singleCompletePort<List<String>, List>(completer,
|
||||||
|
callback: _handleErrList);
|
||||||
|
native.get_bip32_dewif_mnemonic(
|
||||||
|
sendPort.nativePort,
|
||||||
|
StringUtf8Pointer(currency).toNativeUtf8(),
|
||||||
|
StringUtf8Pointer(dewif).toNativeUtf8(),
|
||||||
|
StringUtf8Pointer(secretCode).toNativeUtf8(),
|
||||||
|
);
|
||||||
|
return completer.future;
|
||||||
|
}
|
||||||
|
|
||||||
/// Get `dewif` keypair meta data.
|
/// Get `dewif` keypair meta data.
|
||||||
static Future<DewifMetaData> getDewifMetaData(
|
static Future<DewifMetaData> getDewifMetaData(
|
||||||
{String dewif,
|
{String dewif,
|
||||||
|
|
Loading…
Reference in New Issue