Skip to content

Commit

Permalink
CrAzYpass implementation (#234)
Browse files Browse the repository at this point in the history
  • Loading branch information
m2049r committed Apr 21, 2018
1 parent 37f22a9 commit 073bd96
Show file tree
Hide file tree
Showing 29 changed files with 929 additions and 1,326 deletions.
5 changes: 1 addition & 4 deletions .gitignore
@@ -1,10 +1,7 @@
.gradle
/build
*.iml
/.idea/libraries
/.idea/workspace.xml
/.idea/caches
/.idea/codeStyles
/.idea
/local.properties
/captures
.externalNativeBuild
Expand Down
5 changes: 2 additions & 3 deletions app/build.gradle
Expand Up @@ -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 {
Expand Down Expand Up @@ -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"
Expand Down
27 changes: 22 additions & 5 deletions app/src/main/cpp/monerujo.cpp
Expand Up @@ -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) {
Expand Down Expand Up @@ -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);
Expand All @@ -1109,7 +1127,7 @@ Java_com_m2049r_xmrwallet_model_WalletManager_logDebug(JNIEnv *env, jobject inst

JNIEXPORT void JNICALL
Java_com_m2049r_xmrwallet_model_WalletManager_logInfo(JNIEnv *env, jobject instance,
jstring category, jstring message) {
jstring category, jstring message) {

const char *_category = env->GetStringUTFChars(category, NULL);
const char *_message = env->GetStringUTFChars(message, NULL);
Expand All @@ -1122,7 +1140,7 @@ Java_com_m2049r_xmrwallet_model_WalletManager_logInfo(JNIEnv *env, jobject insta

JNIEXPORT void JNICALL
Java_com_m2049r_xmrwallet_model_WalletManager_logWarning(JNIEnv *env, jobject instance,
jstring category, jstring message) {
jstring category, jstring message) {

const char *_category = env->GetStringUTFChars(category, NULL);
const char *_message = env->GetStringUTFChars(message, NULL);
Expand All @@ -1149,11 +1167,10 @@ Java_com_m2049r_xmrwallet_model_WalletManager_logError(JNIEnv *env, jobject inst
JNIEXPORT void JNICALL
Java_com_m2049r_xmrwallet_model_WalletManager_setLogLevel(JNIEnv *env, jobject instance,
jint level) {
Bitmonero::WalletManagerFactory::setLogLevel(level);
Bitmonero::WalletManagerFactory::setLogLevel(level);
}



#ifdef __cplusplus
}
#endif
26 changes: 22 additions & 4 deletions app/src/main/cpp/monerujo.h
Expand Up @@ -18,6 +18,7 @@
#define XMRWALLET_WALLET_LIB_H

#include <jni.h>

/*
#include <android/log.h>
Expand All @@ -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);
}
Expand All @@ -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
10 changes: 7 additions & 3 deletions app/src/main/java/com/m2049r/xmrwallet/GenerateFragment.java
Expand Up @@ -34,6 +34,7 @@
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;
Expand Down Expand Up @@ -424,17 +425,20 @@ private void generateWallet() {
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);
Expand All @@ -444,7 +448,7 @@ private void generateWallet() {
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);
}
}
}
Expand Down

0 comments on commit 073bd96

Please sign in to comment.