add method for scrypt hash
This commit is contained in:
parent
8dac55ab0e
commit
5e4f502b37
155
Cargo.lock
generated
155
Cargo.lock
generated
@ -9,7 +9,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8"
|
||||
dependencies = [
|
||||
"crypto-common",
|
||||
"generic-array",
|
||||
"generic-array 0.14.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -34,7 +34,7 @@ dependencies = [
|
||||
"cipher",
|
||||
"ctr",
|
||||
"ghash",
|
||||
"subtle",
|
||||
"subtle 2.4.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -123,13 +123,25 @@ dependencies = [
|
||||
"digest 0.10.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
|
||||
dependencies = [
|
||||
"block-padding",
|
||||
"byte-tools",
|
||||
"byteorder",
|
||||
"generic-array 0.12.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"generic-array 0.14.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -138,7 +150,16 @@ version = "0.10.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"generic-array 0.14.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "block-padding"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
|
||||
dependencies = [
|
||||
"byte-tools",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -153,6 +174,12 @@ version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87c5fdd0166095e1d463fc6cc01aa8ce547ad77a4e84d42eb6762b084e28067e"
|
||||
|
||||
[[package]]
|
||||
name = "byte-tools"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.4.3"
|
||||
@ -211,19 +238,29 @@ version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"generic-array 0.14.6",
|
||||
"rand_core 0.6.4",
|
||||
"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"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"subtle",
|
||||
"generic-array 0.14.6",
|
||||
"subtle 2.4.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -235,13 +272,22 @@ dependencies = [
|
||||
"cipher",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
|
||||
dependencies = [
|
||||
"generic-array 0.12.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"generic-array 0.14.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -252,7 +298,7 @@ checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
|
||||
dependencies = [
|
||||
"block-buffer 0.10.3",
|
||||
"crypto-common",
|
||||
"subtle",
|
||||
"subtle 2.4.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -270,6 +316,12 @@ dependencies = [
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fake-simd"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
|
||||
|
||||
[[package]]
|
||||
name = "fixed-hash"
|
||||
version = "0.8.0"
|
||||
@ -294,6 +346,15 @@ version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.12.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.14.6"
|
||||
@ -323,7 +384,7 @@ version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40"
|
||||
dependencies = [
|
||||
"opaque-debug",
|
||||
"opaque-debug 0.3.0",
|
||||
"polyval",
|
||||
]
|
||||
|
||||
@ -342,13 +403,23 @@ 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"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840"
|
||||
dependencies = [
|
||||
"crypto-mac",
|
||||
"crypto-mac 0.8.0",
|
||||
"digest 0.9.0",
|
||||
]
|
||||
|
||||
@ -368,7 +439,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1"
|
||||
dependencies = [
|
||||
"digest 0.9.0",
|
||||
"generic-array",
|
||||
"generic-array 0.14.6",
|
||||
"hmac 0.8.1",
|
||||
]
|
||||
|
||||
@ -398,7 +469,7 @@ version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"generic-array 0.14.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -449,7 +520,7 @@ checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451"
|
||||
dependencies = [
|
||||
"crunchy",
|
||||
"digest 0.9.0",
|
||||
"subtle",
|
||||
"subtle 2.4.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -516,6 +587,12 @@ version = "1.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
|
||||
|
||||
[[package]]
|
||||
name = "opaque-debug"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
|
||||
|
||||
[[package]]
|
||||
name = "opaque-debug"
|
||||
version = "0.3.0"
|
||||
@ -556,7 +633,17 @@ checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
|
||||
dependencies = [
|
||||
"base64ct",
|
||||
"rand_core 0.6.4",
|
||||
"subtle",
|
||||
"subtle 2.4.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pbkdf2"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"crypto-mac 0.7.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -567,7 +654,7 @@ checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures",
|
||||
"opaque-debug",
|
||||
"opaque-debug 0.3.0",
|
||||
"universal-hash",
|
||||
]
|
||||
|
||||
@ -708,6 +795,7 @@ dependencies = [
|
||||
"primitive-types",
|
||||
"qrcodegen",
|
||||
"rand 0.8.5",
|
||||
"scrypt",
|
||||
"secp256k1",
|
||||
"serde",
|
||||
"serde_json",
|
||||
@ -722,6 +810,19 @@ version = "1.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
|
||||
|
||||
[[package]]
|
||||
name = "scrypt"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "656c79d0e90d0ab28ac86bf3c3d10bfbbac91450d3f190113b4e76d9fec3cfdd"
|
||||
dependencies = [
|
||||
"byte-tools",
|
||||
"byteorder",
|
||||
"hmac 0.7.1",
|
||||
"pbkdf2",
|
||||
"sha2 0.8.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "secp256k1"
|
||||
version = "0.25.0"
|
||||
@ -773,6 +874,18 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sha2"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69"
|
||||
dependencies = [
|
||||
"block-buffer 0.7.3",
|
||||
"digest 0.8.1",
|
||||
"fake-simd",
|
||||
"opaque-debug 0.2.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sha2"
|
||||
version = "0.9.9"
|
||||
@ -783,7 +896,7 @@ dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures",
|
||||
"digest 0.9.0",
|
||||
"opaque-debug",
|
||||
"opaque-debug 0.3.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -814,6 +927,12 @@ version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
||||
|
||||
[[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"
|
||||
@ -906,7 +1025,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5"
|
||||
dependencies = [
|
||||
"crypto-common",
|
||||
"subtle",
|
||||
"subtle 2.4.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -32,6 +32,7 @@ base64 = "0.21.0"
|
||||
argon2 = { version = "0.5.0" }
|
||||
aes-gcm = "0.10.1"
|
||||
rand = "0.8.5"
|
||||
scrypt = { version = "0.2", default-features = false }
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
||||
|
@ -4,7 +4,9 @@
|
||||
// 测试钱包在C侧调用接口存储和重新读出钱包密钥
|
||||
//
|
||||
|
||||
use rustwallet::{generate_sec_key, sign, sign_for_tran, wdecrypt, wencrypt, wget_address};
|
||||
use rustwallet::{
|
||||
generate_scrypt_hash, generate_sec_key, sign, sign_for_tran, wdecrypt, wencrypt, wget_address,
|
||||
};
|
||||
|
||||
fn main() {
|
||||
let msg = "a0f2022d15fd8072f12c76cc1596c4f1";
|
||||
@ -12,40 +14,48 @@ fn main() {
|
||||
let key0 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2cd";
|
||||
let key1 = "";
|
||||
let key2 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5";
|
||||
let private_key = generate_sec_key(
|
||||
msg.to_string(),
|
||||
key0.to_string(),
|
||||
None,
|
||||
Some(key2.to_string()),
|
||||
);
|
||||
println!("private_key=> {}", private_key);
|
||||
// let private_key = generate_sec_key(
|
||||
// msg.to_string(),
|
||||
// key0.to_string(),
|
||||
// None,
|
||||
// Some(key2.to_string()),
|
||||
// );
|
||||
// println!("private_key=> {}", private_key);
|
||||
|
||||
let address2 = wget_address(
|
||||
msg.to_string(),
|
||||
key0.to_string(),
|
||||
None,
|
||||
Some(key2.to_string()),
|
||||
);
|
||||
// let address2 = wget_address(
|
||||
// msg.to_string(),
|
||||
// key0.to_string(),
|
||||
// None,
|
||||
// Some(key2.to_string()),
|
||||
// );
|
||||
|
||||
println!("address=> {}", address2);
|
||||
let message = "helloword";
|
||||
let msg_encrypt = wencrypt(
|
||||
msg.to_string(),
|
||||
key0.to_string(),
|
||||
None,
|
||||
Some(key2.to_string()),
|
||||
message.to_string(),
|
||||
);
|
||||
// println!("address=> {}", address2);
|
||||
// let message = "helloword";
|
||||
// let msg_encrypt = wencrypt(
|
||||
// msg.to_string(),
|
||||
// key0.to_string(),
|
||||
// None,
|
||||
// Some(key2.to_string()),
|
||||
// message.to_string(),
|
||||
// );
|
||||
|
||||
println!("msg_encrypt=> {}", msg_encrypt);
|
||||
// println!("msg_encrypt=> {}", msg_encrypt);
|
||||
|
||||
let msg_decrypt = wdecrypt(
|
||||
msg.to_string(),
|
||||
key0.to_string(),
|
||||
None,
|
||||
Some(key2.to_string()),
|
||||
msg_encrypt,
|
||||
);
|
||||
// let msg_decrypt = wdecrypt(
|
||||
// msg.to_string(),
|
||||
// key0.to_string(),
|
||||
// None,
|
||||
// Some(key2.to_string()),
|
||||
// msg_encrypt,
|
||||
// );
|
||||
|
||||
println!("msg_decrypt=> {}", msg_decrypt);
|
||||
// println!("msg_decrypt=> {}", msg_decrypt);
|
||||
let pass = "111111";
|
||||
let salt = "9ded475b6bf63ee9c0150b127f6c093600e952da79ba848d6f4f9a93c3c27259";
|
||||
let n: f32 = 8192f32;
|
||||
let r: u32 = 8;
|
||||
let p: u32 = 1;
|
||||
let size: u32 = 32;
|
||||
let hash = generate_scrypt_hash(pass.to_string(), salt.to_string(), n, r, p, size);
|
||||
println!("scrypt hash => {}", hash);
|
||||
}
|
||||
|
75
src/lib.rs
75
src/lib.rs
@ -10,7 +10,7 @@ use qr::qr_code::QR;
|
||||
use secp256k1::PublicKey;
|
||||
use secp256k1::SecretKey;
|
||||
use std::str::FromStr;
|
||||
use utils::crypto_utils::{hash_password, verify_password, zdecrypt, zencrypt};
|
||||
use utils::crypto_utils::{hash_password, scrypt_hash, verify_password, zdecrypt, zencrypt};
|
||||
use utils::str_utils::{base64_to_hex, hex_to_base64};
|
||||
use wasm_bindgen::prelude::*;
|
||||
|
||||
@ -47,7 +47,13 @@ macro_rules! console_log {
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn get_public_key(id: String, openid: String, master_key: String, salt: String, pass: String) -> String {
|
||||
pub fn get_public_key(
|
||||
id: String,
|
||||
openid: String,
|
||||
master_key: String,
|
||||
salt: String,
|
||||
pass: String,
|
||||
) -> String {
|
||||
let second_key = wallet_impl::generate_client_key(&pass, &openid, &salt);
|
||||
let msg_str = format!("{}{}{}", id, openid, salt);
|
||||
let msg_key = keccak256_hash(msg_str);
|
||||
@ -60,7 +66,13 @@ pub fn get_public_key(id: String, openid: String, master_key: String, salt: Stri
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn generate_sec_key(id: String, openid: String, master_key: String, salt: String, pass: String) -> String {
|
||||
pub fn generate_sec_key(
|
||||
id: String,
|
||||
openid: String,
|
||||
master_key: String,
|
||||
salt: String,
|
||||
pass: String,
|
||||
) -> String {
|
||||
let second_key = wallet_impl::generate_client_key(&pass, &openid, &salt);
|
||||
let msg_str = format!("{}{}{}", id, openid, salt);
|
||||
let msg_key = keccak256_hash(msg_str);
|
||||
@ -73,7 +85,14 @@ pub fn generate_sec_key(id: String, openid: String, master_key: String, salt: St
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn sign(id: String, openid: String, master_key: String, salt: String, pass: String, msg: String) -> String {
|
||||
pub fn sign(
|
||||
id: String,
|
||||
openid: String,
|
||||
master_key: String,
|
||||
salt: String,
|
||||
pass: String,
|
||||
msg: String,
|
||||
) -> String {
|
||||
let second_key = wallet_impl::generate_client_key(&pass, &openid, &salt);
|
||||
let msg_str = format!("{}{}{}", id, openid, salt);
|
||||
let msg_key = keccak256_hash(msg_str);
|
||||
@ -91,7 +110,14 @@ pub fn sign(id: String, openid: String, master_key: String, salt: String, pass:
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn sign_for_tran(id: String, openid: String, master_key: String, salt: String, pass: String, msg: String) -> String {
|
||||
pub fn sign_for_tran(
|
||||
id: String,
|
||||
openid: String,
|
||||
master_key: String,
|
||||
salt: String,
|
||||
pass: String,
|
||||
msg: String,
|
||||
) -> String {
|
||||
let second_key = wallet_impl::generate_client_key(&pass, &openid, &salt);
|
||||
let msg_str = format!("{}{}{}", id, openid, salt);
|
||||
let msg_key = keccak256_hash(msg_str);
|
||||
@ -117,7 +143,26 @@ pub fn keccak256_hash(content: String) -> String {
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn wget_address(id: String, openid: String, master_key: String, salt: String, pass: String) -> String {
|
||||
pub fn generate_scrypt_hash(
|
||||
pass: String,
|
||||
salt: String,
|
||||
n: f32,
|
||||
r: u32,
|
||||
p: u32,
|
||||
size: u32,
|
||||
) -> String {
|
||||
let nr = n.log2().ceil() as u8;
|
||||
scrypt_hash(&pass, &salt, nr, r, p, size)
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn wget_address(
|
||||
id: String,
|
||||
openid: String,
|
||||
master_key: String,
|
||||
salt: String,
|
||||
pass: String,
|
||||
) -> String {
|
||||
let second_key = wallet_impl::generate_client_key(&pass, &openid, &salt);
|
||||
let msg_str = format!("{}{}{}", id, openid, salt);
|
||||
let msg_key = keccak256_hash(msg_str);
|
||||
@ -133,7 +178,14 @@ pub fn wget_address(id: String, openid: String, master_key: String, salt: String
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn wencrypt(id: String, openid: String, master_key: String, salt: String, pass: String,msg: String) -> String {
|
||||
pub fn wencrypt(
|
||||
id: String,
|
||||
openid: String,
|
||||
master_key: String,
|
||||
salt: String,
|
||||
pass: String,
|
||||
msg: String,
|
||||
) -> String {
|
||||
let second_key = wallet_impl::generate_client_key(&pass, &openid, &salt);
|
||||
let msg_str = format!("{}{}{}", id, openid, salt);
|
||||
let msg_key = keccak256_hash(msg_str);
|
||||
@ -150,7 +202,14 @@ pub fn wencrypt(id: String, openid: String, master_key: String, salt: String, pa
|
||||
r
|
||||
}
|
||||
#[wasm_bindgen]
|
||||
pub fn wdecrypt(id: String, openid: String, master_key: String, salt: String, pass: String, msg: String) -> String {
|
||||
pub fn wdecrypt(
|
||||
id: String,
|
||||
openid: String,
|
||||
master_key: String,
|
||||
salt: String,
|
||||
pass: String,
|
||||
msg: String,
|
||||
) -> String {
|
||||
let second_key = wallet_impl::generate_client_key(&pass, &openid, &salt);
|
||||
let msg_str = format!("{}{}{}", id, openid, salt);
|
||||
let msg_key = keccak256_hash(msg_str);
|
||||
|
@ -10,6 +10,7 @@ use argon2::{
|
||||
use base64::{engine::general_purpose, Engine as _};
|
||||
use ecies::{decrypt, encrypt};
|
||||
use rand::prelude::*;
|
||||
use scrypt::{scrypt, ScryptParams};
|
||||
use secp256k1::{PublicKey, SecretKey};
|
||||
use std::str;
|
||||
use tiny_keccak::keccak256;
|
||||
@ -29,6 +30,15 @@ pub fn hash_password(pass: &str, salt: &str) -> String {
|
||||
general_purpose::STANDARD_NO_PAD.encode(&password_hash)
|
||||
}
|
||||
|
||||
pub fn scrypt_hash(pass: &str, salt: &str, n: u8, r: u32, p: u32, size: u32) -> String {
|
||||
let password = pass.as_bytes();
|
||||
let salt = hex::decode(salt).expect("error decoding hex string");
|
||||
let params = ScryptParams::new(n, r, p).expect("error create scrypt params");
|
||||
let mut output = vec![0u8; size as usize];
|
||||
scrypt(password, &salt, ¶ms, &mut output).expect("error scrypt");
|
||||
general_purpose::STANDARD_NO_PAD.encode(output)
|
||||
}
|
||||
|
||||
pub fn verify_password(pass: &str, password_hash: &str) -> bool {
|
||||
let str_tmp = match general_purpose::STANDARD_NO_PAD.decode(password_hash) {
|
||||
Ok(v) => v,
|
||||
|
Loading…
x
Reference in New Issue
Block a user