Merge pull request 'feat(dubp): add method genWalletFromDeprecatedSaltPassword' (#7) from dubp/import-legacy-wallet into master
Reviewed-on: #7
This commit is contained in:
commit
2138973df8
|
@ -117,7 +117,7 @@ pub(super) fn sign_several(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn log_n(system_memory: i64) -> u8 {
|
pub(crate) fn log_n(system_memory: i64) -> u8 {
|
||||||
if system_memory > 3_000_000_000 {
|
if system_memory > 3_000_000_000 {
|
||||||
15
|
15
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -16,6 +16,25 @@
|
||||||
use crate::*;
|
use crate::*;
|
||||||
use dup_crypto::keys::ed25519::{KeyPairFromSaltedPasswordGenerator, SaltedPassword};
|
use dup_crypto::keys::ed25519::{KeyPairFromSaltedPasswordGenerator, SaltedPassword};
|
||||||
|
|
||||||
|
pub(super) fn gen_dewif_from_legacy(
|
||||||
|
currency: &str,
|
||||||
|
salt: String,
|
||||||
|
password: String,
|
||||||
|
member_wallet: bool,
|
||||||
|
secret_code_type: SecretCodeType,
|
||||||
|
system_memory: i64,
|
||||||
|
) -> Result<Vec<String>, DubpError> {
|
||||||
|
let currency = parse_currency(currency)?;
|
||||||
|
let keypair = KeyPairFromSaltedPasswordGenerator::with_default_parameters()
|
||||||
|
.generate(SaltedPassword::new(salt, password));
|
||||||
|
|
||||||
|
let log_n = crate::dewif::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])
|
||||||
|
}
|
||||||
|
|
||||||
pub(super) fn get_pubkey(salt: &str, password: &str) -> String {
|
pub(super) fn get_pubkey(salt: &str, password: &str) -> String {
|
||||||
KeyPairFromSaltedPasswordGenerator::with_default_parameters()
|
KeyPairFromSaltedPasswordGenerator::with_default_parameters()
|
||||||
.generate(SaltedPassword::new(salt.to_owned(), password.to_owned()))
|
.generate(SaltedPassword::new(salt.to_owned(), password.to_owned()))
|
||||||
|
|
|
@ -122,6 +122,46 @@ pub extern "C" fn gen_dewif(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn gen_dewif_from_legacy(
|
||||||
|
port: i64,
|
||||||
|
currency: *const raw::c_char,
|
||||||
|
salt: *const raw::c_char,
|
||||||
|
password: *const raw::c_char,
|
||||||
|
member_wallet: u32,
|
||||||
|
secret_code_type: u32,
|
||||||
|
system_memory: i64,
|
||||||
|
) {
|
||||||
|
exec_async(
|
||||||
|
port,
|
||||||
|
|| {
|
||||||
|
let currency = char_ptr_to_str(currency)?;
|
||||||
|
let salt = char_ptr_to_str(salt)?.to_owned();
|
||||||
|
let password = char_ptr_to_str(password)?.to_owned();
|
||||||
|
let member_wallet = member_wallet != 0;
|
||||||
|
let secret_code_type = SecretCodeType::from(secret_code_type);
|
||||||
|
Ok((
|
||||||
|
currency,
|
||||||
|
salt,
|
||||||
|
password,
|
||||||
|
member_wallet,
|
||||||
|
secret_code_type,
|
||||||
|
system_memory,
|
||||||
|
))
|
||||||
|
},
|
||||||
|
|(currency, salt, password, member_wallet, secret_code_type, system_memory)| {
|
||||||
|
legacy::gen_dewif_from_legacy(
|
||||||
|
currency,
|
||||||
|
salt,
|
||||||
|
password,
|
||||||
|
member_wallet,
|
||||||
|
secret_code_type,
|
||||||
|
system_memory,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn gen_mnemonic(port: i64, language: u32) {
|
pub extern "C" fn gen_mnemonic(port: i64, language: u32) {
|
||||||
exec_async(port, || u32_to_language(language), mnemonic::gen_mnemonic)
|
exec_async(port, || u32_to_language(language), mnemonic::gen_mnemonic)
|
||||||
|
|
|
@ -49,18 +49,6 @@ class DubpRust {
|
||||||
print("DUBP_RS Setup Done");
|
print("DUBP_RS Setup Done");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generate a random mnemonic
|
|
||||||
static Future<String> genMnemonic({Language language = Language.english}) {
|
|
||||||
final completer = Completer<String>();
|
|
||||||
final sendPort =
|
|
||||||
singleCompletePort<String, String>(completer, callback: _handleErr);
|
|
||||||
native.gen_mnemonic(
|
|
||||||
sendPort.nativePort,
|
|
||||||
language.index,
|
|
||||||
);
|
|
||||||
return completer.future;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Change the secret code that encrypts the `dewif` keypair.
|
/// Change the secret code that encrypts the `dewif` keypair.
|
||||||
static Future<NewWallet> changeDewifPin({
|
static Future<NewWallet> changeDewifPin({
|
||||||
String currency = "g1",
|
String currency = "g1",
|
||||||
|
@ -87,6 +75,48 @@ class DubpRust {
|
||||||
return Future.value(NewWallet._(newWallet[0], newWallet[1], newWallet[2]));
|
return Future.value(NewWallet._(newWallet[0], newWallet[1], newWallet[2]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Generate a random mnemonic
|
||||||
|
static Future<String> genMnemonic({Language language = Language.english}) {
|
||||||
|
final completer = Completer<String>();
|
||||||
|
final sendPort =
|
||||||
|
singleCompletePort<String, String>(completer, callback: _handleErr);
|
||||||
|
native.gen_mnemonic(
|
||||||
|
sendPort.nativePort,
|
||||||
|
language.index,
|
||||||
|
);
|
||||||
|
return completer.future;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Generate a wallet from a deprecated salt + password couple.
|
||||||
|
///
|
||||||
|
/// This deprecated method must be used only for compatibility purpose !
|
||||||
|
static Future<NewWallet> genWalletFromDeprecatedSaltPassword({
|
||||||
|
String currency = "g1",
|
||||||
|
String salt,
|
||||||
|
String password,
|
||||||
|
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);
|
||||||
|
native.gen_dewif_from_legacy(
|
||||||
|
sendPort.nativePort,
|
||||||
|
Utf8.toUtf8(currency),
|
||||||
|
Utf8.toUtf8(salt),
|
||||||
|
Utf8.toUtf8(password),
|
||||||
|
0,
|
||||||
|
secretCodeType.index,
|
||||||
|
ram,
|
||||||
|
);
|
||||||
|
List<String> newWallet = await completer.future;
|
||||||
|
|
||||||
|
return Future.value(NewWallet._(newWallet[0], newWallet[1], newWallet[2]));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Generate a wallet from a mnemonic phrase.
|
/// Generate a wallet from a mnemonic phrase.
|
||||||
///
|
///
|
||||||
/// If the mnemonic is not in English, you must indicate the language of
|
/// If the mnemonic is not in English, you must indicate the language of
|
||||||
|
@ -120,19 +150,6 @@ class DubpRust {
|
||||||
return Future.value(NewWallet._(newWallet[0], newWallet[1], newWallet[2]));
|
return Future.value(NewWallet._(newWallet[0], newWallet[1], newWallet[2]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get public key (in base 58) of legacy wallet (password + salt)
|
|
||||||
static Future<String> getLegacyPublicKey({String password, String salt}) {
|
|
||||||
final completer = Completer<String>();
|
|
||||||
final sendPort =
|
|
||||||
singleCompletePort<String, String>(completer, callback: _handleErr);
|
|
||||||
native.get_legacy_pubkey(
|
|
||||||
sendPort.nativePort,
|
|
||||||
Utf8.toUtf8(password),
|
|
||||||
Utf8.toUtf8(salt),
|
|
||||||
);
|
|
||||||
return completer.future;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get public key (in base 58) of `dewif` keypair.
|
/// Get public key (in base 58) of `dewif` keypair.
|
||||||
static Future<String> getDewifPublicKey(
|
static Future<String> getDewifPublicKey(
|
||||||
{String currency = "g1", String dewif, String pin}) async {
|
{String currency = "g1", String dewif, String pin}) async {
|
||||||
|
@ -148,6 +165,21 @@ class DubpRust {
|
||||||
return completer.future;
|
return completer.future;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get public key (in base 58) of legacy wallet (password + salt)
|
||||||
|
///
|
||||||
|
/// This deprecated method must be used only for compatibility purpose !
|
||||||
|
static Future<String> getLegacyPublicKey({String password, String salt}) {
|
||||||
|
final completer = Completer<String>();
|
||||||
|
final sendPort =
|
||||||
|
singleCompletePort<String, String>(completer, callback: _handleErr);
|
||||||
|
native.get_legacy_pubkey(
|
||||||
|
sendPort.nativePort,
|
||||||
|
Utf8.toUtf8(password),
|
||||||
|
Utf8.toUtf8(salt),
|
||||||
|
);
|
||||||
|
return completer.future;
|
||||||
|
}
|
||||||
|
|
||||||
/// Sign the message `message` with `dewif` keypair encryted in DEWIF format.
|
/// Sign the message `message` with `dewif` keypair encryted in DEWIF format.
|
||||||
///
|
///
|
||||||
/// If you have several messages to sign, use `signSeveral` method instead.
|
/// If you have several messages to sign, use `signSeveral` method instead.
|
||||||
|
@ -167,6 +199,8 @@ class DubpRust {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sign the message `message` with legacy wallet (password + salt)
|
/// Sign the message `message` with legacy wallet (password + salt)
|
||||||
|
///
|
||||||
|
/// This deprecated method must be used only for compatibility purpose !
|
||||||
static Future<String> signLegacy(
|
static Future<String> signLegacy(
|
||||||
{String password, String salt, String message}) {
|
{String password, String salt, String message}) {
|
||||||
final completer = Completer<String>();
|
final completer = Completer<String>();
|
||||||
|
|
Loading…
Reference in New Issue