dubp/dewif-meta-data #13
|
@ -67,23 +67,25 @@ pub(super) fn gen_dewif(
|
|||
Ok(vec![dewif, secret_code])
|
||||
}
|
||||
|
||||
pub(super) fn get_secret_code_len(
|
||||
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,
|
||||
pub(super) fn get_dewif_meta(
|
||||
dewif: &str,
|
||||
member_wallet: bool,
|
||||
secret_code_type: SecretCodeType,
|
||||
) -> Result<Vec<String>, DubpError> {
|
||||
let dup_crypto::dewif::DewifMeta {
|
||||
currency,
|
||||
log_n,
|
||||
)?)
|
||||
version,
|
||||
} = dup_crypto::dewif::read_dewif_meta(dewif).map_err(DubpError::DewifReadError)?;
|
||||
|
||||
let secret_code_len =
|
||||
crate::secret_code::compute_secret_code_len(member_wallet, secret_code_type, log_n)?;
|
||||
|
||||
Ok(vec![
|
||||
currency.to_string(),
|
||||
secret_code_len.to_string(),
|
||||
version.to_string(),
|
||||
])
|
||||
}
|
||||
|
||||
pub(super) fn get_pubkey(
|
||||
|
@ -106,6 +108,25 @@ pub(super) fn get_pubkey(
|
|||
}
|
||||
}
|
||||
|
||||
pub(super) fn get_secret_code_len(
|
||||
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,
|
||||
)?)
|
||||
}
|
||||
|
||||
pub(crate) fn log_n(system_memory: i64) -> u8 {
|
||||
if system_memory > 3_000_000_000 {
|
||||
15
|
||||
|
|
|
@ -175,6 +175,27 @@ pub extern "C" fn gen_mnemonic(port: i64, language: u32) {
|
|||
exec_async(port, || u32_to_language(language), mnemonic::gen_mnemonic)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn get_dewif_meta(
|
||||
port: i64,
|
||||
dewif: *const raw::c_char,
|
||||
member_wallet: u32,
|
||||
secret_code_type: u32,
|
||||
) {
|
||||
exec_async(
|
||||
port,
|
||||
|| {
|
||||
let dewif = char_ptr_to_str(dewif)?;
|
||||
let member_wallet = member_wallet != 0;
|
||||
let secret_code_type = SecretCodeType::from(secret_code_type);
|
||||
Ok((dewif, member_wallet, secret_code_type))
|
||||
},
|
||||
|(dewif, member_wallet, secret_code_type)| {
|
||||
dewif::get_dewif_meta(dewif, member_wallet, secret_code_type)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn get_dewif_secret_code_len(
|
||||
dewif: *const raw::c_char,
|
||||
|
|
|
@ -6,6 +6,29 @@ import "package:system_info/system_info.dart";
|
|||
|
||||
import 'ffi.dart' as native;
|
||||
|
||||
/// DEWIF meta data
|
||||
class DewifMetaData {
|
||||
/// Currency name
|
||||
String currency;
|
||||
|
||||
/// Secret code length
|
||||
int secretCodeLen;
|
||||
|
||||
/// DEWIF version
|
||||
int version;
|
||||
|
||||
/// Wallet type
|
||||
WalletType walletType;
|
||||
|
||||
DewifMetaData._(this.currency, this.secretCodeLen, this.version) {
|
||||
if (version == 4) {
|
||||
walletType = WalletType.bip32Ed25519;
|
||||
} else {
|
||||
walletType = WalletType.ed25519;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Language
|
||||
enum Language {
|
||||
/// English
|
||||
|
@ -176,6 +199,21 @@ class DubpRust {
|
|||
return completer.future;
|
||||
}
|
||||
|
||||
/// Get `dewif` keypair meta data.
|
||||
static Future<DewifMetaData> getDewifMetaData(
|
||||
{String dewif,
|
||||
SecretCodeType secretCodeType = SecretCodeType.letters}) async {
|
||||
final completer = Completer<List<String>>();
|
||||
final sendPort = singleCompletePort<List<String>, List>(completer,
|
||||
callback: _handleErrList);
|
||||
native.get_dewif_meta(
|
||||
sendPort.nativePort, Utf8.toUtf8(dewif), 0, secretCodeType.index);
|
||||
List<String> dewifMetaData = await completer.future;
|
||||
|
||||
return Future.value(DewifMetaData._(dewifMetaData[0],
|
||||
int.parse(dewifMetaData[1]), int.parse(dewifMetaData[2])));
|
||||
}
|
||||
|
||||
/// Get public key (in base 58) of `dewif` keypair.
|
||||
static Future<String> getDewifPublicKey(
|
||||
{String currency = "g1", String dewif, String pin}) async {
|
||||
|
|
Loading…
Reference in New Issue