summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeapo <mohamed@zenadi.com>2014-08-06 16:43:37 +0100
committerZeapo <mohamed@zenadi.com>2014-08-06 16:43:37 +0100
commit42d22abfbc999699ce8441fc4ffa1af4a6c35ddd (patch)
tree924056b99a414edef742a55a5f2714221ed51c91
parentd4380507b03479f9fd70d741d07e105c76ab3ea6 (diff)
encryption working with a temporary hack (default account)
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/PasswordStore.java4
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java93
-rw-r--r--app/src/main/res/layout/decrypt_layout.xml2
-rw-r--r--app/src/main/res/layout/encrypt_layout.xml135
4 files changed, 169 insertions, 65 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java
index fdc90518..6faecf86 100644
--- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java
+++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java
@@ -199,9 +199,9 @@ public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentI
Intent intent = new Intent(this, PgpHandler.class);
intent.putExtra("PGP-ID", FileUtils.readFileToString(PasswordRepository.getFile("/.gpg-id")));
intent.putExtra("NAME", "test.gpg");
- intent.putExtra("FILE_PATH", this.currentDir.getAbsolutePath() + "/test.gpg");
+ intent.putExtra("FILE_PATH", this.currentDir.getAbsolutePath());
intent.putExtra("Operation", "ENCRYPT");
- startActivity(intent);
+ startActivityForResult(intent, 0);
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java
index 72775400..11c2985e 100644
--- a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java
+++ b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java
@@ -32,15 +32,20 @@ import org.openintents.openpgp.util.OpenPgpApi;
import org.openintents.openpgp.util.OpenPgpServiceConnection;
import org.openintents.openpgp.util.OpenPgpUtils;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.StringReader;
import java.io.UnsupportedEncodingException;
public class PgpHandler extends Activity {
private OpenPgpServiceConnection mServiceConnection;
+ private String keyIDs = "";
+ SharedPreferences settings;
public static final int REQUEST_CODE_SIGN = 9910;
public static final int REQUEST_CODE_ENCRYPT = 9911;
@@ -73,7 +78,7 @@ public class PgpHandler extends Activity {
}
// some persistance
- SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
+ settings = PreferenceManager.getDefaultSharedPreferences(this);
String providerPackageName = settings.getString("openpgp_provider_list", "");
String accountName = settings.getString("openpgp_account_name", "");
@@ -109,8 +114,20 @@ public class PgpHandler extends Activity {
return super.onOptionsItemSelected(item);
}
- public void decrypt(View view) {
- decryptAndVerify(new Intent());
+ public void handleClick(View view) {
+ switch (view.getId()) {
+ case R.id.crypto_show_button :
+ decryptAndVerify(new Intent());
+ break;
+ case R.id.crypto_confirm_add:
+ encrypt(new Intent());
+ break;
+ case R.id.crypto_cancel_add:
+ break;
+ default:
+ // should not happen
+
+ }
// getKeyIds(new Intent());
}
@@ -124,6 +141,7 @@ public class PgpHandler extends Activity {
Toast.LENGTH_LONG).show();
Log.e(Constants.TAG, "onError getErrorId:" + error.getErrorId());
Log.e(Constants.TAG, "onError getMessage:" + error.getMessage());
+ Log.e(Constants.TAG, " " + error.toString());
}
});
}
@@ -202,7 +220,7 @@ public class PgpHandler extends Activity {
showToast("RESULT_CODE_SUCCESS");
// encrypt/decrypt/sign/verify
- if (os != null) {
+ if (requestCode == REQUEST_CODE_DECRYPT_AND_VERIFY && os != null) {
try {
Log.d(OpenPgpApi.TAG, "result: " + os.toByteArray().length
+ " str=" + os.toString("UTF-8"));
@@ -227,6 +245,29 @@ public class PgpHandler extends Activity {
Log.e(Constants.TAG, "UnsupportedEncodingException", e);
}
}
+ // encrypt
+ if (requestCode == REQUEST_CODE_ENCRYPT && os != null) {
+ try {
+ Log.d(OpenPgpApi.TAG, "result: " + os.toByteArray().length
+ + " str=" + os.toString("UTF-8"));
+
+ if (returnToCiphertextField) {
+ String path = getIntent().getExtras().getString("FILE_PATH")
+ + "/" + ((EditText) findViewById(R.id.crypto_password_file_edit)).getText().toString()
+ + ".gpg";
+ OutputStream outputStream = FileUtils.openOutputStream(new File(path));
+ outputStream.write(os.toByteArray());
+ finishActivity(0);
+ } else {
+ showToast(os.toString());
+ }
+
+ } catch (Exception e) {
+ Log.e(Constants.TAG, "UnsupportedEncodingException", e);
+ }
+ }
+
+
// verify
if (result.hasExtra(OpenPgpApi.RESULT_SIGNATURE)) {
@@ -237,13 +278,11 @@ public class PgpHandler extends Activity {
// get key ids
if (result.hasExtra(OpenPgpApi.RESULT_KEY_IDS)) {
- long[] keyIds = result.getLongArrayExtra(OpenPgpApi.RESULT_KEY_IDS);
- String out = "keyIds: ";
- for (int i = 0; i < keyIds.length; i++) {
- out += OpenPgpUtils.convertKeyIdToHex(keyIds[i]) + ", ";
- }
+ long[] ids = result.getLongArrayExtra(OpenPgpApi.RESULT_KEY_IDS);
- showToast(out);
+ for (int i = 0; i < ids.length; i++) {
+ keyIDs += OpenPgpUtils.convertKeyIdToHex(ids[i]) + ", ";
+ }
}
break;
}
@@ -288,6 +327,32 @@ public class PgpHandler extends Activity {
}
+ public void encrypt(Intent data) {
+
+ data.setAction(OpenPgpApi.ACTION_ENCRYPT);
+ data.putExtra(OpenPgpApi.EXTRA_USER_IDS, new String[] {"default"});
+ data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
+
+ String pass = ((EditText) findViewById(R.id.crypto_password_edit)).getText().toString();
+ String extra = ((EditText) findViewById(R.id.crypto_extra_edit)).getText().toString();
+
+ ByteArrayInputStream is;
+
+ try {
+ is = new ByteArrayInputStream((pass + "\n" + extra).getBytes("UTF-8"));
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+ OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
+ api.executeApiAsync(data, is, os, new MyCallback(true, os, REQUEST_CODE_ENCRYPT));
+
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+
public void getKeyIds(Intent data) {
data.setAction(OpenPgpApi.ACTION_GET_KEY_IDS);
data.putExtra(OpenPgpApi.EXTRA_USER_IDS, new String[]{getIntent().getExtras().getString("PGP-ID")});
@@ -314,10 +379,10 @@ public class PgpHandler extends Activity {
// sign(data);
// break;
// }
-// case REQUEST_CODE_ENCRYPT: {
-// encrypt(data);
-// break;
-// }
+ case REQUEST_CODE_ENCRYPT: {
+ encrypt(data);
+ break;
+ }
// case REQUEST_CODE_SIGN_AND_ENCRYPT: {
// signAndEncrypt(data);
// break;
diff --git a/app/src/main/res/layout/decrypt_layout.xml b/app/src/main/res/layout/decrypt_layout.xml
index 8612ce3b..b1f97e7d 100644
--- a/app/src/main/res/layout/decrypt_layout.xml
+++ b/app/src/main/res/layout/decrypt_layout.xml
@@ -36,7 +36,7 @@
android:background="@android:drawable/screen_background_light_transparent"
android:layout_gravity="center_vertical"
android:visibility="invisible"
- android:onClick="decrypt"
+ android:onClick="handleClick"
android:layout_column="2"
android:layout_row="0"/>
</GridLayout>
diff --git a/app/src/main/res/layout/encrypt_layout.xml b/app/src/main/res/layout/encrypt_layout.xml
index ca891d31..c4949c9a 100644
--- a/app/src/main/res/layout/encrypt_layout.xml
+++ b/app/src/main/res/layout/encrypt_layout.xml
@@ -1,84 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
- tools:context="com.zeapo.pwdstore.crypto.PgpHandler"
- android:orientation="vertical"
android:background="#eee">
- <LinearLayout
+ <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/rectangle"
- android:orientation="horizontal">
+ android:layout_height="fill_parent"
+ tools:context="com.zeapo.pwdstore.crypto.PgpHandler">
- <TextView
- android:layout_gravity="center_vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textStyle="bold"
- android:text="Name: "/>
- <EditText
- android:layout_gravity="center_vertical"
- android:layout_width="fill_parent"
+ <LinearLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textColor="@android:color/holo_orange_dark"/>
+ android:background="@drawable/rectangle"
+ android:orientation="horizontal"
+ android:layout_row="1"
+ android:layout_column="0">
- </LinearLayout>
+ <TextView
+ android:layout_gravity="center_vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textStyle="bold"
+ android:text="Name: "/>
+ <EditText
+ android:layout_gravity="center_vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/crypto_password_file_edit"
+ android:textColor="@android:color/holo_orange_dark"/>
+
+ </LinearLayout>
- <LinearLayout
- android:id="@+id/crypto_container"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_marginTop="@dimen/activity_vertical_margin"
- android:background="@drawable/rectangle"
- android:layout_height="wrap_content">
<LinearLayout
- android:id="@+id/crypto_password_edit_layout"
- android:layout_width="match_parent"
+ android:id="@+id/crypto_container"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:background="@drawable/rectangle"
android:layout_height="wrap_content"
- android:orientation="vertical">
+ android:layout_row="2"
+ android:layout_column="0">
<LinearLayout
+ android:id="@+id/crypto_password_edit_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal">
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textStyle="bold"
+ android:text="Password: "/>
+ <EditText
+ android:id="@+id/crypto_password_edit"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:typeface="monospace"/>
+ </LinearLayout>
+
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
android:textStyle="bold"
- android:text="Password: "/>
+ android:text="Extra content: "/>
+
<EditText
- android:id="@+id/crypto_password_edit"
- android:layout_width="fill_parent"
+ android:id="@+id/crypto_extra_edit"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:enabled="true"
+ android:visibility="visible"
android:typeface="monospace"/>
</LinearLayout>
+ </LinearLayout>
- <TextView
- android:layout_width="wrap_content"
+ <RelativeLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_row="3"
+ android:layout_column="0">
+ <ImageButton
android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:textStyle="bold"
- android:text="Extra content: "/>
+ android:layout_width="wrap_content"
+ android:src="@android:drawable/ic_input_add"
+ android:background="@drawable/oval"
+ android:id="@+id/crypto_confirm_add"
+ android:onClick="handleClick"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true" />
- <EditText
- android:id="@+id/crypto_edit_show"
- android:layout_width="match_parent"
+ <ImageButton
android:layout_height="wrap_content"
- android:enabled="true"
- android:visibility="visible"
- android:typeface="monospace"/>
- </LinearLayout>
- </LinearLayout>
+ android:layout_width="wrap_content"
+ android:src="@android:drawable/ic_delete"
+ android:background="@drawable/oval"
+ android:id="@+id/crypto_cancel_add"
+ android:onClick="handleClick"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true" />
+ </RelativeLayout>
-</LinearLayout>
+ </GridLayout>
+</ScrollView>