feat(dubp): adapt secret code len depending on system memory
This commit is contained in:
parent
4f6232d5c1
commit
a4f78f8be8
|
@ -261,9 +261,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "dup-crypto"
|
||||
version = "0.36.0"
|
||||
version = "0.38.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ed9887f92b29910736ad29f5631abcbd8fc6b2bd2dd5510dc1edd32b0265d04"
|
||||
checksum = "3b1f8913ba1b77dbbf419c2aeabc566ccca5e77385b6738bb408cd9a9e7bbb86"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"arrayvec",
|
||||
|
|
|
@ -10,7 +10,7 @@ crate-type = ["rlib"]
|
|||
|
||||
[dependencies]
|
||||
allo-isolate = "0.1.6"
|
||||
dup-crypto = { version = "0.36.0", features = ["dewif", "mnemonic", "mnemonic_french", "rand", "scrypt"] }
|
||||
dup-crypto = { version = "0.38.0", features = ["dewif", "mnemonic", "mnemonic_french", "rand", "scrypt"] }
|
||||
fast-threadpool = { version = "0.3.0", default-features = false }
|
||||
once_cell = { version = "1.3.1", default-features = false, features = ["std"] }
|
||||
thiserror = "1.0.23"
|
||||
|
|
|
@ -21,6 +21,7 @@ pub(super) fn change_secret_code(
|
|||
old_secret_code: &str,
|
||||
member_wallet: bool,
|
||||
secret_code_type: SecretCodeType,
|
||||
system_memory: i64,
|
||||
) -> Result<Vec<String>, DubpError> {
|
||||
let currency = parse_currency(currency)?;
|
||||
let mut keypairs = dup_crypto::dewif::read_dewif_file_content(
|
||||
|
@ -30,9 +31,11 @@ pub(super) fn change_secret_code(
|
|||
)
|
||||
.map_err(DubpError::DewifReadError)?;
|
||||
if let Some(KeyPairEnum::Ed25519(keypair)) = keypairs.next() {
|
||||
let new_secret_code = gen_secret_code(member_wallet, secret_code_type)?;
|
||||
let log_n = log_n(system_memory);
|
||||
let new_secret_code = gen_secret_code(member_wallet, secret_code_type, log_n)?;
|
||||
|
||||
let dewif = dup_crypto::dewif::write_dewif_v1_content(currency, &keypair, &new_secret_code);
|
||||
let dewif =
|
||||
dup_crypto::dewif::write_dewif_v3_content(currency, &keypair, log_n, &new_secret_code);
|
||||
let pubkey = keypair.public_key().to_base58();
|
||||
Ok(vec![dewif, new_secret_code, pubkey])
|
||||
} else {
|
||||
|
@ -46,6 +49,7 @@ pub(super) fn gen_dewif(
|
|||
mnemonic: &str,
|
||||
member_wallet: bool,
|
||||
secret_code_type: SecretCodeType,
|
||||
system_memory: i64,
|
||||
) -> Result<Vec<String>, DubpError> {
|
||||
let currency = parse_currency(currency)?;
|
||||
let mnemonic =
|
||||
|
@ -53,8 +57,9 @@ pub(super) fn gen_dewif(
|
|||
let seed = dup_crypto::mnemonic::mnemonic_to_seed(&mnemonic);
|
||||
let keypair = KeyPairFromSeed32Generator::generate(seed);
|
||||
|
||||
let secret_code = gen_secret_code(member_wallet, secret_code_type)?;
|
||||
let dewif = dup_crypto::dewif::write_dewif_v1_content(currency, &keypair, &secret_code);
|
||||
let log_n = log_n(system_memory);
|
||||
let secret_code = gen_secret_code(member_wallet, secret_code_type, log_n)?;
|
||||
let dewif = dup_crypto::dewif::write_dewif_v3_content(currency, &keypair, log_n, &secret_code);
|
||||
let pubkey = keypair.public_key().to_base58();
|
||||
Ok(vec![dewif, secret_code, pubkey])
|
||||
}
|
||||
|
@ -111,3 +116,11 @@ pub(super) fn sign_several(
|
|||
Err(DubpError::DewifReadError(DewifReadError::CorruptedContent))
|
||||
}
|
||||
}
|
||||
|
||||
fn log_n(system_memory: i64) -> u8 {
|
||||
if system_memory > 3_000_000_000 {
|
||||
15
|
||||
} else {
|
||||
12
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,6 +49,7 @@ pub extern "C" fn change_dewif_secret_code(
|
|||
old_pin: *const raw::c_char,
|
||||
member_wallet: u32,
|
||||
secret_code_type: u32,
|
||||
system_memory: i64,
|
||||
) {
|
||||
exec_async(
|
||||
port,
|
||||
|
@ -58,10 +59,24 @@ pub extern "C" fn change_dewif_secret_code(
|
|||
let old_pin = char_ptr_to_str(old_pin)?;
|
||||
let member_wallet = member_wallet != 0;
|
||||
let secret_code_type = SecretCodeType::from(secret_code_type);
|
||||
Ok((currency, dewif, old_pin, member_wallet, secret_code_type))
|
||||
Ok((
|
||||
currency,
|
||||
dewif,
|
||||
old_pin,
|
||||
member_wallet,
|
||||
secret_code_type,
|
||||
system_memory,
|
||||
))
|
||||
},
|
||||
|(currency, dewif, old_pin, member_wallet, secret_code_type)| {
|
||||
dewif::change_secret_code(currency, dewif, old_pin, member_wallet, secret_code_type)
|
||||
|(currency, dewif, old_pin, member_wallet, secret_code_type, system_memory)| {
|
||||
dewif::change_secret_code(
|
||||
currency,
|
||||
dewif,
|
||||
old_pin,
|
||||
member_wallet,
|
||||
secret_code_type,
|
||||
system_memory,
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -74,6 +89,7 @@ pub extern "C" fn gen_dewif(
|
|||
mnemonic: *const raw::c_char,
|
||||
member_wallet: u32,
|
||||
secret_code_type: u32,
|
||||
system_memory: i64,
|
||||
) {
|
||||
exec_async(
|
||||
port,
|
||||
|
@ -89,15 +105,17 @@ pub extern "C" fn gen_dewif(
|
|||
mnemonic,
|
||||
member_wallet,
|
||||
secret_code_type,
|
||||
system_memory,
|
||||
))
|
||||
},
|
||||
|(currency, language, mnemonic, member_wallet, secret_code_type)| {
|
||||
|(currency, language, mnemonic, member_wallet, secret_code_type, system_memory)| {
|
||||
dewif::gen_dewif(
|
||||
currency,
|
||||
language,
|
||||
mnemonic,
|
||||
member_wallet,
|
||||
secret_code_type,
|
||||
system_memory,
|
||||
)
|
||||
},
|
||||
)
|
||||
|
|
|
@ -18,11 +18,14 @@ use crate::*;
|
|||
pub(crate) fn gen_secret_code(
|
||||
member_wallet: bool,
|
||||
secret_code_type: SecretCodeType,
|
||||
log_n: u8,
|
||||
) -> Result<String, DubpError> {
|
||||
match secret_code_type {
|
||||
SecretCodeType::Digits => {
|
||||
if member_wallet {
|
||||
Err(DubpError::DigitsCodeForbidForMemberWallet)
|
||||
} else if log_n >= 15 {
|
||||
gen_random_digits(7)
|
||||
} else {
|
||||
gen_random_digits(8)
|
||||
}
|
||||
|
@ -30,6 +33,8 @@ pub(crate) fn gen_secret_code(
|
|||
SecretCodeType::Letters => {
|
||||
if member_wallet {
|
||||
gen_random_letters(10)
|
||||
} else if log_n >= 15 {
|
||||
gen_random_letters(5)
|
||||
} else {
|
||||
gen_random_letters(6)
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ import 'dart:async';
|
|||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
import 'package:isolate/ports.dart';
|
||||
import "package:system_info/system_info.dart";
|
||||
|
||||
import 'ffi.dart' as native;
|
||||
|
||||
|
@ -45,7 +46,7 @@ class DubpRust {
|
|||
/// Must be called only once at the start of your application.
|
||||
static void setup() {
|
||||
native.store_dart_post_cobject(NativeApi.postCObject);
|
||||
print("Dubp Setup Done");
|
||||
print("DUBP_RS Setup Done");
|
||||
}
|
||||
|
||||
/// Generate a random mnemonic
|
||||
|
@ -67,6 +68,8 @@ class DubpRust {
|
|||
String oldPin,
|
||||
SecretCodeType secretCodeType = SecretCodeType.letters,
|
||||
}) async {
|
||||
int ram = SysInfo.getTotalPhysicalMemory();
|
||||
|
||||
final completer = Completer<List<String>>();
|
||||
final sendPort = singleCompletePort<List<String>, List>(completer,
|
||||
callback: _handleErrList);
|
||||
|
@ -77,6 +80,7 @@ class DubpRust {
|
|||
Utf8.toUtf8(oldPin),
|
||||
0,
|
||||
secretCodeType.index,
|
||||
ram,
|
||||
);
|
||||
List<String> newWallet = await completer.future;
|
||||
|
||||
|
@ -96,6 +100,9 @@ class DubpRust {
|
|||
String mnemonic,
|
||||
SecretCodeType secretCodeType = SecretCodeType.letters,
|
||||
}) async {
|
||||
int ram = SysInfo.getTotalPhysicalMemory();
|
||||
print('ram=$ram');
|
||||
|
||||
final completer = Completer<List<String>>();
|
||||
final sendPort = singleCompletePort<List<String>, List>(completer,
|
||||
callback: _handleErrList);
|
||||
|
@ -106,6 +113,7 @@ class DubpRust {
|
|||
Utf8.toUtf8(mnemonic),
|
||||
0,
|
||||
secretCodeType.index,
|
||||
ram,
|
||||
);
|
||||
List<String> newWallet = await completer.future;
|
||||
|
||||
|
|
|
@ -64,6 +64,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.3"
|
||||
file_utils:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_utils
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.4"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
|
@ -74,6 +81,13 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
globbing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: globbing
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.1"
|
||||
isolate:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -135,6 +149,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.1"
|
||||
system_info:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: system_info
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.3"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
@ -11,6 +11,7 @@ dependencies:
|
|||
sdk: flutter
|
||||
ffi: ^0.1.3
|
||||
isolate: ^2.0.3
|
||||
system_info: ^0.1.3
|
||||
|
||||
dev_dependencies:
|
||||
effective_dart: ^1.0.0
|
||||
|
|
14
pubspec.lock
14
pubspec.lock
|
@ -134,6 +134,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.2.1"
|
||||
file_utils:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_utils
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.4"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
|
@ -163,6 +170,13 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
globbing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: globbing
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.1"
|
||||
gql:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
Loading…
Reference in New Issue