fix(dubp): mnemonic should generate HD wallet only

This commit is contained in:
librelois 2021-02-27 22:26:30 +01:00
parent 43b3c6c8f4
commit 4fea62ab64
5 changed files with 14 additions and 79 deletions

View File

@ -159,10 +159,10 @@ class GenerateWalletsProvider with ChangeNotifier {
Future<NewWallet> generateWallet(generatedMnemonic) async { Future<NewWallet> generateWallet(generatedMnemonic) async {
try { try {
this.actualWallet = await DubpRust.genWalletFromMnemonic( this.actualWallet = await DubpRust.genWalletFromMnemonic(
language: Language.french, language: Language.french,
mnemonic: generatedMnemonic, mnemonic: generatedMnemonic,
secretCodeType: SecretCodeType.letters, secretCodeType: SecretCodeType.letters,
walletType: WalletType.bip32Ed25519); );
} catch (e) { } catch (e) {
print(e); print(e);
} }

View File

@ -42,7 +42,6 @@ pub(super) fn gen_dewif(
member_wallet: bool, member_wallet: bool,
secret_code_type: SecretCodeType, secret_code_type: SecretCodeType,
system_memory: i64, system_memory: i64,
wallet_type: WalletType,
) -> Result<Vec<String>, DubpError> { ) -> Result<Vec<String>, DubpError> {
let currency = parse_currency(currency)?; let currency = parse_currency(currency)?;
let mnemonic = let mnemonic =
@ -52,17 +51,10 @@ pub(super) fn gen_dewif(
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 dewif = match wallet_type { let keypair = dup_crypto::keys::ed25519::bip32::KeyPair::from_seed(seed.clone());
WalletType::Bip32Ed25519 => { let pubkey = keypair.public_key();
let keypair = dup_crypto::keys::ed25519::bip32::KeyPair::from_seed(seed.clone()); let dewif =
let pubkey = keypair.public_key(); dup_crypto::dewif::write_dewif_v4_content(currency, log_n, &secret_code, &pubkey, seed);
dup_crypto::dewif::write_dewif_v4_content(currency, log_n, &secret_code, &pubkey, seed)
}
WalletType::Ed25519 => {
let keypair = KeyPairFromSeed32Generator::generate(seed);
dup_crypto::dewif::write_dewif_v3_content(currency, &keypair, log_n, &secret_code)
}
};
Ok(vec![dewif, secret_code]) Ok(vec![dewif, secret_code])
} }

View File

@ -87,7 +87,6 @@ pub extern "C" fn gen_dewif(
member_wallet: u32, member_wallet: u32,
secret_code_type: u32, secret_code_type: u32,
system_memory: i64, system_memory: i64,
wallet_type: u32,
) { ) {
exec_async( exec_async(
port, port,
@ -97,7 +96,6 @@ pub extern "C" fn gen_dewif(
let mnemonic = char_ptr_to_str(mnemonic)?; let mnemonic = char_ptr_to_str(mnemonic)?;
let member_wallet = member_wallet != 0; let member_wallet = member_wallet != 0;
let secret_code_type = SecretCodeType::from(secret_code_type); let secret_code_type = SecretCodeType::from(secret_code_type);
let wallet_type = WalletType::from(wallet_type);
Ok(( Ok((
currency, currency,
language, language,
@ -105,18 +103,9 @@ pub extern "C" fn gen_dewif(
member_wallet, member_wallet,
secret_code_type, secret_code_type,
system_memory, system_memory,
wallet_type,
)) ))
}, },
|( |(currency, language, mnemonic, member_wallet, secret_code_type, system_memory)| {
currency,
language,
mnemonic,
member_wallet,
secret_code_type,
system_memory,
wallet_type,
)| {
dewif::gen_dewif( dewif::gen_dewif(
currency, currency,
language, language,
@ -124,7 +113,6 @@ pub extern "C" fn gen_dewif(
member_wallet, member_wallet,
secret_code_type, secret_code_type,
system_memory, system_memory,
wallet_type,
) )
}, },
) )

View File

@ -144,10 +144,11 @@ NewWallet new_wallet = await DubpRust.genWalletFromMnemonic(
#### Function signature #### Function signature
```dart ```dart
static Future<String> sign({ static Future<String> signBip32Transparent({
int accountIndex,
String currency = "g1", String currency = "g1",
String dewif, String dewif,
String pin, String secretCode,
String message String message
}); });
``` ```
@ -157,7 +158,8 @@ If the wallet is not dedicated to the Ğ1 currency, you must indicate the curren
#### Usage example #### Usage example
```dart ```dart
String signature = await DubpRust.sign( String signature = await DubpRust.signBip32Transparent(
accountIndex: 3,
dewif: "AAAAARAAAAGfFDAs+jVZYkfhBlHZZ2fEQIvBqnG16g5+02cY18wSOjW0cUg2JV3SUTJYN2CrbQeRDwGazWnzSFBphchMmiL0", dewif: "AAAAARAAAAGfFDAs+jVZYkfhBlHZZ2fEQIvBqnG16g5+02cY18wSOjW0cUg2JV3SUTJYN2CrbQeRDwGazWnzSFBphchMmiL0",
pin: "CDJ4UB", pin: "CDJ4UB",
message: "toto" message: "toto"

View File

@ -156,7 +156,6 @@ class DubpRust {
Language language = Language.english, Language language = Language.english,
String mnemonic, String mnemonic,
SecretCodeType secretCodeType = SecretCodeType.letters, SecretCodeType secretCodeType = SecretCodeType.letters,
WalletType walletType = WalletType.ed25519,
}) async { }) async {
int ram = SysInfo.getTotalPhysicalMemory(); int ram = SysInfo.getTotalPhysicalMemory();
print('ram=$ram'); print('ram=$ram');
@ -172,7 +171,6 @@ class DubpRust {
0, 0,
secretCodeType.index, secretCodeType.index,
ram, ram,
walletType.index,
); );
List<String> newWallet = await completer.future; List<String> newWallet = await completer.future;
@ -263,24 +261,6 @@ class DubpRust {
return completer.future; return completer.future;
} }
/// Sign the message `message` with `dewif` keypair encryted in DEWIF format.
///
/// If you have several messages to sign, use `signSeveral` method instead.
static Future<String> sign(
{String currency = "g1", String dewif, String pin, String message}) {
final completer = Completer<String>();
final sendPort =
singleCompletePort<String, String>(completer, callback: _handleErr);
native.sign(
sendPort.nativePort,
Utf8.toUtf8(currency),
Utf8.toUtf8(dewif),
Utf8.toUtf8(pin),
Utf8.toUtf8(message),
);
return completer.future;
}
/// Sign the message `message` with `dewif` Bip32-Ed25519 keypair encryted /// Sign the message `message` with `dewif` Bip32-Ed25519 keypair encryted
/// in DEWIF format. /// in DEWIF format.
/// ///
@ -323,33 +303,6 @@ class DubpRust {
return completer.future; return completer.future;
} }
/// Sign several messages `messages` with `dewif` keypair encryted in DEWIF
/// format.
///
/// This method is optimized to sign several messages at once. If you have
/// several messages to sign, avoid calling the `sign` method for each
/// message. Use this `signSeveral` method instead.
static Future<List<String>> signSeveral(
{String currency = "g1",
String dewif,
String pin,
List<String> messages}) {
final completer = Completer<List<String>>();
final sendPort = singleCompletePort<List<String>, List>(completer,
callback: _handleErrList);
native.sign_several(
sendPort.nativePort,
Utf8.toUtf8(currency),
Utf8.toUtf8(dewif),
Utf8.toUtf8(pin),
messages.length,
_listStringToPtr(messages),
);
return completer.future;
}
/// Sign several messages `messages` with `dewif` keypair encryted in DEWIF /// Sign several messages `messages` with `dewif` keypair encryted in DEWIF
/// format. /// format.
/// ///