mirror of https://github.com/m2049r/xmrwallet.git
CrAzYpass implementation (#234)
This commit is contained in:
parent
37f22a9dc2
commit
073bd96b17
|
@ -1,10 +1,7 @@
|
|||
.gradle
|
||||
/build
|
||||
*.iml
|
||||
/.idea/libraries
|
||||
/.idea/workspace.xml
|
||||
/.idea/caches
|
||||
/.idea/codeStyles
|
||||
/.idea
|
||||
/local.properties
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
|
|
|
@ -7,8 +7,8 @@ android {
|
|||
applicationId "com.m2049r.xmrwallet"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 25
|
||||
versionCode 87
|
||||
versionName "1.4.7 'Monero Spedner'"
|
||||
versionCode 90
|
||||
versionName "1.5.0 'CrAzYpass'"
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
|
@ -66,7 +66,6 @@ dependencies {
|
|||
implementation 'com.android.support:support-v4:25.4.0'
|
||||
implementation 'com.android.support:recyclerview-v7:25.4.0'
|
||||
implementation 'com.android.support:cardview-v7:25.4.0'
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
|
||||
implementation 'me.dm7.barcodescanner:zxing:1.9.8'
|
||||
|
||||
implementation "com.squareup.okhttp3:okhttp:$rootProject.ext.okHttpVersion"
|
||||
|
|
|
@ -695,6 +695,23 @@ Java_com_m2049r_xmrwallet_model_Wallet_isSynchronized(JNIEnv *env, jobject insta
|
|||
return static_cast<jboolean>(wallet->synchronized());
|
||||
}
|
||||
|
||||
//void cn_slow_hash(const void *data, size_t length, char *hash); // from crypto/hash-ops.h
|
||||
JNIEXPORT jbyteArray JNICALL
|
||||
Java_com_m2049r_xmrwallet_util_KeyStoreHelper_cnSlowHash(JNIEnv *env, jobject clazz,
|
||||
jbyteArray data) {
|
||||
|
||||
jbyte *buffer = env->GetByteArrayElements(data, NULL);
|
||||
jsize size = env->GetArrayLength(data);
|
||||
char hash[HASH_SIZE];
|
||||
cn_slow_hash(buffer, (size_t) size, hash);
|
||||
|
||||
env->ReleaseByteArrayElements(data, buffer, JNI_ABORT); // do not update java byte[]
|
||||
|
||||
jbyteArray result = env->NewByteArray(HASH_SIZE);
|
||||
env->SetByteArrayRegion(result, 0, HASH_SIZE, (jbyte *) hash);
|
||||
return result;
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_com_m2049r_xmrwallet_model_Wallet_getDisplayAmount(JNIEnv *env, jobject clazz,
|
||||
jlong amount) {
|
||||
|
@ -1083,7 +1100,8 @@ Java_com_m2049r_xmrwallet_model_PendingTransaction_getTxCount(JNIEnv *env, jobje
|
|||
//static void error(const std::string &category, const std::string &str);
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_m2049r_xmrwallet_model_WalletManager_initLogger(JNIEnv *env, jobject instance,
|
||||
jstring argv0, jstring default_log_base_name) {
|
||||
jstring argv0,
|
||||
jstring default_log_base_name) {
|
||||
|
||||
const char *_argv0 = env->GetStringUTFChars(argv0, NULL);
|
||||
const char *_default_log_base_name = env->GetStringUTFChars(default_log_base_name, NULL);
|
||||
|
@ -1153,7 +1171,6 @@ Java_com_m2049r_xmrwallet_model_WalletManager_setLogLevel(JNIEnv *env, jobject i
|
|||
}
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#define XMRWALLET_WALLET_LIB_H
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
/*
|
||||
#include <android/log.h>
|
||||
|
||||
|
@ -27,13 +28,13 @@
|
|||
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
|
||||
*/
|
||||
|
||||
jfieldID getHandleField(JNIEnv *env, jobject obj, const char* fieldName = "handle") {
|
||||
jfieldID getHandleField(JNIEnv *env, jobject obj, const char *fieldName = "handle") {
|
||||
jclass c = env->GetObjectClass(obj);
|
||||
return env->GetFieldID(c, fieldName, "J"); // of type long
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T *getHandle(JNIEnv *env, jobject obj, const char* fieldName = "handle") {
|
||||
template<typename T>
|
||||
T *getHandle(JNIEnv *env, jobject obj, const char *fieldName = "handle") {
|
||||
jlong handle = env->GetLongField(obj, getHandleField(env, obj, fieldName));
|
||||
return reinterpret_cast<T *>(handle);
|
||||
}
|
||||
|
@ -42,10 +43,27 @@ void setHandleFromLong(JNIEnv *env, jobject obj, jlong handle) {
|
|||
env->SetLongField(obj, getHandleField(env, obj), handle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template<typename T>
|
||||
void setHandle(JNIEnv *env, jobject obj, T *t) {
|
||||
jlong handle = reinterpret_cast<jlong>(t);
|
||||
setHandleFromLong(env, obj, handle);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
// from monero-core crypto/hash-ops.h - avoid #including monero code here
|
||||
enum {
|
||||
HASH_SIZE = 32,
|
||||
HASH_DATA_AREA = 136
|
||||
};
|
||||
|
||||
void cn_slow_hash(const void *data, size_t length, char *hash);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //XMRWALLET_WALLET_LIB_H
|
||||
|
|
|
@ -34,6 +34,7 @@ import android.view.inputmethod.EditorInfo;
|
|||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.m2049r.xmrwallet.util.KeyStoreHelper;
|
||||
import com.m2049r.xmrwallet.util.RestoreHeight;
|
||||
import com.m2049r.xmrwallet.widget.Toolbar;
|
||||
import com.m2049r.xmrwallet.model.Wallet;
|
||||
|
@ -424,17 +425,20 @@ public class GenerateFragment extends Fragment {
|
|||
String name = etWalletName.getEditText().getText().toString();
|
||||
String password = etWalletPassword.getEditText().getText().toString();
|
||||
|
||||
// create the real wallet password
|
||||
String crazyPass = KeyStoreHelper.getCrazyPass(getActivity(), password);
|
||||
|
||||
long height = getHeight();
|
||||
if (height < 0) height = 0;
|
||||
|
||||
if (type.equals(TYPE_NEW)) {
|
||||
bGenerate.setEnabled(false);
|
||||
activityCallback.onGenerate(name, password);
|
||||
activityCallback.onGenerate(name, crazyPass);
|
||||
} else if (type.equals(TYPE_SEED)) {
|
||||
if (!checkMnemonic()) return;
|
||||
String seed = etWalletMnemonic.getEditText().getText().toString();
|
||||
bGenerate.setEnabled(false);
|
||||
activityCallback.onGenerate(name, password, seed, height);
|
||||
activityCallback.onGenerate(name, crazyPass, seed, height);
|
||||
} else if (type.equals(TYPE_KEY) || type.equals(TYPE_VIEWONLY)) {
|
||||
if (checkAddress() && checkViewKey() && checkSpendKey()) {
|
||||
bGenerate.setEnabled(false);
|
||||
|
@ -444,7 +448,7 @@ public class GenerateFragment extends Fragment {
|
|||
if (type.equals(TYPE_KEY)) {
|
||||
spendKey = etWalletSpendKey.getEditText().getText().toString();
|
||||
}
|
||||
activityCallback.onGenerate(name, password, address, viewKey, spendKey, height);
|
||||
activityCallback.onGenerate(name, crazyPass, address, viewKey, spendKey, height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,16 +16,23 @@
|
|||
|
||||
package com.m2049r.xmrwallet;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.TextInputLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.LinearLayout;
|
||||
|
@ -35,12 +42,15 @@ import android.widget.TextView;
|
|||
import android.widget.Toast;
|
||||
|
||||
import com.m2049r.xmrwallet.model.NetworkType;
|
||||
import com.m2049r.xmrwallet.util.KeyStoreHelper;
|
||||
import com.m2049r.xmrwallet.widget.Toolbar;
|
||||
import com.m2049r.xmrwallet.model.Wallet;
|
||||
import com.m2049r.xmrwallet.model.WalletManager;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
import com.m2049r.xmrwallet.util.MoneroThreadPoolExecutor;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
public class GenerateReviewFragment extends Fragment {
|
||||
|
@ -51,7 +61,6 @@ public class GenerateReviewFragment extends Fragment {
|
|||
ScrollView scrollview;
|
||||
|
||||
ProgressBar pbProgress;
|
||||
TextView tvWalletName;
|
||||
TextView tvWalletPassword;
|
||||
TextView tvWalletAddress;
|
||||
TextView tvWalletMnemonic;
|
||||
|
@ -59,9 +68,18 @@ public class GenerateReviewFragment extends Fragment {
|
|||
TextView tvWalletSpendKey;
|
||||
ImageButton bCopyAddress;
|
||||
LinearLayout llAdvancedInfo;
|
||||
LinearLayout llPassword;
|
||||
Button bAdvancedInfo;
|
||||
Button bAccept;
|
||||
|
||||
// TODO fix visibility of variables
|
||||
String walletPath;
|
||||
String walletName;
|
||||
// we need to keep the password so the user is not asked again if they want to change it
|
||||
// note they can only enter this fragment immediately after entering the password
|
||||
// so asking them to enter it a couple of seconds later seems silly
|
||||
String walletPassword = null;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
|
@ -70,7 +88,6 @@ public class GenerateReviewFragment extends Fragment {
|
|||
|
||||
scrollview = (ScrollView) view.findViewById(R.id.scrollview);
|
||||
pbProgress = (ProgressBar) view.findViewById(R.id.pbProgress);
|
||||
tvWalletName = (TextView) view.findViewById(R.id.tvWalletName);
|
||||
tvWalletPassword = (TextView) view.findViewById(R.id.tvWalletPassword);
|
||||
tvWalletAddress = (TextView) view.findViewById(R.id.tvWalletAddress);
|
||||
tvWalletViewKey = (TextView) view.findViewById(R.id.tvWalletViewKey);
|
||||
|
@ -79,12 +96,14 @@ public class GenerateReviewFragment extends Fragment {
|
|||
bCopyAddress = (ImageButton) view.findViewById(R.id.bCopyAddress);
|
||||
bAdvancedInfo = (Button) view.findViewById(R.id.bAdvancedInfo);
|
||||
llAdvancedInfo = (LinearLayout) view.findViewById(R.id.llAdvancedInfo);
|
||||
llPassword = (LinearLayout) view.findViewById(R.id.llPassword);
|
||||
|
||||
bAccept = (Button) view.findViewById(R.id.bAccept);
|
||||
|
||||
boolean testnet = WalletManager.getInstance().getNetworkType() != NetworkType.NetworkType_Mainnet;
|
||||
tvWalletMnemonic.setTextIsSelectable(testnet);
|
||||
tvWalletSpendKey.setTextIsSelectable(testnet);
|
||||
tvWalletPassword.setTextIsSelectable(testnet);
|
||||
|
||||
bAccept.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
|
@ -112,17 +131,20 @@ public class GenerateReviewFragment extends Fragment {
|
|||
}
|
||||
});
|
||||
|
||||
showProgress();
|
||||
|
||||
Bundle args = getArguments();
|
||||
String path = args.getString("path");
|
||||
String password = args.getString("password");
|
||||
this.type = args.getString("type");
|
||||
new AsyncShow().executeOnExecutor(MoneroThreadPoolExecutor.MONERO_THREAD_POOL_EXECUTOR,
|
||||
path, password);
|
||||
type = args.getString("type");
|
||||
walletPath = args.getString("path");
|
||||
showDetails(args.getString("password"));
|
||||
return view;
|
||||
}
|
||||
|
||||
void showDetails(String password) {
|
||||
walletPassword = password;
|
||||
showProgress();
|
||||
tvWalletPassword.setText(null);
|
||||
new AsyncShow().executeOnExecutor(MoneroThreadPoolExecutor.MONERO_THREAD_POOL_EXECUTOR, walletPath);
|
||||
}
|
||||
|
||||
void copyViewKey() {
|
||||
Helper.clipBoardCopy(getActivity(), getString(R.string.label_copy_viewkey), tvWalletViewKey.getText().toString());
|
||||
Toast.makeText(getActivity(), getString(R.string.message_copy_viewkey), Toast.LENGTH_SHORT).show();
|
||||
|
@ -151,15 +173,11 @@ public class GenerateReviewFragment extends Fragment {
|
|||
String type;
|
||||
|
||||
private void acceptWallet() {
|
||||
String name = tvWalletName.getText().toString();
|
||||
String password = tvWalletPassword.getText().toString();
|
||||
bAccept.setEnabled(false);
|
||||
acceptCallback.onAccept(name, password);
|
||||
acceptCallback.onAccept(walletName, walletPassword);
|
||||
}
|
||||
|
||||
private class AsyncShow extends AsyncTask<String, Void, Boolean> {
|
||||
String password;
|
||||
|
||||
String name;
|
||||
String address;
|
||||
String seed;
|
||||
|
@ -170,9 +188,8 @@ public class GenerateReviewFragment extends Fragment {
|
|||
|
||||
@Override
|
||||
protected Boolean doInBackground(String... params) {
|
||||
if (params.length != 2) return false;
|
||||
if (params.length != 1) return false;
|
||||
String walletPath = params[0];
|
||||
password = params[1];
|
||||
|
||||
Wallet wallet;
|
||||
boolean closeWallet;
|
||||
|
@ -180,7 +197,7 @@ public class GenerateReviewFragment extends Fragment {
|
|||
wallet = GenerateReviewFragment.this.walletCallback.getWallet();
|
||||
closeWallet = false;
|
||||
} else {
|
||||
wallet = WalletManager.getInstance().openWallet(walletPath, password);
|
||||
wallet = WalletManager.getInstance().openWallet(walletPath, walletPassword);
|
||||
closeWallet = true;
|
||||
}
|
||||
name = wallet.getName();
|
||||
|
@ -204,13 +221,16 @@ public class GenerateReviewFragment extends Fragment {
|
|||
protected void onPostExecute(Boolean result) {
|
||||
super.onPostExecute(result);
|
||||
if (!isAdded()) return; // never mind
|
||||
tvWalletName.setText(name);
|
||||
walletName = name;
|
||||
if (result) {
|
||||
if (type.equals(GenerateReviewFragment.VIEW_TYPE_ACCEPT)) {
|
||||
tvWalletPassword.setText(password);
|
||||
bAccept.setVisibility(View.VISIBLE);
|
||||
bAccept.setEnabled(true);
|
||||
}
|
||||
if (walletPassword != null) {
|
||||
llPassword.setVisibility(View.VISIBLE);
|
||||
tvWalletPassword.setText(walletPassword);
|
||||
}
|
||||
tvWalletAddress.setText(address);
|
||||
tvWalletMnemonic.setText(seed);
|
||||
tvWalletViewKey.setText(viewKey);
|
||||
|
@ -233,6 +253,7 @@ public class GenerateReviewFragment extends Fragment {
|
|||
}
|
||||
|
||||
Listener activityCallback = null;
|
||||
ProgressListener progressCallback = null;
|
||||
AcceptListener acceptCallback = null;
|
||||
ListenerWithWallet walletCallback = null;
|
||||
|
||||
|
@ -242,6 +263,13 @@ public class GenerateReviewFragment extends Fragment {
|
|||
void setToolbarButton(int type);
|
||||
}
|
||||
|
||||
public interface ProgressListener {
|
||||
void showProgressDialog(int msgId);
|
||||
|
||||
void dismissProgressDialog();
|
||||
}
|
||||
|
||||
|
||||
public interface AcceptListener {
|
||||
void onAccept(String name, String password);
|
||||
}
|
||||
|
@ -256,6 +284,9 @@ public class GenerateReviewFragment extends Fragment {
|
|||
if (context instanceof Listener) {
|
||||
this.activityCallback = (Listener) context;
|
||||
}
|
||||
if (context instanceof ProgressListener) {
|
||||
this.progressCallback = (ProgressListener) context;
|
||||
}
|
||||
if (context instanceof AcceptListener) {
|
||||
this.acceptCallback = (AcceptListener) context;
|
||||
}
|
||||
|
@ -268,9 +299,7 @@ public class GenerateReviewFragment extends Fragment {
|
|||
public void onResume() {
|
||||
super.onResume();
|
||||
Timber.d("onResume()");
|
||||
String name = tvWalletName.getText().toString();
|
||||
if (name.isEmpty()) name = null;
|
||||
activityCallback.setTitle(name, getString(R.string.details_title));
|
||||
activityCallback.setTitle(walletName, getString(R.string.details_title));
|
||||
activityCallback.setToolbarButton(
|
||||
GenerateReviewFragment.VIEW_TYPE_ACCEPT.equals(type) ? Toolbar.BUTTON_NONE : Toolbar.BUTTON_BACK);
|
||||
}
|
||||
|
@ -295,7 +324,198 @@ public class GenerateReviewFragment extends Fragment {
|
|||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
String type = getArguments().getString("type");
|
||||
if (GenerateReviewFragment.VIEW_TYPE_ACCEPT.equals(type)) {
|
||||
inflater.inflate(R.menu.wallet_details_help_menu, menu);
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
} else {
|
||||
inflater.inflate(R.menu.wallet_details_menu, menu);
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
}
|
||||
}
|
||||
|
||||
boolean changeWalletPassword(String newPassword) {
|
||||
Wallet wallet;
|
||||
boolean closeWallet;
|
||||
if (type.equals(GenerateReviewFragment.VIEW_TYPE_WALLET)) {
|
||||
wallet = GenerateReviewFragment.this.walletCallback.getWallet();
|
||||
closeWallet = false;
|
||||
} else {
|
||||
wallet = WalletManager.getInstance().openWallet(walletPath, walletPassword);
|
||||
closeWallet = true;
|
||||
}
|
||||
|
||||
boolean ok = false;
|
||||
if (wallet.getStatus() == Wallet.Status.Status_Ok) {
|
||||
wallet.setPassword(newPassword);
|
||||
wallet.store();
|
||||
ok = true;
|
||||
} else {
|
||||
Timber.e(wallet.getErrorString());
|
||||
}
|
||||
if (closeWallet) wallet.close();
|
||||
return ok;
|
||||
}
|
||||
|
||||
private class AsyncChangePassword extends AsyncTask<String, Void, Boolean> {
|
||||
String newPassword;
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
if (progressCallback != null)
|
||||
progressCallback.showProgressDialog(R.string.changepw_progress);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(String... params) {
|
||||
if (params.length != 3) return false;
|
||||
File walletFile = Helper.getWalletFile(getActivity(), params[0]);
|
||||
String oldPassword = params[1];
|
||||
String userPassword = params[2];
|
||||
newPassword = KeyStoreHelper.getCrazyPass(getActivity(), userPassword);
|
||||
return changeWalletPassword(newPassword);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean result) {
|
||||
super.onPostExecute(result);
|
||||
if (getActivity().isDestroyed()) {
|
||||
return;
|
||||
}
|
||||
if (progressCallback != null)
|
||||
progressCallback.dismissProgressDialog();
|
||||
if (result) {
|
||||
Toast.makeText(getActivity(), getString(R.string.changepw_success), Toast.LENGTH_SHORT).show();
|
||||
showDetails(newPassword);
|
||||
} else {
|
||||
Toast.makeText(getActivity(), getString(R.string.changepw_failed), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AlertDialog openDialog = null; // for preventing opening of multiple dialogs
|
||||
|
||||
public AlertDialog createChangePasswordDialog() {
|
||||
if (openDialog != null) return null; // we are already open
|
||||
LayoutInflater li = LayoutInflater.from(getActivity());
|
||||
View promptsView = li.inflate(R.layout.prompt_changepw, null);
|
||||
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
|
||||
alertDialogBuilder.setView(promptsView);
|
||||
|
||||
final TextInputLayout etPasswordA = (TextInputLayout) promptsView.findViewById(R.id.etWalletPasswordA);
|
||||
etPasswordA.setHint(getString(R.string.prompt_changepw, walletName));
|
||||
|
||||
final TextInputLayout etPasswordB = (TextInputLayout) promptsView.findViewById(R.id.etWalletPasswordB);
|
||||
etPasswordB.setHint(getString(R.string.prompt_changepwB, walletName));
|
||||
|
||||
etPasswordA.getEditText().addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
if (etPasswordA.getError() != null) {
|
||||
etPasswordA.setError(null);
|
||||
}
|
||||
if (etPasswordB.getError() != null) {
|
||||
etPasswordB.setError(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start,
|
||||
int count, int after) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start,
|
||||
int before, int count) {
|
||||
}
|
||||
});
|
||||
|
||||
etPasswordB.getEditText().addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
if (etPasswordA.getError() != null) {
|
||||
etPasswordA.setError(null);
|
||||
}
|
||||
if (etPasswordB.getError() != null) {
|
||||
etPasswordB.setError(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start,
|
||||
int count, int after) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start,
|
||||
int before, int count) {
|
||||
}
|
||||
});
|
||||
|
||||
// set dialog message
|
||||
alertDialogBuilder
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(getString(R.string.label_ok), null)
|
||||
.setNegativeButton(getString(R.string.label_cancel),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
Helper.hideKeyboardAlways(getActivity());
|
||||
dialog.cancel();
|
||||
openDialog = null;
|
||||
}
|
||||
});
|
||||
|
||||
openDialog = alertDialogBuilder.create();
|
||||
openDialog.setOnShowListener(new DialogInterface.OnShowListener() {
|
||||
@Override
|
||||
public void onShow(final DialogInterface dialog) {
|
||||
Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
String newPasswordA = etPasswordA.getEditText().getText().toString();
|
||||
String newPasswordB = etPasswordB.getEditText().getText().toString();
|
||||
// disallow empty passwords
|
||||
if (newPasswordA.isEmpty()) {
|
||||
etPasswordA.setError(getString(R.string.generate_empty_passwordB));
|
||||
} else if (!newPasswordA.equals(newPasswordB)) {
|
||||
etPasswordB.setError(getString(R.string.generate_bad_passwordB));
|
||||
} else if (newPasswordA.equals(newPasswordB)) {
|
||||
new AsyncChangePassword().execute(walletName, walletPassword, newPasswordA);
|
||||
Helper.hideKeyboardAlways(getActivity());
|
||||
openDialog.dismiss();
|
||||
openDialog = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// accept keyboard "ok"
|
||||
etPasswordB.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
|
||||
String newPasswordA = etPasswordA.getEditText().getText().toString();
|
||||
String newPasswordB = etPasswordB.getEditText().getText().toString();
|
||||
// disallow empty passwords
|
||||
if (newPasswordA.isEmpty()) {
|
||||
etPasswordA.setError(getString(R.string.generate_empty_passwordB));
|
||||
} else if (!newPasswordA.equals(newPasswordB)) {
|
||||
etPasswordB.setError(getString(R.string.generate_bad_passwordB));
|
||||
} else if (newPasswordA.equals(newPasswordB)) {
|
||||
new AsyncChangePassword().execute(walletName, walletPassword, newPasswordA);
|
||||
Helper.hideKeyboardAlways(getActivity());
|
||||
openDialog.dismiss();
|
||||
openDialog = null;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return openDialog;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -54,7 +54,9 @@ import com.m2049r.xmrwallet.model.NetworkType;
|
|||
import com.m2049r.xmrwallet.model.Wallet;
|
||||
import com.m2049r.xmrwallet.model.WalletManager;
|
||||
import com.m2049r.xmrwallet.service.WalletService;
|
||||
import com.m2049r.xmrwallet.util.CrazyPassEncoder;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
import com.m2049r.xmrwallet.util.KeyStoreHelper;
|
||||
import com.m2049r.xmrwallet.util.MoneroThreadPoolExecutor;
|
||||
import com.m2049r.xmrwallet.widget.Toolbar;
|
||||
|
||||
|
@ -71,7 +73,8 @@ import timber.log.Timber;
|
|||
|
||||
public class LoginActivity extends SecureActivity
|
||||
implements LoginFragment.Listener, GenerateFragment.Listener,
|
||||
GenerateReviewFragment.Listener, GenerateReviewFragment.AcceptListener, ReceiveFragment.Listener {
|
||||
GenerateReviewFragment.Listener, GenerateReviewFragment.AcceptListener,
|
||||
GenerateReviewFragment.ProgressListener, ReceiveFragment.Listener {
|
||||
private static final String GENERATE_STACK = "gen";
|
||||
|
||||
static final int DAEMON_TIMEOUT = 500; // deamon must respond in 500ms
|
||||
|
@ -437,16 +440,30 @@ public class LoginActivity extends SecureActivity
|
|||
}
|
||||
}
|
||||
|
||||
public void onWalletChangePassword() {//final String walletName, final String walletPassword) {
|
||||
try {
|
||||
GenerateReviewFragment detailsFragment = (GenerateReviewFragment)
|
||||
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
|
||||
AlertDialog dialog = detailsFragment.createChangePasswordDialog();
|
||||
if (dialog != null) {
|
||||
Helper.showKeyboard(dialog);
|
||||
dialog.show();
|
||||
}
|
||||
} catch (ClassCastException ex) {
|
||||
Timber.w("onWalletChangePassword() called, but no GenerateReviewFragment active");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAddWallet(String type) {
|
||||
if (checkServiceRunning()) return;
|
||||
startGenerateFragment(type);
|
||||
}
|
||||
|
||||
AlertDialog passwordDialog = null; // for preventing multiple clicks in wallet list
|
||||
AlertDialog openDialog = null; // for preventing opening of multiple dialogs
|
||||
|
||||
void promptPassword(final String wallet, final PasswordAction action) {
|
||||
if (passwordDialog != null) return; // we are already asking for password
|
||||
if (openDialog != null) return; // we are already asking for password
|
||||
Context context = LoginActivity.this;
|
||||
LayoutInflater li = LayoutInflater.from(context);
|
||||
View promptsView = li.inflate(R.layout.prompt_password, null);
|
||||
|
@ -486,12 +503,12 @@ public class LoginActivity extends SecureActivity
|
|||
public void onClick(DialogInterface dialog, int id) {
|
||||
Helper.hideKeyboardAlways(LoginActivity.this);
|
||||
dialog.cancel();
|
||||
passwordDialog = null;
|
||||
openDialog = null;
|
||||
}
|
||||
});
|
||||
passwordDialog = alertDialogBuilder.create();
|
||||
openDialog = alertDialogBuilder.create();
|
||||
|
||||
passwordDialog.setOnShowListener(new DialogInterface.OnShowListener() {
|
||||
openDialog.setOnShowListener(new DialogInterface.OnShowListener() {
|
||||
@Override
|
||||
public void onShow(DialogInterface dialog) {
|
||||
Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
|
||||
|
@ -501,8 +518,8 @@ public class LoginActivity extends SecureActivity
|
|||
String pass = etPassword.getEditText().getText().toString();
|
||||
if (processPasswordEntry(wallet, pass, action)) {
|
||||
Helper.hideKeyboardAlways(LoginActivity.this);
|
||||
passwordDialog.dismiss();
|
||||
passwordDialog = null;
|
||||
openDialog.dismiss();
|
||||
openDialog = null;
|
||||
} else {
|
||||
etPassword.setError(getString(R.string.bad_password));
|
||||
}
|
||||
|
@ -511,8 +528,6 @@ public class LoginActivity extends SecureActivity
|
|||
}
|
||||
});
|
||||
|
||||
Helper.showKeyboard(passwordDialog);
|
||||
|
||||
// accept keyboard "ok"
|
||||
etPassword.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||
|
@ -520,8 +535,8 @@ public class LoginActivity extends SecureActivity
|
|||
String pass = etPassword.getEditText().getText().toString();
|
||||
if (processPasswordEntry(wallet, pass, action)) {
|
||||
Helper.hideKeyboardAlways(LoginActivity.this);
|
||||
passwordDialog.dismiss();
|
||||
passwordDialog = null;
|
||||
openDialog.dismiss();
|
||||
openDialog = null;
|
||||
} else {
|
||||
etPassword.setError(getString(R.string.bad_password));
|
||||
}
|
||||
|
@ -531,14 +546,37 @@ public class LoginActivity extends SecureActivity
|
|||
}
|
||||
});
|
||||
|
||||
passwordDialog.show();
|
||||
Helper.showKeyboard(openDialog);
|
||||
openDialog.show();
|
||||
}
|
||||
|
||||
private boolean checkWalletPassword(String walletName, String password) {
|
||||
// try to figure out what the real wallet password is given the user password
|
||||
// which could be the actual wallet password or a (maybe malformed) CrAzYpass
|
||||
// or the password used to derive the CrAzYpass for the wallet
|
||||
private String getWalletPassword(String walletName, String password) {
|
||||
String walletPath = new File(Helper.getWalletRoot(getApplicationContext()),
|
||||
walletName + ".keys").getAbsolutePath();
|
||||
// only test view key
|
||||
return WalletManager.getInstance().verifyWalletPassword(walletPath, password, true);
|
||||
|
||||
// try with entered password (which could be a legacy password or a CrAzYpass)
|
||||
if (WalletManager.getInstance().verifyWalletPassword(walletPath, password, true)) {
|
||||
return password;
|
||||
}
|
||||
|
||||
// maybe this is a malformed CrAzYpass?
|
||||
String possibleCrazyPass = CrazyPassEncoder.reformat(password);
|
||||
if (possibleCrazyPass != null) { // looks like a CrAzYpass
|
||||
if (WalletManager.getInstance().verifyWalletPassword(walletPath, possibleCrazyPass, true)) {
|
||||
return possibleCrazyPass;
|
||||
}
|
||||
}
|
||||
|
||||
// generate & try with CrAzYpass
|
||||
String crazyPass = KeyStoreHelper.getCrazyPass(this, password);
|
||||
if (WalletManager.getInstance().verifyWalletPassword(walletPath, crazyPass, true)) {
|
||||
return crazyPass;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
interface PasswordAction {
|
||||
|
@ -546,8 +584,9 @@ public class LoginActivity extends SecureActivity
|
|||
}
|
||||
|
||||
private boolean processPasswordEntry(String walletName, String pass, PasswordAction action) {
|
||||
if (checkWalletPassword(walletName, pass)) {
|
||||
action.action(walletName, pass);
|
||||
String walletPassword = getWalletPassword(walletName, pass);
|
||||
if (walletPassword != null) {
|
||||
action.action(walletName, walletPassword);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
@ -598,7 +637,8 @@ public class LoginActivity extends SecureActivity
|
|||
|
||||
ProgressDialog progressDialog = null;
|
||||
|
||||
private void showProgressDialog(int msgId) {
|
||||
@Override
|
||||
public void showProgressDialog(int msgId) {
|
||||
showProgressDialog(msgId, 0);
|
||||
}
|
||||
|
||||
|
@ -617,7 +657,8 @@ public class LoginActivity extends SecureActivity
|
|||
}
|
||||
}
|
||||
|
||||
private void dismissProgressDialog() {
|
||||
@Override
|
||||
public void dismissProgressDialog() {
|
||||
if (progressDialog != null && progressDialog.isShowing()) {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
|
@ -1077,6 +1118,9 @@ public class LoginActivity extends SecureActivity
|
|||
case R.id.action_details_help:
|
||||
HelpFragment.display(getSupportFragmentManager(), R.string.help_details);
|
||||
return true;
|
||||
case R.id.action_details_changepw:
|
||||
onWalletChangePassword();
|
||||
return true;
|
||||
case R.id.action_license_info:
|
||||
AboutFragment.display(getSupportFragmentManager());
|
||||
return true;
|
||||
|
|
|
@ -174,6 +174,9 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
|
|||
case R.id.action_details_help:
|
||||
HelpFragment.display(getSupportFragmentManager(), R.string.help_details);
|
||||
return true;
|
||||
case R.id.action_details_changepw:
|
||||
onWalletChangePassword();
|
||||
return true;
|
||||
case R.id.action_help_send:
|
||||
HelpFragment.display(getSupportFragmentManager(), R.string.help_send);
|
||||
return true;
|
||||
|
@ -182,6 +185,20 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
|
|||
}
|
||||
}
|
||||
|
||||
public void onWalletChangePassword() {//final String walletName, final String walletPassword) {
|
||||
try {
|
||||
GenerateReviewFragment detailsFragment = (GenerateReviewFragment)
|
||||
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
|
||||
AlertDialog dialog = detailsFragment.createChangePasswordDialog();
|
||||
if (dialog != null) {
|
||||
Helper.showKeyboard(dialog);
|
||||
dialog.show();
|
||||
}
|
||||
} catch (ClassCastException ex) {
|
||||
Timber.w("onWalletChangePassword() called, but no GenerateReviewFragment active");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
Timber.d("onCreate()");
|
||||
|
@ -682,6 +699,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
|
|||
case DialogInterface.BUTTON_POSITIVE:
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString("type", GenerateReviewFragment.VIEW_TYPE_WALLET);
|
||||
extras.putString("password", getIntent().getExtras().getString(REQUEST_PW));
|
||||
replaceFragment(new GenerateReviewFragment(), null, extras);
|
||||
break;
|
||||
case DialogInterface.BUTTON_NEGATIVE:
|
||||
|
|
|
@ -291,7 +291,7 @@ public class SendFragment extends Fragment
|
|||
pagerAdapter.notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
Timber.d("New Mode = " + mode.toString());
|
||||
Timber.d("New Mode = %s", mode.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -350,7 +350,7 @@ public class SendFragment extends Fragment
|
|||
@Override
|
||||
public SendWizardFragment getItem(int position) {
|
||||
Timber.d("getItem(%d) CREATE", position);
|
||||
Timber.d("Mode=" + mode.toString());
|
||||
Timber.d("Mode=%s", mode.toString());
|
||||
if (mode == Mode.XMR) {
|
||||
switch (position) {
|
||||
case POS_ADDRESS:
|
||||
|
|
|
@ -275,5 +275,4 @@ public class Wallet {
|
|||
//virtual bool parse_uri(const std::string &uri, std::string &address, std::string &payment_id, uint64_t &tvAmount, std::string &tx_description, std::string &recipient_name, std::vector<std::string> &unknown_parameters, std::string &error) = 0;
|
||||
//virtual bool rescanSpent() = 0;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -271,6 +271,7 @@ public class WalletManager {
|
|||
//TODO static std::tuple<bool, std::string, std::string, std::string, std::string> checkUpdates(const std::string &software, const std::string &subdir);
|
||||
|
||||
static public native void initLogger(String argv0, String defaultLogBaseName);
|
||||
|
||||
//TODO: maybe put these in an enum like in monero core - but why?
|
||||
static public int LOGLEVEL_SILENT = -1;
|
||||
static public int LOGLEVEL_WARN = 0;
|
||||
|
@ -278,9 +279,14 @@ public class WalletManager {
|
|||
static public int LOGLEVEL_DEBUG = 2;
|
||||
static public int LOGLEVEL_TRACE = 3;
|
||||
static public int LOGLEVEL_MAX = 4;
|
||||
|
||||
static public native void setLogLevel(int level);
|
||||
|
||||
static public native void logDebug(String category, String message);
|
||||
|
||||
static public native void logInfo(String category, String message);
|
||||
|
||||
static public native void logWarning(String category, String message);
|
||||
|
||||
static public native void logError(String category, String message);
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package com.m2049r.xmrwallet.util;
|
||||
|
||||
import com.m2049r.xmrwallet.model.WalletManager;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
public class CrazyPassEncoder {
|
||||
static final String BASE = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
|
||||
static final int PW_CHARS = 52;
|
||||
|
||||
// this takes a 32 byte buffer and converts it to 52 alphnumeric characters
|
||||
// separated by blanks every 4 characters = 13 groups of 4
|
||||
// always (padding by Xs if need be
|
||||
static public String encode(byte[] data) {
|
||||
if (data.length != 32) throw new IllegalArgumentException("data[] is not 32 bytes long");
|
||||
BigInteger rest = new BigInteger(1, data);
|
||||
BigInteger remainder;
|
||||
final StringBuilder result = new StringBuilder();
|
||||
final BigInteger base = BigInteger.valueOf(BASE.length());
|
||||
int i = 0;
|
||||
do {
|
||||
if ((i > 0) && (i % 4 == 0)) result.append(' ');
|
||||
i++;
|
||||
remainder = rest.remainder(base);
|
||||
rest = rest.divide(base);
|
||||
result.append(BASE.charAt(remainder.intValue()));
|
||||
} while (!BigInteger.ZERO.equals(rest));
|
||||
// pad it
|
||||
while (i < PW_CHARS) {
|
||||
if ((i > 0) && (i % 4 == 0)) result.append(' ');
|
||||
result.append('2');
|
||||
i++;
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
static public String reformat(String password) {
|
||||
// maybe this is a CrAzYpass without blanks? or lowercase letters
|
||||
String noBlanks = password.toUpperCase().replaceAll(" ", "");
|
||||
if (noBlanks.length() == PW_CHARS) { // looks like a CrAzYpass
|
||||
// insert blanks every 4 characters
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < PW_CHARS; i++) {
|
||||
if ((i > 0) && (i % 4 == 0)) sb.append(' ');
|
||||
char c = noBlanks.charAt(i);
|
||||
if (BASE.indexOf(c) < 0) return null; // invalid character found
|
||||
sb.append(c);
|
||||
}
|
||||
return sb.toString();
|
||||
} else {
|
||||
return null; // not a CrAzYpass
|
||||
}
|
||||
}
|
||||
}
|
|
@ -47,6 +47,7 @@ import com.m2049r.xmrwallet.model.WalletManager;
|
|||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.math.BigInteger;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.net.URL;
|
||||
|
@ -280,6 +281,14 @@ public class Helper {
|
|||
}
|
||||
}
|
||||
|
||||
private final static char[] HexArray = "0123456789ABCDEF".toCharArray();
|
||||
|
||||
public static String bytesToHex(byte[] data) {
|
||||
if ((data != null) && (data.length > 0))
|
||||
return String.format("%0" + (data.length * 2) + "X", new BigInteger(1, data));
|
||||
else return "";
|
||||
}
|
||||
|
||||
static public void setMoneroHome(Context context) {
|
||||
try {
|
||||
String home = getStorage(context, HOME_DIR).getAbsolutePath();
|
||||
|
|
|
@ -0,0 +1,217 @@
|
|||
/*
|
||||
* Copyright 2018 m2049r
|
||||
* Copyright 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.m2049r.xmrwallet.util;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.security.KeyPairGeneratorSpec;
|
||||
import android.security.keystore.KeyGenParameterSpec;
|
||||
import android.security.keystore.KeyProperties;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.InvalidAlgorithmParameterException;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.KeyPair;
|
||||
import java.security.KeyPairGenerator;
|
||||
import java.security.KeyStore;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.NoSuchProviderException;
|
||||
import java.security.PrivateKey;
|
||||
import java.security.Signature;
|
||||
import java.security.SignatureException;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
|
||||
import javax.security.auth.x500.X500Principal;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
public class KeyStoreHelper {
|
||||
|
||||
static {
|
||||
System.loadLibrary("monerujo");
|
||||
}
|
||||
|
||||
public static native byte[] cnSlowHash(byte[] data);
|
||||
|
||||
static final private String RSA_ALIAS = "MonerujoRSA";
|
||||
|
||||
public static String getCrazyPass(Context context, String password) {
|
||||
// TODO we should check Locale.getDefault().getLanguage() here but for now we default to English
|
||||
return getCrazyPass(context, password, "English");
|
||||
}
|
||||
|
||||
public static String getCrazyPass(Context context, String password, String language) {
|
||||
byte[] data = password.getBytes(StandardCharsets.UTF_8);
|
||||
byte[] sig = null;
|
||||
try {
|
||||
KeyStoreHelper.createKeys(context, RSA_ALIAS);
|
||||
sig = KeyStoreHelper.signData(RSA_ALIAS, data);
|
||||
} catch (Exception ex) {
|
||||
throw new IllegalStateException(ex);
|
||||
}
|
||||
return CrazyPassEncoder.encode(cnSlowHash(sig));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a public and private key and stores it using the Android Key
|
||||
* Store, so that only this application will be able to access the keys.
|
||||
*/
|
||||
public static void createKeys(Context context, String alias) throws NoSuchProviderException,
|
||||
NoSuchAlgorithmException, InvalidAlgorithmParameterException, KeyStoreException {
|
||||
KeyStore keyStore = KeyStore.getInstance(SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
|
||||
try {
|
||||
keyStore.load(null);
|
||||
} catch (Exception ex) { // don't care why it failed
|
||||
throw new IllegalStateException("Could not load KeySotre", ex);
|
||||
}
|
||||
if (!keyStore.containsAlias(alias)) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
createKeysJBMR2(context, alias);
|
||||
} else {
|
||||
createKeysM(alias);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void deleteKeys(String alias) throws KeyStoreException {
|
||||
KeyStore keyStore = KeyStore.getInstance(SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
|
||||
try {
|
||||
keyStore.load(null);
|
||||
keyStore.deleteEntry(alias);
|
||||
} catch (Exception ex) { // don't care why it failed
|
||||
throw new IllegalStateException("Could not load KeySotre", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
|
||||
private static void createKeysJBMR2(Context context, String alias) throws NoSuchProviderException,
|
||||
NoSuchAlgorithmException, InvalidAlgorithmParameterException {
|
||||
|
||||
Calendar start = new GregorianCalendar();
|
||||
Calendar end = new GregorianCalendar();
|
||||
end.add(Calendar.YEAR, 300);
|
||||
|
||||
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context)
|
||||
.setAlias(alias)
|
||||
.setSubject(new X500Principal("CN=" + alias))
|
||||
.setSerialNumber(BigInteger.valueOf(Math.abs(alias.hashCode())))
|
||||
.setStartDate(start.getTime()).setEndDate(end.getTime())
|
||||
.build();
|
||||
// defaults to 2048 bit modulus
|
||||
KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance(
|
||||
SecurityConstants.TYPE_RSA,
|
||||
SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
|
||||
kpGenerator.initialize(spec);
|
||||
KeyPair kp = kpGenerator.generateKeyPair();
|
||||
Timber.d("preM Keys created");
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.M)
|
||||
private static void createKeysM(String alias) {
|
||||
try {
|
||||
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(
|
||||
KeyProperties.KEY_ALGORITHM_RSA, SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
|
||||
keyPairGenerator.initialize(
|
||||
new KeyGenParameterSpec.Builder(
|
||||
alias, KeyProperties.PURPOSE_SIGN)
|
||||
.setDigests(KeyProperties.DIGEST_SHA256)
|
||||
.setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
|
||||
.build());
|
||||
KeyPair keyPair = keyPairGenerator.generateKeyPair();
|
||||
Timber.d("M Keys created");
|
||||
} catch (NoSuchProviderException | NoSuchAlgorithmException | InvalidAlgorithmParameterException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static KeyStore.PrivateKeyEntry getPrivateKeyEntry(String alias) {
|
||||
try {
|
||||
KeyStore ks = KeyStore
|
||||
.getInstance(SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
|
||||
ks.load(null);
|
||||
KeyStore.Entry entry = ks.getEntry(alias, null);
|
||||
|
||||
if (entry == null) {
|
||||
Timber.w("No key found under alias: %s", alias);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!(entry instanceof KeyStore.PrivateKeyEntry)) {
|
||||
Timber.w("Not an instance of a PrivateKeyEntry");
|
||||
return null;
|
||||
}
|
||||
return (KeyStore.PrivateKeyEntry) entry;
|
||||
} catch (Exception ex) {
|
||||
Timber.e(ex);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Signs the data using the key pair stored in the Android Key Store. This
|
||||
* signature can be used with the data later to verify it was signed by this
|
||||
* application.
|
||||
*
|
||||
* @return The data signature generated
|
||||
*/
|
||||
public static byte[] signData(String alias, byte[] data) throws NoSuchAlgorithmException,
|
||||
InvalidKeyException, SignatureException {
|
||||
|
||||
PrivateKey privateKey = getPrivateKeyEntry(alias).getPrivateKey();
|
||||
Signature s = Signature.getInstance(SecurityConstants.SIGNATURE_SHA256withRSA);
|
||||
s.initSign(privateKey);
|
||||
s.update(data);
|
||||
return s.sign();
|
||||
}
|
||||
|
||||
/**
|
||||
* Given some data and a signature, uses the key pair stored in the Android
|
||||
* Key Store to verify that the data was signed by this application, using
|
||||
* that key pair.
|
||||
*
|
||||
* @param data The data to be verified.
|
||||
* @param signature The signature provided for the data.
|
||||
* @return A boolean value telling you whether the signature is valid or
|
||||
* not.
|
||||
*/
|
||||
public static boolean verifyData(String alias, byte[] data, byte[] signature)
|
||||
throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
|
||||
|
||||
// Make sure the signature string exists
|
||||
if (signature == null) {
|
||||
Timber.w("Invalid signature.");
|
||||
return false;
|
||||
}
|
||||
|
||||
KeyStore.PrivateKeyEntry keyEntry = getPrivateKeyEntry(alias);
|
||||
Signature s = Signature.getInstance(SecurityConstants.SIGNATURE_SHA256withRSA);
|
||||
s.initVerify(keyEntry.getCertificate());
|
||||
s.update(data);
|
||||
return s.verify(signature);
|
||||
}
|
||||
|
||||
public interface SecurityConstants {
|
||||
String KEYSTORE_PROVIDER_ANDROID_KEYSTORE = "AndroidKeyStore";
|
||||
String TYPE_RSA = "RSA";
|
||||
String SIGNATURE_SHA256withRSA = "SHA256withRSA";
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/scrollview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
@ -7,7 +8,7 @@
|
|||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ProgressBar
|
||||
|
@ -18,55 +19,6 @@
|
|||
android:indeterminate="true"
|
||||
android:visibility="gone" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/header_top_first"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="2">
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Heading"
|
||||
android:layout_width="0sp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/generate_wallet_label"
|
||||
android:textAlignment="center" />
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Heading"
|
||||
android:layout_width="0sp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/generate_password_label"
|
||||
android:textAlignment="center" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/data_top"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="2">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvWalletName"
|
||||
style="@style/MoneroText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:textAlignment="center" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvWalletPassword"
|
||||
style="@style/MoneroText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="***"
|
||||
android:textAlignment="center" />
|
||||
</LinearLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -96,7 +48,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/data_top"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="center"
|
||||
tools:text="49RBjxQ2zgf7t17w7So9ngcEY9obKzsrr6Dsah24MNSMiMBEeiYPP5CCTBq4GpZcEYN5Zf3upsLiwd5PezePE1i4Tf3rryY" />
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -118,7 +71,33 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/data_top"
|
||||
android:background="@drawable/backgound_seed"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="center"
|
||||
tools:text="tucks slackens vehicle doctor oaks aloof balding knife rays wise haggled cuisine navy ladder suitcase dusted last thorn pixels karate ticket nibs violin zapped slackens" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llPassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/header_top"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone">
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Heading"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/generate_crazypass_label" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvWalletPassword"
|
||||
style="@style/MoneroText.Monospace"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/data_top"
|
||||
android:textAlignment="center"
|
||||
tools:text="2ExEN7droBLzWW2CEE2d7kv7E/iCZwNn:hKwUmg3:hg" />
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/bAccept"
|
||||
|
@ -178,20 +157,16 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/data_top"
|
||||
android:textAlignment="center" />
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/header_top">
|
||||
android:textAlignment="center"
|
||||
tools:text="e4aba454d78799dbd8d576bf70e7f15a06e91f1ecfd404053f91519a48df2a0e" />
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Heading"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="@dimen/header_top"
|
||||
android:text="@string/generate_spendkey_label" />
|
||||
</FrameLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvWalletSpendKey"
|
||||
|
@ -199,7 +174,9 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/data_top"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="center"
|
||||
tools:text="4925a6254d2dff71df53f13b8334f9ceda6cdd5821aa895f7de1d2640500740d" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/layout_root"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="8dp">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletPasswordA"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:hint="@string/generate_password_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="textVisiblePassword"
|
||||
android:textAlignment="textStart" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletPasswordB"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/section_top"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:hint="@string/generate_password_hint"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="textVisiblePassword"
|
||||
android:textAlignment="textStart" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_details_help"
|
||||
android:icon="@drawable/ic_help_white_24dp"
|
||||
android:orderInCategory="100"
|
||||
android:title="@string/menu_help"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
</menu>
|
|
@ -7,6 +7,12 @@
|
|||
android:icon="@drawable/ic_help_white_24dp"
|
||||
android:orderInCategory="100"
|
||||
android:title="@string/menu_help"
|
||||
app:showAsAction="always" />
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_details_changepw"
|
||||
android:orderInCategory="200"
|
||||
android:title="@string/menu_changepw"
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
|
@ -74,6 +74,26 @@
|
|||
completo a tus fondos.
|
||||
¡Mantenerla segura y privada es muy importante, ya que permite a <em>quien sea</em>
|
||||
acceso completo a tus fondos! Si no la anotaste en un lugar seguro aún, ¡por favor hazlo!
|
||||
<h2>Wallet Files Recovery Password</h2>
|
||||
Make sure you write this password down. If you reset your device or uninstall the app, you
|
||||
will need it to access your wallet again.<br/>
|
||||
<h3>CrAzYpass</h3>
|
||||
If the password displayed here is 52 alphanumeric characters in groups of 4 - congratulations!
|
||||
Your wallet files are secured with a 256-bit key generated by your device's security
|
||||
features based on the passphrase you chose (on creation or by changing it). This makes it
|
||||
extremenly difficult to hack!<br/>
|
||||
This feature is mandatory for all newly created wallets.
|
||||
<h3>Legacy Password</h3>
|
||||
If you see your passphrase here, your wallet files are not as secure as when using
|
||||
a CrAzYpass. To fix this, simply select \"Change Passphrase\" from the menu. After entering
|
||||
a new passphrase (maybe even the same one as before) the app will generate a CrAzYpass for
|
||||
you and secure your wallet files with it. Write it down!
|
||||
<h3>CrAzYpass wallets</h3>
|
||||
If you ever need to reinstall Monerujo (for example after resetting your phone or switching
|
||||
to a new one) or you want to use your wallet files on a different device or PC, you have to
|
||||
use this Recovery Password in order to access your wallet again.<br/>
|
||||
By selecting \"Change Passphrase\" from the menu, you can choose another passphrase. Beware
|
||||
that this will generate a new Recovery Password. Write it down!
|
||||
<h2>Clave de vista</h2>
|
||||
Tu clave de vista puede usarse para monitorizar las transacciones entrantes de tu
|
||||
monedero sin otorgar permiso para gastar los fondos guardados en ella.
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
<string name="menu_rename">Renombrar …</string>
|
||||
<string name="menu_archive">Archivar</string>
|
||||
<string name="menu_backup">Copia de seguridad</string>
|
||||
<string name="menu_changepw">[Change Passphrase]</string>
|
||||
|
||||
<string name="password_weak">Sigue escribiendo …</string>
|
||||
<string name="password_fair">Mas o menos.</string>
|
||||
|
@ -46,6 +47,7 @@
|
|||
<string name="archive_progress">Archivado en progreso</string>
|
||||
<string name="rename_progress">Cambio de nombre en progreso</string>
|
||||
<string name="open_progress">Comprobando conexión con el daemon</string>
|
||||
<string name="changepw_progress">[Change Password in progress]</string>
|
||||
|
||||
<string name="service_progress">Guardando todo\n¡Puede llevar un tiempo!</string>
|
||||
|
||||
|
@ -55,6 +57,8 @@
|
|||
<string name="archive_failed">¡Archivado fallido!</string>
|
||||
<string name="delete_failed">¡Borrado fallido!</string>
|
||||
<string name="rename_failed">¡Cambio de nombre fallido!</string>
|
||||
<string name="changepw_failed">[Change Password failed!]</string>
|
||||
<string name="changepw_success">[Password changed]</string>
|
||||
|
||||
<string name="label_daemon">Nodo</string>
|
||||
<string name="prompt_daemon">([<usuario>:<contraseña>@]<daemon>[:<puerto>])</string>
|
||||
|
@ -84,6 +88,8 @@
|
|||
|
||||
<string name="prompt_rename">Renombrar %1$s</string>
|
||||
|
||||
<string name="prompt_changepw">[New Passphrase for %1$s]</string>
|
||||
<string name="prompt_changepwB">[Repeat Passphrase for %1$s]</string>
|
||||
<string name="prompt_password">Contraseña para %1$s</string>
|
||||
<string name="prompt_send_password">Confirmar Contraseña</string>
|
||||
<string name="bad_password">¡Contraseña incorrecta!</string>
|
||||
|
@ -134,9 +140,11 @@
|
|||
<string name="generate_title">Crear monedero</string>
|
||||
<string name="generate_name_hint">Nombre del monedero</string>
|
||||
<string name="generate_password_hint">Frase de Contraseña</string>
|
||||
<string name="generate_bad_passwordB">[Passphrases do not match]</string>
|
||||
<string name="generate_empty_passwordB">[Passphrase may not be empty]</string>
|
||||
<string name="generate_buttonGenerate">¡Házme ya un monedero!</string>
|
||||
<string name="generate_seed">Semilla Mnemotécnica</string>
|
||||
<string name="generate_button_accept">¡He apuntado estas 25 palabras!</string>
|
||||
<string name="generate_button_accept">[I have noted the above info!]</string>
|
||||
|
||||
<string name="generate_button_backup">Copia de Seguridad</string>
|
||||
<string name="generate_button_export">Exportar Claves</string>
|
||||
|
@ -169,6 +177,7 @@
|
|||
<string name="generate_spendkey_label">Clave de Gasto</string>
|
||||
<string name="generate_mnemonic_label">Semilla Mnemotécnica</string>
|
||||
<string name="generate_restoreheight_label">Altura de Restauración:</string>
|
||||
<string name="generate_crazypass_label">[Wallet Files Restore Password]</string>
|
||||
|
||||
<string name="generate_check_key">Introduce una clave válida</string>
|
||||
<string name="generate_check_address">Introduce una dirección válida</string>
|
||||
|
@ -278,8 +287,6 @@
|
|||
<i>Vas a enviar XMR y el destinatario recibirá BTC usando el servicio <b>XMR.TO</b>.</i>
|
||||
]]></string>
|
||||
<string name="info_send_xmrto_success_sending">Enviando</string>
|
||||
<string name="info_send_xmrto_success_status_label">Estado:</string>
|
||||
<string name="info_send_xmrto_success_status">%1$s es %1$s (#%1$d)</string>
|
||||
<string name="info_send_xmrto_success_btc">%1$s BTC</string>
|
||||
<string name="info_txdetails_xmrto_key">Clave:</string>
|
||||
<string name="info_txdetails_xmrto_address">Dirección:</string>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="about_title">[About]</string>
|
||||
<string name="about_close">Chiudi</string>
|
||||
<string name="about_whoami">Io sono monerujo</string>
|
||||
<string name="about_version">Versione %1$s (%2$d)</string>
|
||||
|
@ -46,569 +47,4 @@
|
|||
<p>Se hai dubbi o domande sulla nostra politica per la privacy, oppure su come i tuoi dati vengono raccolti e processati, contattaci all'indirizzo email privacy@monerujo.io.
|
||||
</p>
|
||||
]]></string>
|
||||
|
||||
<string name="about_licenses" translatable="false"><![CDATA[
|
||||
<h1>Open Source Licenses</h1>
|
||||
<h2>Licensed under the Apache License, Version 2.0</h2>
|
||||
<h3>monerujo (https://github.com/m2049r/xmrwallet)</h3>
|
||||
Copyright (c) 2017 m2049r et al.
|
||||
<h3>The Android Open Source Project</h3>
|
||||
<ul>
|
||||
<li>com.android.support:design</li>
|
||||
<li>com.android.support:support-v4</li>
|
||||
<li>com.android.support:appcompat-v7</li>
|
||||
<li>com.android.support:recyclerview-v7</li>
|
||||
<li>com.android.support:cardview-v7</li>
|
||||
<li>com.android.support.constraint:constraint-layout</li>
|
||||
<li>com.android.support:support-annotations</li>
|
||||
<li>com.android.support:support-vector-drawable</li>
|
||||
<li>com.android.support:animated-vector-drawable</li>
|
||||
<li>com.android.support:transition</li>
|
||||
<li>com.android.support:support-compat</li>
|
||||
<li>com.android.support:support-media-compat</li>
|
||||
<li>com.android.support:support-core-utils</li>
|
||||
<li>com.android.support:support-core-ui</li>
|
||||
<li>com.android.support:support-fragment</li>
|
||||
<li>com.android.support.constraint:constraint-layout-solver</li>
|
||||
</ul>
|
||||
Copyright (c) The Android Open Source Project
|
||||
|
||||
<h3>OkHttp</h3>
|
||||
Copyright (c) 2014 Square, Inc.
|
||||
|
||||
<h3>Timber</h3>
|
||||
Copyright (c) 2013 Jake Wharton
|
||||
|
||||
<h3>com.google.zxing:core</h3>
|
||||
Copyright (c) 2012 ZXing authors
|
||||
|
||||
<h3>me.dm7.barcodescanner</h3>
|
||||
<ul>
|
||||
<li>me.dm7.barcodescanner:core</li>
|
||||
<li>me.dm7.barcodescanner:zxing</li>
|
||||
</ul>
|
||||
Copyright (c) 2014 Dushyanth Maguluru
|
||||
|
||||
<h3>AndroidLicensesPage (https://github.com/adamsp/AndroidLicensesPage)</h3>
|
||||
Copyright (c) 2013 Adam Speakman
|
||||
|
||||
<h3>Apache License, Version 2.0, January 2004</h3>
|
||||
http://www.apache.org/licenses/<br/>
|
||||
<br/>
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION<br/>
|
||||
<br/>
|
||||
1. Definitions.<br/>
|
||||
<br/>
|
||||
\"License\" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.<br/>
|
||||
<br/>
|
||||
\"Licensor\" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.<br/>
|
||||
<br/>
|
||||
\"Legal Entity\" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
\"control\" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.<br/>
|
||||
<br/>
|
||||
\"You\" (or \"Your\") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.<br/>
|
||||
<br/>
|
||||
\"Source\" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.<br/>
|
||||
<br/>
|
||||
\"Object\" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.<br/>
|
||||
<br/>
|
||||
\"Work\" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).<br/>
|
||||
<br/>
|
||||
\"Derivative Works\" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.<br/>
|
||||
<br/>
|
||||
\"Contribution\" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, \"submitted\"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as \"Not a Contribution.\"<br/>
|
||||
<br/>
|
||||
\"Contributor\" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.<br/>
|
||||
<br/>
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.<br/>
|
||||
<br/>
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.<br/>
|
||||
<br/>
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:<br/>
|
||||
<br/>
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and<br/>
|
||||
<br/>
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and<br/>
|
||||
<br/>
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and<br/>
|
||||
<br/>
|
||||
(d) If the Work includes a \"NOTICE\" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.<br/>
|
||||
<br/>
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.<br/>
|
||||
<br/>
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.<br/>
|
||||
<br/>
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.<br/>
|
||||
<br/>
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an \"AS IS\" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.<br/>
|
||||
<br/>
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.<br/>
|
||||
<br/>
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
<h2>Licensed under the MIT License</h2>
|
||||
<h3>rapidjson (https://github.com/monero-project/monero/blob/master/external/rapidjson)</h3>
|
||||
Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
||||
<h3>easylogging++ (https://github.com/monero-project/monero/tree/master/external/easylogging%2B%2B)</h3>
|
||||
Copyright (c) 2017 muflihun.com
|
||||
<h3>zxcvbn4j (https://github.com/nulab/zxcvbn4j)</h3>
|
||||
Copyright (c) 2014 Nulab Inc
|
||||
<h3>The MIT License</h3>
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br/>
|
||||
<br/>
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br/>
|
||||
<br/>
|
||||
THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br/>
|
||||
|
||||
<h2>Monero (https://github.com/monero-project/monero)</h2>
|
||||
<h3>The Monero Project License</h3>
|
||||
Copyright (c) 2014-2017, The Monero Project. All rights reserved.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:<br/>
|
||||
<br/>
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.<br/>
|
||||
<br/>
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.<br/>
|
||||
<br/>
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br/>
|
||||
<br/>
|
||||
Parts of the project are originally copyright (c) 2012-2013 The Cryptonote
|
||||
developers
|
||||
|
||||
<h2>OpenSSL (https://github.com/openssl/openssl)</h2>
|
||||
<h3>LICENSE ISSUES</h3>
|
||||
The OpenSSL toolkit stays under a double license, i.e. both the conditions of
|
||||
the OpenSSL License and the original SSLeay license apply to the toolkit.
|
||||
See below for the actual license texts.
|
||||
<h3>OpenSSL License</h3>
|
||||
Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:<br/>
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.<br/>
|
||||
<br/>
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.<br/>
|
||||
<br/>
|
||||
3. All advertising materials mentioning features or use of this
|
||||
software must display the following acknowledgment:
|
||||
\"This product includes software developed by the OpenSSL Project
|
||||
for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"<br/>
|
||||
<br/>
|
||||
4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to
|
||||
endorse or promote products derived from this software without
|
||||
prior written permission. For written permission, please contact
|
||||
openssl-core@openssl.org.<br/>
|
||||
<br/>
|
||||
5. Products derived from this software may not be called \"OpenSSL\"
|
||||
nor may \"OpenSSL\" appear in their names without prior written
|
||||
permission of the OpenSSL Project.<br/>
|
||||
<br/>
|
||||
6. Redistributions of any form whatsoever must retain the following
|
||||
acknowledgment:<br/>
|
||||
\"This product includes software developed by the OpenSSL Project
|
||||
for use in the OpenSSL Toolkit (http://www.openssl.org/)\"<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT \"AS IS\" AND ANY
|
||||
EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||
ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
OF THE POSSIBILITY OF SUCH DAMAGE.<br/>
|
||||
<br/>
|
||||
This product includes cryptographic software written by Eric Young
|
||||
(eay@cryptsoft.com). This product includes software written by Tim
|
||||
Hudson (tjh@cryptsoft.com).
|
||||
<h3>Original SSLeay License</h3>
|
||||
Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com). All rights reserved.<br/>
|
||||
<br/>
|
||||
This package is an SSL implementation written
|
||||
by Eric Young (eay@cryptsoft.com).
|
||||
The implementation was written so as to conform with Netscapes SSL.<br/>
|
||||
<br/>
|
||||
This library is free for commercial and non-commercial use as long as
|
||||
the following conditions are aheared to. The following conditions
|
||||
apply to all code found in this distribution, be it the RC4, RSA,
|
||||
lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
included with this distribution is covered by the same copyright terms
|
||||
except that the holder is Tim Hudson (tjh@cryptsoft.com).<br/>
|
||||
<br/>
|
||||
Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
the code are not to be removed.
|
||||
If this package is used in a product, Eric Young should be given attribution
|
||||
as the author of the parts of the library used.
|
||||
This can be in the form of a textual message at program startup or
|
||||
in documentation (online or textual) provided with the package.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:<br/>
|
||||
1. Redistributions of source code must retain the copyright
|
||||
notice, this list of conditions and the following disclaimer.<br/>
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.<br/>
|
||||
3. All advertising materials mentioning features or use of this software
|
||||
must display the following acknowledgement:<br/>
|
||||
\"This product includes cryptographic software written by
|
||||
Eric Young (eay@cryptsoft.com)\"
|
||||
The word 'cryptographic' can be left out if the rouines from the library
|
||||
being used are not cryptographic related :-).<br/>
|
||||
4. If you include any Windows specific code (or a derivative thereof) from
|
||||
the apps directory (application code) you must include an acknowledgement:
|
||||
\"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.<br/>
|
||||
<br/>
|
||||
The licence and distribution terms for any publically available version or
|
||||
derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
copied and put under another distribution licence
|
||||
[including the GNU Public Licence.]
|
||||
|
||||
<h2>Boost</h2>
|
||||
<ul>
|
||||
<li>Boost (https://sourceforge.net/projects/boost)</li>
|
||||
<li>Boost/Archive (https://github.com/monero-project/monero/tree/master/external/boost/archive)</li>
|
||||
</ul>
|
||||
<h3>Boost Software License - Version 1.0 - August 17th, 2003</h3>
|
||||
Permission is hereby granted, free of charge, to any person or organization
|
||||
obtaining a copy of the software and accompanying documentation covered by
|
||||
this license (the \"Software\") to use, reproduce, display, distribute,
|
||||
execute, and transmit the Software, and to prepare derivative works of the
|
||||
Software, and to permit third-parties to whom the Software is furnished to
|
||||
do so, all subject to the following:<br/>
|
||||
<br/>
|
||||
The copyright notices in the Software and this entire statement, including
|
||||
the above license grant, this restriction and the following disclaimer,
|
||||
must be included in all copies of the Software, in whole or in part, and
|
||||
all derivative works of the Software, unless such copies or derivative
|
||||
works are solely in the form of machine-executable object code generated by
|
||||
a source language processor.<br/>
|
||||
<br/>
|
||||
THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
<h2>Unbound (https://github.com/monero-project/monero/blob/master/external/unbound)</h2>
|
||||
<h3>Unbound Software License</h3>
|
||||
Copyright (c) 2007, NLnet Labs. All rights reserved.<br/>
|
||||
<br/>
|
||||
This software is open source.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:<br/>
|
||||
<br/>
|
||||
Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.<br/>
|
||||
<br/>
|
||||
Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.<br/>
|
||||
<br/>
|
||||
Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
<h2>MiniUPnPc (https://github.com/monero-project/monero/blob/master/external/miniupnpc)</h2>
|
||||
Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
||||
<h3>The MiniUPnPc License</h3>
|
||||
Copyright (c) 2005-2015, Thomas BERNARD. All rights reserved.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:<br/>
|
||||
<br/>
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.<br/>
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.<br/>
|
||||
* The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
<h2>liblmdb (https://github.com/monero-project/monero/blob/master/external/db_drivers/liblmdb)</h2>
|
||||
<h3>The OpenLDAP Public License, Version 2.8, 17 August 2003</h3>
|
||||
Redistribution and use of this software and associated documentation
|
||||
(\"Software\"), with or without modification, are permitted provided
|
||||
that the following conditions are met:<br/>
|
||||
<br/>
|
||||
1. Redistributions in source form must retain copyright statements
|
||||
and notices,<br/>
|
||||
<br/>
|
||||
2. Redistributions in binary form must reproduce applicable copyright
|
||||
statements and notices, this list of conditions, and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution, and<br/>
|
||||
<br/>
|
||||
3. Redistributions must contain a verbatim copy of this document.<br/>
|
||||
<br/>
|
||||
The OpenLDAP Foundation may revise this license from time to time.
|
||||
Each revision is distinguished by a version number. You may use
|
||||
this Software under terms of this license revision or under the
|
||||
terms of any subsequent revision of the license.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS
|
||||
CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S)
|
||||
OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.<br/>
|
||||
<br/>
|
||||
The names of the authors and copyright holders must not be used in
|
||||
advertising or otherwise to promote the sale, use or other dealing
|
||||
in this Software without specific, written prior permission. Title
|
||||
to copyright in this Software shall at all times remain with copyright
|
||||
holders.<br/>
|
||||
<br/>
|
||||
OpenLDAP is a registered trademark of the OpenLDAP Foundation.<br/>
|
||||
<br/>
|
||||
Copyright 1999-2003 The OpenLDAP Foundation, Redwood City,
|
||||
California, USA. All Rights Reserved. Permission to copy and
|
||||
distribute verbatim copies of this document is granted.
|
||||
|
||||
<h2>epee (https://github.com/monero-project/monero/blob/master/contrib/epee)</h2>
|
||||
Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net. All rights reserved.
|
||||
<h3>The epee License</h3>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:<br/>
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.<br/>
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.<br/>
|
||||
* Neither the name of the Andrey N. Sabelnikov nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL Andrey N. Sabelnikov BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
<h2>'Poppins' Font</h2>
|
||||
<h3>SIL Open Font License</h3>
|
||||
<p>Copyright (c) 2014, Indian Type Foundry (info@indiantypefoundry.com).</p>
|
||||
<p>This Font Software is licensed under the SIL Open Font License, Version 1.1.<br />
|
||||
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL</p>
|
||||
<p>—————————————————————————————-<br />
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007<br />—————————————————————————————-</p>
|
||||
<p>PREAMBLE<br />
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.</p>
|
||||
<p>The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.</p>
|
||||
<p>DEFINITIONS<br />
|
||||
“Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.</p>
|
||||
<p>“Reserved Font Name” refers to any names specified as such after the copyright statement(s).</p>
|
||||
<p>“Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).</p>
|
||||
<p>“Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.</p>
|
||||
<p>“Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.</p>
|
||||
<p>PERMISSION & CONDITIONS<br />
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:</p>
|
||||
<p>1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.</p>
|
||||
<p>2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.</p>
|
||||
<p>3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.</p>
|
||||
<p>4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.</p>
|
||||
<p>5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.</p>
|
||||
<p>TERMINATION<br />
|
||||
This license becomes null and void if any of the above conditions are not met.</p>
|
||||
<p>DISCLAIMER<br />
|
||||
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.</p>
|
||||
]]></string>
|
||||
</resources>
|
|
@ -7,9 +7,9 @@
|
|||
La password viene usata per rendere sicuri i dati del portafoglio sul tuo dispositivo. Utilizza una password efficace - meglio se una passphrase.</p>
|
||||
<h2>Prendi nota del tuo Seed Mnemonico!</h2>
|
||||
<p>Sulla schermata successiva troverai il tuo \"Seed Mnemonico\" da 25 parole.
|
||||
Questa è l'unica informazione necessaria per recuperare il tuo portafoglio d'ora in poi
|
||||
Questa è l'unica informazione necessaria per recuperare il tuo portafoglio d'ora in poi
|
||||
e avere pieno accesso ai tuoi fondi.
|
||||
E' molto importante mantenerlo privato e conservarlo in un luogo sicuro, poiché può concedere a <em>chiunque</em>
|
||||
E' molto importante mantenerlo privato e conservarlo in un luogo sicuro, poiché può concedere a <em>chiunque</em>
|
||||
pieno accesso ai tuoi fondi!</p>
|
||||
<p>Se perdi la password del tuo portafoglio, puoi ancora recuperare il tuo portafoglio mediante il Seed Mnemonico.</p>
|
||||
<p>Non esiste alcun modo per recuperare il tuo Seed Mnemonico; se lo perdi, tutti i tuoi fondi andranno persi!
|
||||
|
@ -25,7 +25,7 @@
|
|||
La password viene usata per rendere sicuri i dati relativi al portafoglio sul tuo dispositivo. Utilizza una password efficace -
|
||||
ancora meglio se una passphrase.</p>
|
||||
<p>Inserisci il tuo Seed nel campo \"Seed Mnemonico\".<p>
|
||||
<p>Se conosci il numero di blocco dove si trova la prima transazione utilizzata per questo indirizzo, inseriscilo nel campo \"Altezza di Recupero\" - se lasci il campo in bianco verrà scansionata l'<em>intera</em> blockchain alla ricerca di transazioni che appartengono al tuo indirizzo. Questo processo può richiedere <em>parecchio</em> tempo.</p>
|
||||
<p>Se conosci il numero di blocco dove si trova la prima transazione utilizzata per questo indirizzo, inseriscilo nel campo \"Altezza di Recupero\" - se lasci il campo in bianco verrà scansionata l'<em>intera</em> blockchain alla ricerca di transazioni che appartengono al tuo indirizzo. Questo processo può richiedere <em>parecchio</em> tempo.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_create_keys"><![CDATA[
|
||||
|
@ -35,7 +35,7 @@
|
|||
La password viene usata per rendere sicuri i dati relativi al portafoglio sul tuo dispositivo. Utilizza una password efficace -
|
||||
ancora meglio se una passphrase.</p>
|
||||
<p>Inserisci il tuo indirizzo Monero nel campo \"Indirizzo Pubblico\" e riempi i campi \"Chiave di Visualizzazione\" e \"Chiave di Spesa\".</p>
|
||||
<p>Se conosci il numero di blocco dove si trova la prima transazione utilizzata per questo indirizzo, inseriscilo nel campo \"Altezza di Recupero\" - se lasci il campo in bianco verrà scansionata l'<em>intera</em> blockchain alla ricerca di transazioni che appartengono al tuo indirizzo. Questo processo può richiedere <em>parecchio</em> tempo.</p>
|
||||
<p>Se conosci il numero di blocco dove si trova la prima transazione utilizzata per questo indirizzo, inseriscilo nel campo \"Altezza di Recupero\" - se lasci il campo in bianco verrà scansionata l'<em>intera</em> blockchain alla ricerca di transazioni che appartengono al tuo indirizzo. Questo processo può richiedere <em>parecchio</em> tempo.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_create_view"><![CDATA[
|
||||
|
@ -45,7 +45,7 @@
|
|||
La password viene usata per rendere sicuri i dati relativi al portafoglio sul tuo dispositivo. Utilizza una password efficace -
|
||||
ancora meglio se una passphrase.</p>
|
||||
<p>Inserisci il tuo indirizzo Monero nel campo \"Indirizzo Pubblico\" e riempi il campo \"Chiave di Visualizzazione\".</p>
|
||||
<p>Se conosci il numero di blocco dove si trova la prima transazione utilizzata per questo indirizzo, inseriscilo nel campo \"Altezza di Recupero\" - se lasci il campo in bianco verrà scansionata l'<em>intera</em> blockchain alla ricerca di transazioni che appartengono al tuo indirizzo. Questo processo può richiedere <em>parecchio</em> tempo.</p>
|
||||
<p>Se conosci il numero di blocco dove si trova la prima transazione utilizzata per questo indirizzo, inseriscilo nel campo \"Altezza di Recupero\" - se lasci il campo in bianco verrà scansionata l'<em>intera</em> blockchain alla ricerca di transazioni che appartengono al tuo indirizzo. Questo processo può richiedere <em>parecchio</em> tempo.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_details"><![CDATA[
|
||||
|
@ -53,10 +53,30 @@
|
|||
<h2>Indirizzo pubblico</h2>
|
||||
Il tuo indirizzo pubblico Monero equivale al tuo IBAN. Puoi condividerlo con chiunque senza temere di perdere i tuoi Moneroj. Gli altri invieranno Moneroj al tuo portafoglio utilizzando questo indirizzo.
|
||||
<h2>Seed Mnemonico</h2>
|
||||
Questa è l'unica informazione necessaria per recuperare il tuo portafoglio in futuro
|
||||
Questa è l'unica informazione necessaria per recuperare il tuo portafoglio in futuro
|
||||
e avere pieno accesso ai tuoi fondi.
|
||||
E' molto importante mantenerlo privato e conservarlo in un luogo sicuro, poiché può concedere a <em>chiunque</em>
|
||||
E' molto importante mantenerlo privato e conservarlo in un luogo sicuro, poiché può concedere a <em>chiunque</em>
|
||||
pieno accesso ai tuoi Moneroj! Se non lo hai già fatto, annotati il Seed Mnemonico e conservalo in un luogo sicuro!
|
||||
<h2>Wallet Files Recovery Password</h2>
|
||||
Make sure you write this password down. If you reset your device or uninstall the app, you
|
||||
will need it to access your wallet again.<br/>
|
||||
<h3>CrAzYpass</h3>
|
||||
If the password displayed here is 52 alphanumeric characters in groups of 4 - congratulations!
|
||||
Your wallet files are secured with a 256-bit key generated by your device's security
|
||||
features based on the passphrase you chose (on creation or by changing it). This makes it
|
||||
extremenly difficult to hack!<br/>
|
||||
This feature is mandatory for all newly created wallets.
|
||||
<h3>Legacy Password</h3>
|
||||
If you see your passphrase here, your wallet files are not as secure as when using
|
||||
a CrAzYpass. To fix this, simply select \"Change Passphrase\" from the menu. After entering
|
||||
a new passphrase (maybe even the same one as before) the app will generate a CrAzYpass for
|
||||
you and secure your wallet files with it. Write it down!
|
||||
<h3>CrAzYpass wallets</h3>
|
||||
If you ever need to reinstall Monerujo (for example after resetting your phone or switching
|
||||
to a new one) or you want to use your wallet files on a different device or PC, you have to
|
||||
use this Recovery Password in order to access your wallet again.<br/>
|
||||
By selecting \"Change Passphrase\" from the menu, you can choose another passphrase. Beware
|
||||
that this will generate a new Recovery Password. Write it down!
|
||||
<h2>Chiave di Visualizzazione</h2>
|
||||
La tua chiave di visualizzazione può essere usata per monitorare le transazioni in ingresso al tuo portafoglio senza concedere il permesso di spendere i fondi.
|
||||
<h2>Chiave di Spesa</h2>
|
||||
|
@ -69,8 +89,8 @@
|
|||
<p>Monerujo usa un nodo remoto per comunicare con la rete Monero senza dover scaricare e mantenere in memoria una copia della blockchain intera. Puoi trovare una lista di nodi remoti popolari o imparare come eseguire un tuo personale nodo remoto a questo sito: https://moneroworld.com/<p>
|
||||
<p>Monerujo contiene già una lista di nodi remoti e tiene memoria degli ultimi cinque nodi utilizzati.</p>
|
||||
<h2>Portafogli</h2>
|
||||
<p>Qui trovi la lista dei portafogli. I portafogli sono fisicamente posizionati nella cartella <tt>monerujo</tt> nella memoria interna del tuo dispositivo. Puoi usare un'applicazione di file explorer per vederli.
|
||||
E' buona regola effettuare dei backup periodici di questa cartella su un'unità di memoria esterna al tuo dispositivo nel caso in cui il tuo dispositivo esploda o venga rubato.</p>
|
||||
<p>Qui trovi la lista dei portafogli. I portafogli sono fisicamente posizionati nella cartella <tt>monerujo</tt> nella memoria interna del tuo dispositivo. Puoi usare un'applicazione di file explorer per vederli.
|
||||
E' buona regola effettuare dei backup periodici di questa cartella su un'unità di memoria esterna al tuo dispositivo nel caso in cui il tuo dispositivo esploda o venga rubato.</p>
|
||||
<p>Seleziona un portafoglio per aprirlo o premere \"+\" per crearne uno nuovo.
|
||||
Oppure seleziona una delle operazioni di portafoglio:</p>
|
||||
<h3>Dettagli</h3>
|
||||
|
@ -80,9 +100,9 @@
|
|||
<h3>Rinomina</h3>
|
||||
<p>Rinomina il portafoglio. Le copie di backup non vengono rinominate.</p>
|
||||
<h3>Backup</h3>
|
||||
<p>Fai una copia del portafoglio all'interno della cartella <tt>backups</tt>, a sua volta all'interno della cartella <tt>monerujo</tt>, sovrascrivendo eventuali copie precedenti.</p>
|
||||
<p>Fai una copia del portafoglio all'interno della cartella <tt>backups</tt>, a sua volta all'interno della cartella <tt>monerujo</tt>, sovrascrivendo eventuali copie precedenti.</p>
|
||||
<h3>Archivia</h3>
|
||||
<p>Effettua un backup e successivamente elimina il portafoglio. La copia rimane nella cartella <tt>backups</tt>. Se non hai più bisogno dei backup, è meglio cancellare i file interessati utilizzando un'applicazione di tipo file explorer o un'applicazione di rimozione dati sicura.</p>
|
||||
<p>Effettua un backup e successivamente elimina il portafoglio. La copia rimane nella cartella <tt>backups</tt>. Se non hai più bisogno dei backup, è meglio cancellare i file interessati utilizzando un'applicazione di tipo file explorer o un'applicazione di rimozione dati sicura.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_wallet"><![CDATA[
|
||||
|
@ -102,11 +122,11 @@
|
|||
<string name="help_tx_details"><![CDATA[
|
||||
<h1>Dettagli della transazione</h1>
|
||||
<h2>Destinazione</h2>
|
||||
Questo è l'indirizzo pubblico del portafoglio cui hai inviato Moneroj
|
||||
Questo è l'indirizzo pubblico del portafoglio cui hai inviato Moneroj
|
||||
<h2>ID Pagamento</h2>
|
||||
Puoi usare un ID Pagamento per identificare la causale della transazione. Questa è un'informazione opzionale e privata. Ad esempio può aiutare un venditore ad associare una transazione ricevuta ad un bene da te acquistato.
|
||||
Puoi usare un ID Pagamento per identificare la causale della transazione. Questa è un'informazione opzionale e privata. Ad esempio può aiutare un venditore ad associare una transazione ricevuta ad un bene da te acquistato.
|
||||
<h2>TX ID (ID di Transazione)</h2>
|
||||
Questo è l'ID della transazione che puoi usare per identificare la tua transazione offuscata su un explorer della blockchain Monero, ad esempio <a href="https://xmrchain.net/">https://xmrchain.net/</a>
|
||||
Questo è l'ID della transazione che puoi usare per identificare la tua transazione offuscata su un explorer della blockchain Monero, ad esempio <a href="https://xmrchain.net/">https://xmrchain.net/</a>
|
||||
<h2>TX KEY (Chiave di transazione)</h2>
|
||||
Questa è la tua chiave privata della transazione. Conservala al sicuro poiché rivelare questa chiave a terze parti rivela quale firma in un anello è la tua, rendendo quindi la tua transazione trasparente.
|
||||
<h2>Blocco</h2>
|
||||
|
@ -116,27 +136,27 @@
|
|||
<string name="help_send"><![CDATA[
|
||||
<h1>Invia</h1>
|
||||
<h2>Indirizzo del ricevente</h2>
|
||||
<p>Questo è l'indirizzo pubblico del portafoglio cui stai inviando Moneroj, puoi incollare qui un indirizzo che hai precededentemente copiato sul blocco appunti, scansionare un codice QR o inserire un indirizzo manualmente. Accertati più volte che sia l'indirizzo corretto e che tu non stia inviando Moneroj ad un indirizzo sbagliato.</p>
|
||||
<p>Questo è l'indirizzo pubblico del portafoglio cui stai inviando Moneroj, puoi incollare qui un indirizzo che hai precededentemente copiato sul blocco appunti, scansionare un codice QR o inserire un indirizzo manualmente. Accertati più volte che sia l'indirizzo corretto e che tu non stia inviando Moneroj ad un indirizzo sbagliato.</p>
|
||||
<p>Oltre ad inviare Moneroj (XMR), puoi anche inviare Bitcoin (BTC) attraverso il servizio XMR.TO (vedi https://xmr.to
|
||||
per ulteriori dettagli). Controlla la sezione sull'invio di BTC più avanti.</p>
|
||||
per ulteriori dettagli). Controlla la sezione sull'invio di BTC più avanti.</p>
|
||||
<h2>ID Pagamento</h2>
|
||||
<p>Puoi usare un ID Pagamento per identificare la causale della transazione. Questa è un'informazione opzionale e privata. Ad esempio può aiutare un venditore ad associare una transazione ricevuta ad un bene da te acquistato.<p>
|
||||
<h2>Dimensione dell'anello (ring size)</h2>
|
||||
<p>Monerujo dà la possibilità di scegliere la dimensione dell'anello (ring size) da utilizzare in una transazione. Se sei un utente poco esperto, ti raccomandiamo di utilizzare una dimensione dell'anello pari a 7. Un numero più alto rispetto a 7 aumenta il numero di firmatari nella firma ad anello così come, teoricamente, la negabilità plausibile. Considera però che selezionare una dimensione dell'anello elevata rischia di mettere in risalto la tua transazione sulla blockchain.</p>
|
||||
<p>Puoi usare un ID Pagamento per identificare la causale della transazione. Questa è un'informazione opzionale e privata. Ad esempio può aiutare un venditore ad associare una transazione ricevuta ad un bene da te acquistato.<p>
|
||||
<h2>Dimensione dell'anello (ring size)</h2>
|
||||
<p>Monerujo dà la possibilità di scegliere la dimensione dell'anello (ring size) da utilizzare in una transazione. Se sei un utente poco esperto, ti raccomandiamo di utilizzare una dimensione dell'anello pari a 7. Un numero più alto rispetto a 7 aumenta il numero di firmatari nella firma ad anello così come, teoricamente, la negabilità plausibile. Considera però che selezionare una dimensione dell'anello elevata rischia di mettere in risalto la tua transazione sulla blockchain.</p>
|
||||
<h2>Priorità</h2>
|
||||
<p>Questa impostazione determina la velocità con la quale la tua transazione verrà inclusa nella blockchain. Un'alta priorità si correla ad una commissione di transazione più alta, così come una priorità bassa si correla ad una commissione di transazione più bassa. Considera che se imposti una priorità bassa alla tua transazione, potrebbero trascorrere ore prima che essa sia inserita all'interno della blockchain. La priorità di default è
|
||||
<p>Questa impostazione determina la velocità con la quale la tua transazione verrà inclusa nella blockchain. Un'alta priorità si correla ad una commissione di transazione più alta, così come una priorità bassa si correla ad una commissione di transazione più bassa. Considera che se imposti una priorità bassa alla tua transazione, potrebbero trascorrere ore prima che essa sia inserita all'interno della blockchain. La priorità di default è
|
||||
\"Media\".</p>
|
||||
<h1>Inviare BTC</h1>
|
||||
<h2>XMR.TO</h2>
|
||||
<p>XMR.TO è un servizio di terze parti che funziona come cambiavaluta da Monero a Bitcoin.
|
||||
Utilizziamo le API XMR.TO per integrare pagamenti Bitcoin all'interno di Monerujo. Controlla https://xmr.to e decidi tu stesso se questa è una funzionalità che vuoi usare. Il team Monerujo non è associato in alcun modo con XMR.TO e non è in grado di aiutarti con il servizio da loro offerto.</p>
|
||||
Utilizziamo le API XMR.TO per integrare pagamenti Bitcoin all'interno di Monerujo. Controlla https://xmr.to e decidi tu stesso se questa è una funzionalità che vuoi usare. Il team Monerujo non è associato in alcun modo con XMR.TO e non è in grado di aiutarti con il servizio da loro offerto.</p>
|
||||
<h2>Tasso di cambio XMR.TO<h2>
|
||||
<p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio XMR.TO. Questi parametri includono il tasso di cambio attuale oltre ai limiti massimo e minimo di BTC. Considera che il tasso che ti viene mostrato non è ancora garantito in questa fase. Vedrai inoltre l'ammontare fino al quale la transazione BTC verrà eseguita istantaneamente senza attendere conferme XMR (vedi le FAQ XMR.TO per maggiori informazioni). Considera inoltre che il servizio XMR.TO non aggiunge commissioni extra - bello vero?</p>
|
||||
<p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio XMR.TO. Questi parametri includono il tasso di cambio attuale oltre ai limiti massimo e minimo di BTC. Considera che il tasso che ti viene mostrato non è ancora garantito in questa fase. Vedrai inoltre l'ammontare fino al quale la transazione BTC verrà eseguita istantaneamente senza attendere conferme XMR (vedi le FAQ XMR.TO per maggiori informazioni). Considera inoltre che il servizio XMR.TO non aggiunge commissioni extra - bello vero?</p>
|
||||
<h2>Ordine XMR.TO<h2>
|
||||
<p>Sulla schermata \"Conferma\", troverai il vero ordine XMR.TO. Questo ordine è valido per un tempo limitato - potresti notare un conto alla rovescia sul pulsante \"Spendi\". Il tasso di cambio potrebbe essere diverso da quello indicativo mostrato nelle schermate precedenti.</p>
|
||||
<h2>Chiave segreta XMR.TO<h2>
|
||||
<p>Dal momento che Monerujo gestisce soltanto il versante Monero della tua transazione, può essere usata la chiave segreta XMR.TO per tracciare il versante Bitcoin del tuo ordine sulla homepage XMR.TO.</p>
|
||||
<p>Considera che questa chiave segreta è valida solamente per 24 ore dall'inizio della transazione!</p>
|
||||
<p>Considera che questa chiave segreta è valida solamente per 24 ore dall'inizio della transazione!</p>
|
||||
<h2>Conto alla rovescia XMR.TO!</h2>
|
||||
<p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a XMR.TO tornando indietro al passo precedente e tornando poi di nuovo alla schermata \"Conferma\".</p>
|
||||
]]></string>
|
||||
|
@ -145,14 +165,14 @@
|
|||
<h1>Inviare BTC</h1>
|
||||
<h2>XMR.TO</h2>
|
||||
<p>XMR.TO è un servizio di terze parti che funziona come cambiavaluta da Monero a Bitcoin.
|
||||
Utilizziamo le API XMR.TO per integrare pagamenti Bitcoin all'interno di Monerujo. Controlla https://xmr.to e decidi tu stesso se questa è una funzionalità che vuoi usare. Il team Monerujo non è associato in alcun modo con XMR.TO e non è in grado di aiutarti con il servizio da loro offerto.</p>
|
||||
Utilizziamo le API XMR.TO per integrare pagamenti Bitcoin all'interno di Monerujo. Controlla https://xmr.to e decidi tu stesso se questa è una funzionalità che vuoi usare. Il team Monerujo non è associato in alcun modo con XMR.TO e non è in grado di aiutarti con il servizio da loro offerto.</p>
|
||||
<h2>Tasso di cambio XMR.TO<h2>
|
||||
<p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio XMR.TO. Questi parametri includono il tasso di cambio attuale oltre ai limiti massimo e minimo di BTC. Considera che il tasso che ti viene mostrato non è ancora garantito in questa fase. Vedrai inoltre l'ammontare fino al quale la transazione BTC verrà eseguita istantaneamente senza attendere conferme XMR (vedi le FAQ XMR.TO per maggiori informazioni). Considera inoltre che il servizio XMR.TO non aggiunge commissioni extra - bello vero?</p>
|
||||
<p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio XMR.TO. Questi parametri includono il tasso di cambio attuale oltre ai limiti massimo e minimo di BTC. Considera che il tasso che ti viene mostrato non è ancora garantito in questa fase. Vedrai inoltre l'ammontare fino al quale la transazione BTC verrà eseguita istantaneamente senza attendere conferme XMR (vedi le FAQ XMR.TO per maggiori informazioni). Considera inoltre che il servizio XMR.TO non aggiunge commissioni extra - bello vero?</p>
|
||||
<h2>XMR.TO Order<h2>
|
||||
<p>Sulla schermata \"Conferma\", troverai il vero ordine XMR.TO. Questo ordine è valido per un tempo limitato - potresti notare un conto alla rovescia sul pulsante \"Spendi\". Il tasso di cambio potrebbe essere diverso da quello indicativo mostrato nelle schermate precedenti.</p>
|
||||
<h2>Chiave segreta XMR.TO<h2>
|
||||
<p>Dal momento che Monerujo gestisce soltanto il versante Monero della tua transazione, può essere usata la chiave segreta XMR.TO per tracciare il versante Bitcoin del tuo ordine sulla homepage XMR.TO.</p>
|
||||
<p>Considera che questa chiave segreta è valida solamente per 24 ore dall'inizio della transazione!</p>
|
||||
<p>Considera che questa chiave segreta è valida solamente per 24 ore dall'inizio della transazione!</p>
|
||||
<h2>Conto alla rovescia XMR.TO!</h2>
|
||||
<p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a XMR.TO tornando indietro al passo precedente e tornando poi di nuovo alla schermata \"Conferma\".</p>
|
||||
]]></string>
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
<resources>
|
||||
<string name="app_name" translatable="false">monerujo</string>
|
||||
<string name="login_activity_name" translatable="false">monerujo</string>
|
||||
<string name="wallet_activity_name">Portafoglio</string>
|
||||
|
||||
<string name="menu_testnet">Testnet</string>
|
||||
|
@ -14,6 +12,7 @@
|
|||
<string name="menu_rename">Rinomina …</string>
|
||||
<string name="menu_archive">Archivia</string>
|
||||
<string name="menu_backup">Backup</string>
|
||||
<string name="menu_changepw">[Change Passphrase]</string>
|
||||
|
||||
<string name="password_weak">Continua a scrivere …</string>
|
||||
<string name="password_fair">Mah …</string>
|
||||
|
@ -44,9 +43,7 @@
|
|||
<string name="info_send_xmrto_success_order_label">Ordine XMR.TO</string>
|
||||
|
||||
<string name="info_send_xmrto_success_sending">Invio in corso</string>
|
||||
<string name="info_send_xmrto_success_status_label">Stato:</string>
|
||||
<string name="info_send_xmrto_success_btc">%1$s BTC</string>
|
||||
<string name="info_send_xmrto_success_status">%1$s è %1$s (#%1$d)</string>
|
||||
|
||||
<string name="info_txdetails_xmrto_key">Chiave:</string>
|
||||
<string name="info_txdetails_xmrto_address">Indirizzo:</string>
|
||||
|
@ -73,8 +70,8 @@
|
|||
<string name="info_paymentid_intergrated">ID pagamento integrato</string>
|
||||
<string name="info_prepare_tx">Preparando la tua transazione</string>
|
||||
|
||||
<string name="label_send_progress_xmrto_create">Creando l'ordine XMR.TO</string>
|
||||
<string name="label_send_progress_xmrto_query">Richiedendo l'ordine XMR.TO</string>
|
||||
<string name="label_send_progress_xmrto_create">Creando l\'ordine XMR.TO</string>
|
||||
<string name="label_send_progress_xmrto_query">Richiedendo l\'ordine XMR.TO</string>
|
||||
<string name="label_send_progress_create_tx">Preparando la transazione Monero</string>
|
||||
|
||||
<string name="label_send_progress_queryparms">Richiedendo i parametri XMR.TO</string>
|
||||
|
@ -111,6 +108,7 @@
|
|||
<string name="archive_progress">Archiviazione in corso</string>
|
||||
<string name="rename_progress">Rinomina in corso</string>
|
||||
<string name="open_progress">Controllando connessione con daemon</string>
|
||||
<string name="changepw_progress">[Change Password in progress]</string>
|
||||
|
||||
<string name="service_progress">Rimettendo le cose a posto …\nPuò richiedere del tempo!</string>
|
||||
|
||||
|
@ -120,6 +118,8 @@
|
|||
<string name="archive_failed">Archiviazione fallita!</string>
|
||||
<string name="delete_failed">Cancellazione fallita!</string>
|
||||
<string name="rename_failed">Rinomina fallita!</string>
|
||||
<string name="changepw_failed">[Change Password failed!]</string>
|
||||
<string name="changepw_success">[Password changed]</string>
|
||||
|
||||
<string name="label_daemon">Nodo</string>
|
||||
<string name="prompt_daemon">([<utente>:<password>@]<daemon>[:<porta>])</string>
|
||||
|
@ -151,12 +151,14 @@
|
|||
|
||||
<string name="prompt_rename">Rinomina %1$s</string>
|
||||
|
||||
<string name="prompt_changepw">[New Passphrase for %1$s]</string>
|
||||
<string name="prompt_changepwB">[Repeat Passphrase for %1$s]</string>
|
||||
<string name="prompt_password">Password per %1$s</string>
|
||||
<string name="prompt_send_password">Conferma Password</string>
|
||||
<string name="bad_password">Password errata!</string>
|
||||
<string name="bad_wallet">Il portafoglio non esiste!</string>
|
||||
<string name="error_not_wallet">Questo non è un portafoglio!</string>
|
||||
<string name="prompt_daemon_missing">Deve essere impostato l'indirizzo del Daemon!</string>
|
||||
<string name="prompt_daemon_missing">Deve essere impostato l\'indirizzo del Daemon!</string>
|
||||
<string name="prompt_wrong_net">Il portafoglio non si abbina con la rete selezionata</string>
|
||||
<string name="warn_daemon_unavailable">Impossibile connettersi al daemon! Prova di nuovo.</string>
|
||||
<string name="panic">Qualcosa è sbagliato!</string>
|
||||
|
@ -169,7 +171,6 @@
|
|||
<string name="title_amount">Ammontare</string>
|
||||
<string name="title_date">Data</string>
|
||||
<string name="xmr_unconfirmed_amount">+ %1$s XMR non confermati</string>
|
||||
<string name="xmr" translatable="false">XMR</string>
|
||||
<string name="label_transactions">Transazioni</string>
|
||||
<string name="text_daemonConnected">Daemon connesso!</string>
|
||||
|
||||
|
@ -185,8 +186,8 @@
|
|||
<string name="status_syncing">Scansionando:</string>
|
||||
|
||||
<string name="prompt_problems">Problemi</string>
|
||||
<string name="message_strorage_not_writable">L'unità di memoria esterna non è scrivibile! Aiuto!</string>
|
||||
<string name="message_strorage_not_permitted">Abbiamo veramente bisogno di questi permessi sull'unità di memoria esterna!</string>
|
||||
<string name="message_strorage_not_writable">L\'unità di memoria esterna non è scrivibile! Aiuto!</string>
|
||||
<string name="message_strorage_not_permitted">Abbiamo veramente bisogno di questi permessi sull\'unità di memoria esterna!</string>
|
||||
<string name="message_camera_not_permitted">Nessuna telecamera = Nessuna scansione QR!</string>
|
||||
|
||||
<string name="label_copy_viewkey">Chiave di visualizzazione</string>
|
||||
|
@ -205,9 +206,11 @@
|
|||
<string name="generate_title">Crea portafoglio</string>
|
||||
<string name="generate_name_hint">Nome del portafoglio</string>
|
||||
<string name="generate_password_hint">Passphrase del portafoglio</string>
|
||||
<string name="generate_bad_passwordB">[Passphrases do not match]</string>
|
||||
<string name="generate_empty_passwordB">[Passphrase may not be empty]</string>
|
||||
<string name="generate_buttonGenerate">Fammi subito un portafoglio!</string>
|
||||
<string name="generate_seed">Seed mnemonico</string>
|
||||
<string name="generate_button_accept">Ho preso nota di queste 25 parole!</string>
|
||||
<string name="generate_button_accept">[I have noted the above info!]</string>
|
||||
|
||||
<string name="generate_button_backup">Backup</string>
|
||||
<string name="generate_button_export">Esporta chiavi</string>
|
||||
|
@ -240,6 +243,7 @@
|
|||
<string name="generate_spendkey_label">Chiave di spesa</string>
|
||||
<string name="generate_mnemonic_label">Seed mnemonico</string>
|
||||
<string name="generate_restoreheight_label">Altezza di ripristino:</string>
|
||||
<string name="generate_crazypass_label">[Wallet Files Restore Password]</string>
|
||||
|
||||
<string name="generate_check_key">Inserisci una chiave valida</string>
|
||||
<string name="generate_check_address">Inserisci un indirizzo valido</string>
|
||||
|
@ -348,13 +352,6 @@
|
|||
<string name="archive_alert_yes">Sì, procedi!</string>
|
||||
<string name="archive_alert_no">No grazie!</string>
|
||||
|
||||
<string-array name="mixin" translatable="false">
|
||||
<item>Ringsize 7</item>
|
||||
<item>Ringsize 10</item>
|
||||
<item>Ringsize 13</item>
|
||||
<item>Ringsize 26</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="priority">
|
||||
<item>Priority Default</item>
|
||||
<item>Priority Bassa</item>
|
||||
|
@ -362,12 +359,6 @@
|
|||
<item>Priority Alta</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="currency" translatable="false">
|
||||
<item>XMR</item>
|
||||
<item>EUR</item>
|
||||
<item>USD</item>
|
||||
</string-array>
|
||||
|
||||
<string name="fab_create_new">Crea un nuovo portafoglio</string>
|
||||
<string name="fab_restore_viewonly">Recupera un portafoglio solo-visualizzazione</string>
|
||||
<string name="fab_restore_key">Recupera un portafoglio dalle chiavi private</string>
|
||||
|
|
|
@ -45,569 +45,4 @@
|
|||
<h2>聯絡我們</h2>
|
||||
<p>若您對於本隱私權政策或如何處理您的個人資料仍有問題,歡迎寄送電子郵件至 privacy@monerujo.io。</p>
|
||||
]]></string>
|
||||
|
||||
<string name="about_licenses" translatable="false"><![CDATA[
|
||||
<h1>開放原始碼條款</h1>
|
||||
<h2>Licensed under the Apache License, Version 2.0</h2>
|
||||
<h3>monerujo (https://github.com/m2049r/xmrwallet)</h3>
|
||||
Copyright (c) 2017 m2049r et al.
|
||||
<h3>The Android Open Source Project</h3>
|
||||
<ul>
|
||||
<li>com.android.support:design</li>
|
||||
<li>com.android.support:support-v4</li>
|
||||
<li>com.android.support:appcompat-v7</li>
|
||||
<li>com.android.support:recyclerview-v7</li>
|
||||
<li>com.android.support:cardview-v7</li>
|
||||
<li>com.android.support.constraint:constraint-layout</li>
|
||||
<li>com.android.support:support-annotations</li>
|
||||
<li>com.android.support:support-vector-drawable</li>
|
||||
<li>com.android.support:animated-vector-drawable</li>
|
||||
<li>com.android.support:transition</li>
|
||||
<li>com.android.support:support-compat</li>
|
||||
<li>com.android.support:support-media-compat</li>
|
||||
<li>com.android.support:support-core-utils</li>
|
||||
<li>com.android.support:support-core-ui</li>
|
||||
<li>com.android.support:support-fragment</li>
|
||||
<li>com.android.support.constraint:constraint-layout-solver</li>
|
||||
</ul>
|
||||
Copyright (c) The Android Open Source Project
|
||||
|
||||
<h3>OkHttp</h3>
|
||||
Copyright (c) 2014 Square, Inc.
|
||||
|
||||
<h3>Timber</h3>
|
||||
Copyright (c) 2013 Jake Wharton
|
||||
|
||||
<h3>com.google.zxing:core</h3>
|
||||
Copyright (c) 2012 ZXing authors
|
||||
|
||||
<h3>me.dm7.barcodescanner</h3>
|
||||
<ul>
|
||||
<li>me.dm7.barcodescanner:core</li>
|
||||
<li>me.dm7.barcodescanner:zxing</li>
|
||||
</ul>
|
||||
Copyright (c) 2014 Dushyanth Maguluru
|
||||
|
||||
<h3>AndroidLicensesPage (https://github.com/adamsp/AndroidLicensesPage)</h3>
|
||||
Copyright (c) 2013 Adam Speakman
|
||||
|
||||
<h3>Apache License, Version 2.0, January 2004</h3>
|
||||
http://www.apache.org/licenses/<br/>
|
||||
<br/>
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION<br/>
|
||||
<br/>
|
||||
1. Definitions.<br/>
|
||||
<br/>
|
||||
\"License\" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.<br/>
|
||||
<br/>
|
||||
\"Licensor\" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.<br/>
|
||||
<br/>
|
||||
\"Legal Entity\" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
\"control\" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.<br/>
|
||||
<br/>
|
||||
\"You\" (or \"Your\") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.<br/>
|
||||
<br/>
|
||||
\"Source\" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.<br/>
|
||||
<br/>
|
||||
\"Object\" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.<br/>
|
||||
<br/>
|
||||
\"Work\" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).<br/>
|
||||
<br/>
|
||||
\"Derivative Works\" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.<br/>
|
||||
<br/>
|
||||
\"Contribution\" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, \"submitted\"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as \"Not a Contribution.\"<br/>
|
||||
<br/>
|
||||
\"Contributor\" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.<br/>
|
||||
<br/>
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.<br/>
|
||||
<br/>
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.<br/>
|
||||
<br/>
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:<br/>
|
||||
<br/>
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and<br/>
|
||||
<br/>
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and<br/>
|
||||
<br/>
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and<br/>
|
||||
<br/>
|
||||
(d) If the Work includes a \"NOTICE\" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.<br/>
|
||||
<br/>
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.<br/>
|
||||
<br/>
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.<br/>
|
||||
<br/>
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.<br/>
|
||||
<br/>
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an \"AS IS\" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.<br/>
|
||||
<br/>
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.<br/>
|
||||
<br/>
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
<h2>Licensed under the MIT License</h2>
|
||||
<h3>rapidjson (https://github.com/monero-project/monero/blob/master/external/rapidjson)</h3>
|
||||
Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
||||
<h3>easylogging++ (https://github.com/monero-project/monero/tree/master/external/easylogging%2B%2B)</h3>
|
||||
Copyright (c) 2017 muflihun.com
|
||||
<h3>zxcvbn4j (https://github.com/nulab/zxcvbn4j)</h3>
|
||||
Copyright (c) 2014 Nulab Inc
|
||||
<h3>The MIT License</h3>
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br/>
|
||||
<br/>
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br/>
|
||||
<br/>
|
||||
THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br/>
|
||||
|
||||
<h2>Monero (https://github.com/monero-project/monero)</h2>
|
||||
<h3>The Monero Project License</h3>
|
||||
Copyright (c) 2014-2017, The Monero Project. All rights reserved.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:<br/>
|
||||
<br/>
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.<br/>
|
||||
<br/>
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.<br/>
|
||||
<br/>
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br/>
|
||||
<br/>
|
||||
Parts of the project are originally copyright (c) 2012-2013 The Cryptonote
|
||||
developers
|
||||
|
||||
<h2>OpenSSL (https://github.com/openssl/openssl)</h2>
|
||||
<h3>LICENSE ISSUES</h3>
|
||||
The OpenSSL toolkit stays under a double license, i.e. both the conditions of
|
||||
the OpenSSL License and the original SSLeay license apply to the toolkit.
|
||||
See below for the actual license texts.
|
||||
<h3>OpenSSL License</h3>
|
||||
Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:<br/>
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.<br/>
|
||||
<br/>
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.<br/>
|
||||
<br/>
|
||||
3. All advertising materials mentioning features or use of this
|
||||
software must display the following acknowledgment:
|
||||
\"This product includes software developed by the OpenSSL Project
|
||||
for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"<br/>
|
||||
<br/>
|
||||
4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to
|
||||
endorse or promote products derived from this software without
|
||||
prior written permission. For written permission, please contact
|
||||
openssl-core@openssl.org.<br/>
|
||||
<br/>
|
||||
5. Products derived from this software may not be called \"OpenSSL\"
|
||||
nor may \"OpenSSL\" appear in their names without prior written
|
||||
permission of the OpenSSL Project.<br/>
|
||||
<br/>
|
||||
6. Redistributions of any form whatsoever must retain the following
|
||||
acknowledgment:<br/>
|
||||
\"This product includes software developed by the OpenSSL Project
|
||||
for use in the OpenSSL Toolkit (http://www.openssl.org/)\"<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT \"AS IS\" AND ANY
|
||||
EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||
ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
OF THE POSSIBILITY OF SUCH DAMAGE.<br/>
|
||||
<br/>
|
||||
This product includes cryptographic software written by Eric Young
|
||||
(eay@cryptsoft.com). This product includes software written by Tim
|
||||
Hudson (tjh@cryptsoft.com).
|
||||
<h3>Original SSLeay License</h3>
|
||||
Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com). All rights reserved.<br/>
|
||||
<br/>
|
||||
This package is an SSL implementation written
|
||||
by Eric Young (eay@cryptsoft.com).
|
||||
The implementation was written so as to conform with Netscapes SSL.<br/>
|
||||
<br/>
|
||||
This library is free for commercial and non-commercial use as long as
|
||||
the following conditions are aheared to. The following conditions
|
||||
apply to all code found in this distribution, be it the RC4, RSA,
|
||||
lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
included with this distribution is covered by the same copyright terms
|
||||
except that the holder is Tim Hudson (tjh@cryptsoft.com).<br/>
|
||||
<br/>
|
||||
Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
the code are not to be removed.
|
||||
If this package is used in a product, Eric Young should be given attribution
|
||||
as the author of the parts of the library used.
|
||||
This can be in the form of a textual message at program startup or
|
||||
in documentation (online or textual) provided with the package.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:<br/>
|
||||
1. Redistributions of source code must retain the copyright
|
||||
notice, this list of conditions and the following disclaimer.<br/>
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.<br/>
|
||||
3. All advertising materials mentioning features or use of this software
|
||||
must display the following acknowledgement:<br/>
|
||||
\"This product includes cryptographic software written by
|
||||
Eric Young (eay@cryptsoft.com)\"
|
||||
The word 'cryptographic' can be left out if the rouines from the library
|
||||
being used are not cryptographic related :-).<br/>
|
||||
4. If you include any Windows specific code (or a derivative thereof) from
|
||||
the apps directory (application code) you must include an acknowledgement:
|
||||
\"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.<br/>
|
||||
<br/>
|
||||
The licence and distribution terms for any publically available version or
|
||||
derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
copied and put under another distribution licence
|
||||
[including the GNU Public Licence.]
|
||||
|
||||
<h2>Boost</h2>
|
||||
<ul>
|
||||
<li>Boost (https://sourceforge.net/projects/boost)</li>
|
||||
<li>Boost/Archive (https://github.com/monero-project/monero/tree/master/external/boost/archive)</li>
|
||||
</ul>
|
||||
<h3>Boost Software License - Version 1.0 - August 17th, 2003</h3>
|
||||
Permission is hereby granted, free of charge, to any person or organization
|
||||
obtaining a copy of the software and accompanying documentation covered by
|
||||
this license (the \"Software\") to use, reproduce, display, distribute,
|
||||
execute, and transmit the Software, and to prepare derivative works of the
|
||||
Software, and to permit third-parties to whom the Software is furnished to
|
||||
do so, all subject to the following:<br/>
|
||||
<br/>
|
||||
The copyright notices in the Software and this entire statement, including
|
||||
the above license grant, this restriction and the following disclaimer,
|
||||
must be included in all copies of the Software, in whole or in part, and
|
||||
all derivative works of the Software, unless such copies or derivative
|
||||
works are solely in the form of machine-executable object code generated by
|
||||
a source language processor.<br/>
|
||||
<br/>
|
||||
THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
<h2>Unbound (https://github.com/monero-project/monero/blob/master/external/unbound)</h2>
|
||||
<h3>Unbound Software License</h3>
|
||||
Copyright (c) 2007, NLnet Labs. All rights reserved.<br/>
|
||||
<br/>
|
||||
This software is open source.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:<br/>
|
||||
<br/>
|
||||
Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.<br/>
|
||||
<br/>
|
||||
Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.<br/>
|
||||
<br/>
|
||||
Neither the name of the NLNET LABS nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
<h2>MiniUPnPc (https://github.com/monero-project/monero/blob/master/external/miniupnpc)</h2>
|
||||
Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
||||
<h3>The MiniUPnPc License</h3>
|
||||
Copyright (c) 2005-2015, Thomas BERNARD. All rights reserved.<br/>
|
||||
<br/>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:<br/>
|
||||
<br/>
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.<br/>
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.<br/>
|
||||
* The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
<h2>liblmdb (https://github.com/monero-project/monero/blob/master/external/db_drivers/liblmdb)</h2>
|
||||
<h3>The OpenLDAP Public License, Version 2.8, 17 August 2003</h3>
|
||||
Redistribution and use of this software and associated documentation
|
||||
(\"Software\"), with or without modification, are permitted provided
|
||||
that the following conditions are met:<br/>
|
||||
<br/>
|
||||
1. Redistributions in source form must retain copyright statements
|
||||
and notices,<br/>
|
||||
<br/>
|
||||
2. Redistributions in binary form must reproduce applicable copyright
|
||||
statements and notices, this list of conditions, and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution, and<br/>
|
||||
<br/>
|
||||
3. Redistributions must contain a verbatim copy of this document.<br/>
|
||||
<br/>
|
||||
The OpenLDAP Foundation may revise this license from time to time.
|
||||
Each revision is distinguished by a version number. You may use
|
||||
this Software under terms of this license revision or under the
|
||||
terms of any subsequent revision of the license.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS
|
||||
CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S)
|
||||
OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.<br/>
|
||||
<br/>
|
||||
The names of the authors and copyright holders must not be used in
|
||||
advertising or otherwise to promote the sale, use or other dealing
|
||||
in this Software without specific, written prior permission. Title
|
||||
to copyright in this Software shall at all times remain with copyright
|
||||
holders.<br/>
|
||||
<br/>
|
||||
OpenLDAP is a registered trademark of the OpenLDAP Foundation.<br/>
|
||||
<br/>
|
||||
Copyright 1999-2003 The OpenLDAP Foundation, Redwood City,
|
||||
California, USA. All Rights Reserved. Permission to copy and
|
||||
distribute verbatim copies of this document is granted.
|
||||
|
||||
<h2>epee (https://github.com/monero-project/monero/blob/master/contrib/epee)</h2>
|
||||
Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net. All rights reserved.
|
||||
<h3>The epee License</h3>
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:<br/>
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.<br/>
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.<br/>
|
||||
* Neither the name of the Andrey N. Sabelnikov nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.<br/>
|
||||
<br/>
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL Andrey N. Sabelnikov BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
<h2>'Poppins' Font</h2>
|
||||
<h3>SIL Open Font License</h3>
|
||||
<p>Copyright (c) 2014, Indian Type Foundry (info@indiantypefoundry.com).</p>
|
||||
<p>This Font Software is licensed under the SIL Open Font License, Version 1.1.<br />
|
||||
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL</p>
|
||||
<p>—————————————————————————————-<br />
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007<br />—————————————————————————————-</p>
|
||||
<p>PREAMBLE<br />
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.</p>
|
||||
<p>The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.</p>
|
||||
<p>DEFINITIONS<br />
|
||||
“Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.</p>
|
||||
<p>“Reserved Font Name” refers to any names specified as such after the copyright statement(s).</p>
|
||||
<p>“Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).</p>
|
||||
<p>“Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.</p>
|
||||
<p>“Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.</p>
|
||||
<p>PERMISSION & CONDITIONS<br />
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:</p>
|
||||
<p>1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.</p>
|
||||
<p>2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.</p>
|
||||
<p>3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.</p>
|
||||
<p>4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.</p>
|
||||
<p>5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.</p>
|
||||
<p>TERMINATION<br />
|
||||
This license becomes null and void if any of the above conditions are not met.</p>
|
||||
<p>DISCLAIMER<br />
|
||||
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.</p>
|
||||
]]></string>
|
||||
</resources>
|
|
@ -56,6 +56,26 @@
|
|||
會失去你的Monero,其他人可以透過這個地址發送Monero到你的錢包。
|
||||
<h2>記憶種子碼</h2>
|
||||
這是你唯一需要用來回復錢包的資訊並且可以用來取用錢包的完全權限。妥善保護好這份種子碼是相當重要的事情,因為它可以給予<em>任何人</em>對你的錢包操作的權限! 如果你還尚未在安全的地方抄寫保存這份種子碼,請盡速進行。
|
||||
<h2>Wallet Files Recovery Password</h2>
|
||||
Make sure you write this password down. If you reset your device or uninstall the app, you
|
||||
will need it to access your wallet again.<br/>
|
||||
<h3>CrAzYpass</h3>
|
||||
If the password displayed here is 52 alphanumeric characters in groups of 4 - congratulations!
|
||||
Your wallet files are secured with a 256-bit key generated by your device's security
|
||||
features based on the passphrase you chose (on creation or by changing it). This makes it
|
||||
extremenly difficult to hack!<br/>
|
||||
This feature is mandatory for all newly created wallets.
|
||||
<h3>Legacy Password</h3>
|
||||
If you see your passphrase here, your wallet files are not as secure as when using
|
||||
a CrAzYpass. To fix this, simply select \"Change Passphrase\" from the menu. After entering
|
||||
a new passphrase (maybe even the same one as before) the app will generate a CrAzYpass for
|
||||
you and secure your wallet files with it. Write it down!
|
||||
<h3>CrAzYpass wallets</h3>
|
||||
If you ever need to reinstall Monerujo (for example after resetting your phone or switching
|
||||
to a new one) or you want to use your wallet files on a different device or PC, you have to
|
||||
use this Recovery Password in order to access your wallet again.<br/>
|
||||
By selecting \"Change Passphrase\" from the menu, you can choose another passphrase. Beware
|
||||
that this will generate a new Recovery Password. Write it down!
|
||||
<h2>查看金鑰</h2>
|
||||
查看金鑰可以被用在查看錢包的入帳金額而不包含花費錢包資金的權限。
|
||||
<h2>花費金鑰</h2>
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
<string name="menu_rename">重新命名 …</string>
|
||||
<string name="menu_archive">封存</string>
|
||||
<string name="menu_backup">備份</string>
|
||||
<string name="menu_changepw">[Change Passphrase]</string>
|
||||
|
||||
<string name="password_weak">再長一點 …</string>
|
||||
<string name="password_fair">嗯 …</string>
|
||||
|
@ -42,9 +43,7 @@
|
|||
<string name="info_send_xmrto_success_order_label">XMR.TO訂單</string>
|
||||
|
||||
<string name="info_send_xmrto_success_sending">發送中</string>
|
||||
<string name="info_send_xmrto_success_status_label">狀態:</string>
|
||||
<string name="info_send_xmrto_success_btc">%1$s BTC</string>
|
||||
<string name="info_send_xmrto_success_status">%1$s 是 %1$s (#%1$d)</string>
|
||||
|
||||
<string name="info_txdetails_xmrto_key">金鑰:</string>
|
||||
<string name="info_txdetails_xmrto_address">地址:</string>
|
||||
|
@ -109,6 +108,7 @@
|
|||
<string name="archive_progress">正在封存中</string>
|
||||
<string name="rename_progress">正在重新命名</string>
|
||||
<string name="open_progress">正在檢查daemon連線</string>
|
||||
<string name="changepw_progress">[Change Password in progress]</string>
|
||||
|
||||
<string name="service_progress">正在關閉錢包 …\n可能會花費些許時間!</string>
|
||||
|
||||
|
@ -118,6 +118,8 @@
|
|||
<string name="archive_failed">封存失敗!</string>
|
||||
<string name="delete_failed">刪除失敗!</string>
|
||||
<string name="rename_failed">重新命名失敗!</string>
|
||||
<string name="changepw_failed">[Change Password failed!]</string>
|
||||
<string name="changepw_success">[Password changed]</string>
|
||||
|
||||
<string name="label_daemon">節點</string>
|
||||
<string name="prompt_daemon">([<名稱>:<密碼>@]<節點>[:<port>])</string>
|
||||
|
@ -149,6 +151,8 @@
|
|||
|
||||
<string name="prompt_rename">重新命名 %1$s</string>
|
||||
|
||||
<string name="prompt_changepw">[New Passphrase for %1$s]</string>
|
||||
<string name="prompt_changepwB">[Repeat Passphrase for %1$s]</string>
|
||||
<string name="prompt_password">%1$s 的密碼</string>
|
||||
<string name="prompt_send_password">確認密碼</string>
|
||||
<string name="bad_password">密碼錯誤!</string>
|
||||
|
@ -202,9 +206,11 @@
|
|||
<string name="generate_title">建立錢包</string>
|
||||
<string name="generate_name_hint">錢包名稱</string>
|
||||
<string name="generate_password_hint">錢包密碼</string>
|
||||
<string name="generate_bad_passwordB">[Passphrases do not match]</string>
|
||||
<string name="generate_empty_passwordB">[Passphrase may not be empty]</string>
|
||||
<string name="generate_buttonGenerate">建立錢包!</string>
|
||||
<string name="generate_seed">記憶種子碼</string>
|
||||
<string name="generate_button_accept">我已抄寫下這25個單字!</string>
|
||||
<string name="generate_button_accept">[I have noted the above info!]</string>
|
||||
|
||||
<string name="generate_button_backup">備份</string>
|
||||
<string name="generate_button_export">匯出金鑰</string>
|
||||
|
@ -237,6 +243,7 @@
|
|||
<string name="generate_spendkey_label">花費金鑰</string>
|
||||
<string name="generate_mnemonic_label">記憶種子碼</string>
|
||||
<string name="generate_restoreheight_label">回復高度:</string>
|
||||
<string name="generate_crazypass_label">[Wallet Files Restore Password]</string>
|
||||
|
||||
<string name="generate_check_key">輸入有效的金鑰</string>
|
||||
<string name="generate_check_address">輸入有效的地址</string>
|
||||
|
|
|
@ -62,6 +62,26 @@
|
|||
This is the only data needed to recover your wallet at a later point and gain full access to
|
||||
your funds. Keeping this private and secure is very important, as it gives <em>anyone</em> full
|
||||
access to your Monero! If you haven’t written this down somewhere safe please do!
|
||||
<h2>Wallet Files Recovery Password</h2>
|
||||
Make sure you write this password down. If you reset your device or uninstall the app, you
|
||||
will need it to access your wallet again.<br/>
|
||||
<h3>CrAzYpass</h3>
|
||||
If the password displayed here is 52 alphanumeric characters in groups of 4 - congratulations!
|
||||
Your wallet files are secured with a 256-bit key generated by your device's security
|
||||
features based on the passphrase you chose (on creation or by changing it). This makes it
|
||||
extremenly difficult to hack!<br/>
|
||||
This feature is mandatory for all newly created wallets.
|
||||
<h3>Legacy Password</h3>
|
||||
If you see your passphrase here, your wallet files are not as secure as when using
|
||||
a CrAzYpass. To fix this, simply select \"Change Passphrase\" from the menu. After entering
|
||||
a new passphrase (maybe even the same one as before) the app will generate a CrAzYpass for
|
||||
you and secure your wallet files with it. Write it down!
|
||||
<h3>CrAzYpass wallets</h3>
|
||||
If you ever need to reinstall Monerujo (for example after resetting your phone or switching
|
||||
to a new one) or you want to use your wallet files on a different device or PC, you have to
|
||||
use this Recovery Password in order to access your wallet again.<br/>
|
||||
By selecting \"Change Passphrase\" from the menu, you can choose another passphrase. Beware
|
||||
that this will generate a new Recovery Password. Write it down!
|
||||
<h2>View key</h2>
|
||||
Your view key can be used to monitor incoming transactions to your wallet without giving
|
||||
permission to spend the funds inside your wallet.
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
<string name="menu_rename">Rename …</string>
|
||||
<string name="menu_archive">Archive</string>
|
||||
<string name="menu_backup">Backup</string>
|
||||
<string name="menu_changepw">Change Passphrase</string>
|
||||
|
||||
<string name="password_weak">Continue typing …</string>
|
||||
<string name="password_fair">Meh …</string>
|
||||
|
@ -44,9 +45,7 @@
|
|||
<string name="info_send_xmrto_success_order_label">XMR.TO Order</string>
|
||||
|
||||
<string name="info_send_xmrto_success_sending">Sending</string>
|
||||
<string name="info_send_xmrto_success_status_label">Status:</string>
|
||||
<string name="info_send_xmrto_success_btc">%1$s BTC</string>
|
||||
<string name="info_send_xmrto_success_status">%1$s is %1$s (#%1$d)</string>
|
||||
|
||||
<string name="info_txdetails_xmrto_key">Key:</string>
|
||||
<string name="info_txdetails_xmrto_address">Address:</string>
|
||||
|
@ -111,6 +110,7 @@
|
|||
<string name="archive_progress">Archive in progress</string>
|
||||
<string name="rename_progress">Rename in progress</string>
|
||||
<string name="open_progress">Checking daemon connection</string>
|
||||
<string name="changepw_progress">Change Password in progress</string>
|
||||
|
||||
<string name="service_progress">Wrapping things up …\nThis can take a while!</string>
|
||||
|
||||
|
@ -120,6 +120,8 @@
|
|||
<string name="archive_failed">Archive failed!</string>
|
||||
<string name="delete_failed">Delete failed!</string>
|
||||
<string name="rename_failed">Rename failed!</string>
|
||||
<string name="changepw_failed">Change Password failed!</string>
|
||||
<string name="changepw_success">Password changed</string>
|
||||
|
||||
<string name="label_daemon">Node</string>
|
||||
<string name="prompt_daemon">([<user>:<pass>@]<daemon>[:<port>])</string>
|
||||
|
@ -151,6 +153,8 @@
|
|||
|
||||
<string name="prompt_rename">Rename %1$s</string>
|
||||
|
||||
<string name="prompt_changepw">New Passphrase for %1$s</string>
|
||||
<string name="prompt_changepwB">Repeat Passphrase for %1$s</string>
|
||||
<string name="prompt_password">Password for %1$s</string>
|
||||
<string name="prompt_send_password">Confirm Password</string>
|
||||
<string name="bad_password">Incorrect password!</string>
|
||||
|
@ -205,9 +209,11 @@
|
|||
<string name="generate_title">Create Wallet</string>
|
||||
<string name="generate_name_hint">Wallet Name</string>
|
||||
<string name="generate_password_hint">Wallet Passphrase</string>
|
||||
<string name="generate_bad_passwordB">Passphrases do not match</string>
|
||||
<string name="generate_empty_passwordB">Passphrase may not be empty</string>
|
||||
<string name="generate_buttonGenerate">Make me a wallet already!</string>
|
||||
<string name="generate_seed">Mnemonic Seed</string>
|
||||
<string name="generate_button_accept">I have noted these 25 words!</string>
|
||||
<string name="generate_button_accept">I have noted the mnemonic seed</string>
|
||||
|
||||
<string name="generate_button_backup">Backup</string>
|
||||
<string name="generate_button_export">Export Keys</string>
|
||||
|
@ -240,6 +246,7 @@
|
|||
<string name="generate_spendkey_label">Spend Key</string>
|
||||
<string name="generate_mnemonic_label">Mnemonic Seed</string>
|
||||
<string name="generate_restoreheight_label">Restore Height:</string>
|
||||
<string name="generate_crazypass_label">Wallet Files Restore Password</string>
|
||||
|
||||
<string name="generate_check_key">Enter valid Key</string>
|
||||
<string name="generate_check_address">Enter valid Address</string>
|
||||
|
|
|
@ -28,5 +28,5 @@ ext {
|
|||
okHttpVersion = '3.9.0'
|
||||
junitVersion = '4.12'
|
||||
mockitoVersion = '1.10.19'
|
||||
timberVersion = '4.6.0'
|
||||
timberVersion = '4.7.0'
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue