diff --git a/native/dubp_rs/src/dewif.rs b/native/dubp_rs/src/dewif.rs index 70e25623c92904441107d629628b9c7f00a14f97..1ed860d4339cb78ec2c14077f893e957fe09c552 100644 --- a/native/dubp_rs/src/dewif.rs +++ b/native/dubp_rs/src/dewif.rs @@ -65,18 +65,22 @@ pub(super) fn gen_dewif( } pub(super) fn get_secret_code_len( - currency: Currency, - dewif: &str, - member_wallet: bool, - secret_code_type: SecretCodeType, -) -> Result<String, DubpError> { - let log_n = dup_crypto::dewif::read_dewif_log_n(ExpectedCurrency::Specific(currency), dewif) + dewif: *const raw::c_char, + member_wallet: u32, + secret_code_type: u32, +) -> Result<usize, DubpError> { + let dewif = char_ptr_to_str(dewif)?; + let member_wallet = member_wallet != 0; + let secret_code_type = SecretCodeType::from(secret_code_type); + + let log_n = dup_crypto::dewif::read_dewif_log_n(ExpectedCurrency::Any, dewif) .map_err(DubpError::DewifReadError)?; - Ok( - crate::secret_code::compute_secret_code_len(member_wallet, secret_code_type, log_n)? - .to_string(), - ) + Ok(crate::secret_code::compute_secret_code_len( + member_wallet, + secret_code_type, + log_n, + )?) } pub(super) fn get_pubkey(currency: Currency, dewif: &str, pin: &str) -> Result<String, DubpError> { diff --git a/native/dubp_rs/src/lib.rs b/native/dubp_rs/src/lib.rs index 172cab2f96ca4ebdb83cdb67b48937ecab9aadf7..92f19a4f5a264d70c1c8f8f3d2c4ada2757cf3a4 100644 --- a/native/dubp_rs/src/lib.rs +++ b/native/dubp_rs/src/lib.rs @@ -169,25 +169,16 @@ pub extern "C" fn gen_mnemonic(port: i64, language: u32) { #[no_mangle] pub extern "C" fn get_dewif_secret_code_len( - port: i64, - currency: *const raw::c_char, dewif: *const raw::c_char, member_wallet: u32, secret_code_type: u32, -) { - exec_async( - port, - || { - let currency = parse_currency(char_ptr_to_str(currency)?)?; - let dewif = char_ptr_to_str(dewif)?; - let member_wallet = member_wallet != 0; - let secret_code_type = SecretCodeType::from(secret_code_type); - Ok((currency, dewif, member_wallet, secret_code_type)) - }, - |(currency, dewif, member_wallet, secret_code_type)| { - dewif::get_secret_code_len(currency, dewif, member_wallet, secret_code_type) - }, - ) +) -> i32 { + if let Ok(secret_code_len) = dewif::get_secret_code_len(dewif, member_wallet, secret_code_type) + { + secret_code_len as i32 + } else { + -1 + } } #[no_mangle] diff --git a/packages/dubp_rs/lib/dubp.dart b/packages/dubp_rs/lib/dubp.dart index 4d246e6c7206b9d8a3442b264e9c8d8e7794a3d4..505f8f1de3f9325bbfe43818a731f4f3bb9f9d9e 100644 --- a/packages/dubp_rs/lib/dubp.dart +++ b/packages/dubp_rs/lib/dubp.dart @@ -165,21 +165,21 @@ class DubpRust { } /// Get secret code length of `dewif` keypair. - static Future<int> getDewifSecretCodeLen( + static int getDewifSecretCodeLen( {String currency = "g1", String dewif, - SecretCodeType secretCodeType = SecretCodeType.letters}) async { - final completer = Completer<int>(); - final sendPort = - singleCompletePort<int, String>(completer, callback: _handleErrInt); - native.get_dewif_secret_code_len( - sendPort.nativePort, - Utf8.toUtf8(currency), + SecretCodeType secretCodeType = SecretCodeType.letters}) { + int res = native.get_dewif_secret_code_len( Utf8.toUtf8(dewif), 0, secretCodeType.index, ); - return completer.future; + if (res == -1) { + print('DUBP_RS_ERROR: DEWIF file content is corrupted.'); + throw 'DUBP_RS_ERROR: DEWIF file content is corrupted.'; + } else { + return res; + } } /// Get public key (in base 58) of legacy wallet (password + salt) @@ -289,7 +289,7 @@ class DubpRust { } } - static int _handleErrInt(String res) { + /*static int _handleErrInt(String res) { if (res.startsWith('DUBP_RS_ERROR: ')) { final error = res; print(error); @@ -297,5 +297,5 @@ class DubpRust { } else { return int.parse(res); } - } + }*/ }