2018-11-21 08:40:18 -08:00
|
|
|
extern crate zcash_client_backend;
|
|
|
|
extern crate zip32;
|
2018-11-20 09:59:08 -08:00
|
|
|
|
2018-11-21 08:40:18 -08:00
|
|
|
use zcash_client_backend::{
|
|
|
|
address::encode_payment_address, constants::HRP_SAPLING_EXTENDED_SPENDING_KEY_TEST,
|
|
|
|
};
|
|
|
|
use zip32::{ChildIndex, ExtendedSpendingKey};
|
|
|
|
|
|
|
|
fn address_from_seed(seed: &[u8]) -> String {
|
|
|
|
let master = ExtendedSpendingKey::master(seed);
|
|
|
|
let extsk = ExtendedSpendingKey::from_path(
|
|
|
|
&master,
|
|
|
|
&[
|
|
|
|
ChildIndex::Hardened(32),
|
|
|
|
ChildIndex::Hardened(1),
|
|
|
|
ChildIndex::Hardened(0),
|
|
|
|
],
|
|
|
|
);
|
|
|
|
let addr = extsk.default_address().unwrap().1;
|
|
|
|
encode_payment_address(HRP_SAPLING_EXTENDED_SPENDING_KEY_TEST, &addr)
|
2018-11-20 09:59:08 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
/// JNI interface
|
2018-11-21 05:51:37 -08:00
|
|
|
#[cfg(target_os = "android")]
|
2018-11-20 09:59:08 -08:00
|
|
|
#[allow(non_snake_case)]
|
|
|
|
pub mod android {
|
|
|
|
extern crate jni;
|
|
|
|
|
2018-11-21 08:40:18 -08:00
|
|
|
use self::jni::objects::JClass;
|
|
|
|
use self::jni::sys::{jbyteArray, jstring};
|
2018-11-21 05:51:37 -08:00
|
|
|
use self::jni::JNIEnv;
|
2018-11-20 09:59:08 -08:00
|
|
|
|
2018-11-21 08:40:18 -08:00
|
|
|
use super::address_from_seed;
|
2018-11-20 09:59:08 -08:00
|
|
|
|
|
|
|
#[no_mangle]
|
2018-11-21 08:40:18 -08:00
|
|
|
pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_getAddress(
|
2018-11-21 05:51:37 -08:00
|
|
|
env: JNIEnv,
|
|
|
|
_: JClass,
|
2018-11-21 08:40:18 -08:00
|
|
|
seed: jbyteArray,
|
|
|
|
) -> jstring {
|
|
|
|
let seed = env.convert_byte_array(seed).unwrap();
|
|
|
|
|
|
|
|
let addr = address_from_seed(&seed);
|
|
|
|
|
|
|
|
let output = env.new_string(addr).expect("Couldn't create Java string!");
|
|
|
|
output.into_inner()
|
2018-11-20 09:59:08 -08:00
|
|
|
}
|
|
|
|
}
|