Skip to content
Snippets Groups Projects
Commit 2138973d authored by poka's avatar poka
Browse files

Merge pull request 'feat(dubp): add method...

Merge pull request 'feat(dubp): add method genWalletFromDeprecatedSaltPassword' (#7) from dubp/import-legacy-wallet into master

Reviewed-on: https://git.p2p.legal/axiom-team/gecko/pulls/7
parents d80b1190 89f0e174
No related branches found
No related tags found
No related merge requests found
...@@ -117,7 +117,7 @@ pub(super) fn sign_several( ...@@ -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 @@ ...@@ -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( ...@@ -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,6 +49,32 @@ class DubpRust { ...@@ -49,6 +49,32 @@ class DubpRust {
print("DUBP_RS Setup Done"); print("DUBP_RS Setup Done");
} }
/// Change the secret code that encrypts the `dewif` keypair.
static Future<NewWallet> changeDewifPin({
String currency = "g1",
String dewif,
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);
native.change_dewif_secret_code(
sendPort.nativePort,
Utf8.toUtf8(currency),
Utf8.toUtf8(dewif),
Utf8.toUtf8(oldPin),
0,
secretCodeType.index,
ram,
);
List<String> newWallet = await completer.future;
return Future.value(NewWallet._(newWallet[0], newWallet[1], newWallet[2]));
}
/// Generate a random mnemonic /// Generate a random mnemonic
static Future<String> genMnemonic({Language language = Language.english}) { static Future<String> genMnemonic({Language language = Language.english}) {
final completer = Completer<String>(); final completer = Completer<String>();
...@@ -61,23 +87,26 @@ class DubpRust { ...@@ -61,23 +87,26 @@ class DubpRust {
return completer.future; return completer.future;
} }
/// Change the secret code that encrypts the `dewif` keypair. /// Generate a wallet from a deprecated salt + password couple.
static Future<NewWallet> changeDewifPin({ ///
/// This deprecated method must be used only for compatibility purpose !
static Future<NewWallet> genWalletFromDeprecatedSaltPassword({
String currency = "g1", String currency = "g1",
String dewif, String salt,
String oldPin, String password,
SecretCodeType secretCodeType = SecretCodeType.letters, SecretCodeType secretCodeType = SecretCodeType.letters,
}) async { }) async {
int ram = SysInfo.getTotalPhysicalMemory(); int ram = SysInfo.getTotalPhysicalMemory();
print('ram=$ram');
final completer = Completer<List<String>>(); final completer = Completer<List<String>>();
final sendPort = singleCompletePort<List<String>, List>(completer, final sendPort = singleCompletePort<List<String>, List>(completer,
callback: _handleErrList); callback: _handleErrList);
native.change_dewif_secret_code( native.gen_dewif_from_legacy(
sendPort.nativePort, sendPort.nativePort,
Utf8.toUtf8(currency), Utf8.toUtf8(currency),
Utf8.toUtf8(dewif), Utf8.toUtf8(salt),
Utf8.toUtf8(oldPin), Utf8.toUtf8(password),
0, 0,
secretCodeType.index, secretCodeType.index,
ram, ram,
...@@ -87,6 +116,7 @@ class DubpRust { ...@@ -87,6 +116,7 @@ class DubpRust {
return Future.value(NewWallet._(newWallet[0], newWallet[1], newWallet[2])); 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,30 +150,32 @@ class DubpRust { ...@@ -120,30 +150,32 @@ 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) /// Get public key (in base 58) of `dewif` keypair.
static Future<String> getLegacyPublicKey({String password, String salt}) { static Future<String> getDewifPublicKey(
{String currency = "g1", String dewif, String pin}) async {
final completer = Completer<String>(); final completer = Completer<String>();
final sendPort = final sendPort =
singleCompletePort<String, String>(completer, callback: _handleErr); singleCompletePort<String, String>(completer, callback: _handleErr);
native.get_legacy_pubkey( native.get_dewif_pubkey(
sendPort.nativePort, sendPort.nativePort,
Utf8.toUtf8(password), Utf8.toUtf8(currency),
Utf8.toUtf8(salt), Utf8.toUtf8(dewif),
Utf8.toUtf8(pin),
); );
return completer.future; return completer.future;
} }
/// Get public key (in base 58) of `dewif` keypair. /// Get public key (in base 58) of legacy wallet (password + salt)
static Future<String> getDewifPublicKey( ///
{String currency = "g1", String dewif, String pin}) async { /// This deprecated method must be used only for compatibility purpose !
static Future<String> getLegacyPublicKey({String password, String salt}) {
final completer = Completer<String>(); final completer = Completer<String>();
final sendPort = final sendPort =
singleCompletePort<String, String>(completer, callback: _handleErr); singleCompletePort<String, String>(completer, callback: _handleErr);
native.get_dewif_pubkey( native.get_legacy_pubkey(
sendPort.nativePort, sendPort.nativePort,
Utf8.toUtf8(currency), Utf8.toUtf8(password),
Utf8.toUtf8(dewif), Utf8.toUtf8(salt),
Utf8.toUtf8(pin),
); );
return completer.future; return completer.future;
} }
...@@ -167,6 +199,8 @@ class DubpRust { ...@@ -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>();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment