Skip to content

Commit 0712efe

Browse files
authored
allow seed offset generation & wallet restore (#804)
1 parent 341df6c commit 0712efe

File tree

35 files changed

+413
-123
lines changed

35 files changed

+413
-123
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
applicationId "com.m2049r.xmrwallet"
99
minSdkVersion 21
1010
targetSdkVersion 30
11-
versionCode 1201
12-
versionName "2.2.1 'René'"
11+
versionCode 1301
12+
versionName "2.3.1 'Doménikos'"
1313
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1414
externalNativeBuild {
1515
cmake {

app/src/main/cpp/monerujo.cpp

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ std::vector<std::string> java2cpp(JNIEnv *env, jobject arrayList) {
229229
return result;
230230
}
231231

232-
jobject cpp2java(JNIEnv *env, const std::vector<std::string>& vector) {
232+
jobject cpp2java(JNIEnv *env, const std::vector<std::string> &vector) {
233233

234234
jmethodID java_util_ArrayList_ = env->GetMethodID(class_ArrayList, "<init>", "(I)V");
235235
jmethodID java_util_ArrayList_add = env->GetMethodID(class_ArrayList, "add",
@@ -301,12 +301,13 @@ Java_com_m2049r_xmrwallet_model_WalletManager_openWalletJ(JNIEnv *env, jobject i
301301
JNIEXPORT jlong JNICALL
302302
Java_com_m2049r_xmrwallet_model_WalletManager_recoveryWalletJ(JNIEnv *env, jobject instance,
303303
jstring path, jstring password,
304-
jstring mnemonic,
304+
jstring mnemonic, jstring offset,
305305
jint networkType,
306306
jlong restoreHeight) {
307307
const char *_path = env->GetStringUTFChars(path, nullptr);
308308
const char *_password = env->GetStringUTFChars(password, nullptr);
309309
const char *_mnemonic = env->GetStringUTFChars(mnemonic, nullptr);
310+
const char *_offset = env->GetStringUTFChars(offset, nullptr);
310311
Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
311312

312313
Bitmonero::Wallet *wallet =
@@ -315,11 +316,14 @@ Java_com_m2049r_xmrwallet_model_WalletManager_recoveryWalletJ(JNIEnv *env, jobje
315316
std::string(_password),
316317
std::string(_mnemonic),
317318
_networkType,
318-
(uint64_t) restoreHeight);
319+
(uint64_t) restoreHeight,
320+
1, // kdf_rounds
321+
std::string(_offset));
319322

320323
env->ReleaseStringUTFChars(path, _path);
321324
env->ReleaseStringUTFChars(password, _password);
322325
env->ReleaseStringUTFChars(mnemonic, _mnemonic);
326+
env->ReleaseStringUTFChars(offset, _offset);
323327
return reinterpret_cast<jlong>(wallet);
324328
}
325329

@@ -533,7 +537,7 @@ Java_com_m2049r_xmrwallet_model_WalletManager_resolveOpenAlias(JNIEnv *env, jobj
533537

534538
JNIEXPORT jboolean JNICALL
535539
Java_com_m2049r_xmrwallet_model_WalletManager_setProxy(JNIEnv *env, jobject instance,
536-
jstring address) {
540+
jstring address) {
537541
const char *_address = env->GetStringUTFChars(address, nullptr);
538542
bool rc =
539543
Bitmonero::WalletManagerFactory::getWalletManager()->setProxy(std::string(_address));
@@ -570,9 +574,12 @@ Java_com_m2049r_xmrwallet_model_WalletManager_closeJ(JNIEnv *env, jobject instan
570574
/**********************************/
571575

572576
JNIEXPORT jstring JNICALL
573-
Java_com_m2049r_xmrwallet_model_Wallet_getSeed(JNIEnv *env, jobject instance) {
577+
Java_com_m2049r_xmrwallet_model_Wallet_getSeed(JNIEnv *env, jobject instance, jstring seedOffset) {
578+
const char *_seedOffset = env->GetStringUTFChars(seedOffset, nullptr);
574579
Bitmonero::Wallet *wallet = getHandle<Bitmonero::Wallet>(env, instance);
575-
return env->NewStringUTF(wallet->seed().c_str());
580+
jstring seed = env->NewStringUTF(wallet->seed(std::string(_seedOffset)).c_str());
581+
env->ReleaseStringUTFChars(seedOffset, _seedOffset);
582+
return seed;
576583
}
577584

578585
JNIEXPORT jstring JNICALL
@@ -740,7 +747,7 @@ Java_com_m2049r_xmrwallet_model_Wallet_getConnectionStatusJ(JNIEnv *env, jobject
740747

741748
JNIEXPORT jboolean JNICALL
742749
Java_com_m2049r_xmrwallet_model_Wallet_setProxy(JNIEnv *env, jobject instance,
743-
jstring address) {
750+
jstring address) {
744751
const char *_address = env->GetStringUTFChars(address, nullptr);
745752
Bitmonero::Wallet *wallet = getHandle<Bitmonero::Wallet>(env, instance);
746753
bool rc = wallet->setProxy(std::string(_address));
@@ -1262,7 +1269,7 @@ jobject newTransactionInfo(JNIEnv *env, Bitmonero::TransactionInfo *info) {
12621269
#include <stdio.h>
12631270
#include <stdlib.h>
12641271

1265-
jobject cpp2java(JNIEnv *env, const std::vector<Bitmonero::TransactionInfo *>& vector) {
1272+
jobject cpp2java(JNIEnv *env, const std::vector<Bitmonero::TransactionInfo *> &vector) {
12661273

12671274
jmethodID java_util_ArrayList_ = env->GetMethodID(class_ArrayList, "<init>", "(I)V");
12681275
jmethodID java_util_ArrayList_add = env->GetMethodID(class_ArrayList, "add",

app/src/main/java/com/m2049r/xmrwallet/GenerateFragment.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ public class GenerateFragment extends Fragment {
8181
private TextInputLayout etWalletRestoreHeight;
8282
private Button bGenerate;
8383

84+
private Button bSeedOffset;
85+
private TextInputLayout etSeedOffset;
86+
8487
private String type = null;
8588

8689
private void clearErrorOnTextEntry(final TextInputLayout textInputLayout) {
@@ -118,6 +121,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
118121
etWalletSpendKey = view.findViewById(R.id.etWalletSpendKey);
119122
etWalletRestoreHeight = view.findViewById(R.id.etWalletRestoreHeight);
120123
bGenerate = view.findViewById(R.id.bGenerate);
124+
bSeedOffset = view.findViewById(R.id.bSeedOffset);
125+
etSeedOffset = view.findViewById(R.id.etSeedOffset);
121126

122127
etWalletAddress.getEditText().setRawInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
123128
etWalletViewKey.getEditText().setRawInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
@@ -222,6 +227,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
222227
}
223228
return false;
224229
});
230+
bSeedOffset.setVisibility(View.VISIBLE);
231+
bSeedOffset.setOnClickListener(v -> toggleSeedOffset());
225232
break;
226233
case TYPE_KEY:
227234
case TYPE_VIEWONLY:
@@ -288,6 +295,18 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
288295
return view;
289296
}
290297

298+
void toggleSeedOffset() {
299+
if (etSeedOffset.getVisibility() == View.VISIBLE) {
300+
etSeedOffset.getEditText().getText().clear();
301+
etSeedOffset.setVisibility(View.GONE);
302+
bSeedOffset.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_baseline_keyboard_arrow_down_24, 0, 0, 0);
303+
} else {
304+
etSeedOffset.setVisibility(View.VISIBLE);
305+
bSeedOffset.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_baseline_keyboard_arrow_up_24, 0, 0, 0);
306+
etSeedOffset.requestFocusFromTouch();
307+
}
308+
}
309+
291310
private boolean checkName() {
292311
String name = etWalletName.getEditText().getText().toString();
293312
boolean ok = true;
@@ -422,12 +441,13 @@ private void generateWallet() {
422441
break;
423442
case TYPE_SEED:
424443
if (!checkMnemonic()) return;
425-
String seed = etWalletMnemonic.getEditText().getText().toString();
444+
final String seed = etWalletMnemonic.getEditText().getText().toString();
426445
bGenerate.setEnabled(false);
427446
if (fingerprintAuthAllowed) {
428447
KeyStoreHelper.saveWalletUserPass(requireActivity(), name, password);
429448
}
430-
activityCallback.onGenerate(name, crazyPass, seed, height);
449+
final String offset = etSeedOffset.getEditText().getText().toString();
450+
activityCallback.onGenerate(name, crazyPass, seed, offset, height);
431451
break;
432452
case TYPE_LEDGER:
433453
bGenerate.setEnabled(false);
@@ -491,7 +511,7 @@ String getType() {
491511
public interface Listener {
492512
void onGenerate(String name, String password);
493513

494-
void onGenerate(String name, String password, String seed, long height);
514+
void onGenerate(String name, String password, String seed, String offset, long height);
495515

496516
void onGenerate(String name, String password, String address, String viewKey, String spendKey, long height);
497517

0 commit comments

Comments
 (0)