decryption is working, yay! now work on the callback
This commit is contained in:
parent
86ff7a660c
commit
4fe2baccf1
3 changed files with 167 additions and 4 deletions
|
@ -19,6 +19,7 @@ import org.openintents.openpgp.util.OpenPgpListPreference;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileFilter;
|
import java.io.FileFilter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
|
||||||
public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentInteractionListener, PasswordFragment.OnFragmentInteractionListener {
|
public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentInteractionListener, PasswordFragment.OnFragmentInteractionListener {
|
||||||
|
@ -114,15 +115,17 @@ public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentI
|
||||||
@Override
|
@Override
|
||||||
public void onFragmentInteraction(String id) {
|
public void onFragmentInteraction(String id) {
|
||||||
|
|
||||||
Intent intent = new Intent(this, PgpHandler.class);
|
|
||||||
intent.putExtra("FILE_NAME", id);
|
|
||||||
startActivity(intent);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
byte[] data = new byte[0];
|
byte[] data = new byte[0];
|
||||||
try {
|
try {
|
||||||
data = FileUtils.readFileToByteArray(PasswordRepository.getFile(id));
|
data = FileUtils.readFileToByteArray(PasswordRepository.getFile(id));
|
||||||
|
|
||||||
|
Intent intent = new Intent(this, PgpHandler.class);
|
||||||
|
intent.putExtra("FILE_CONTENT", data);
|
||||||
|
intent.putExtra("FILE_PATH", PasswordRepository.getFile(id).getAbsolutePath());
|
||||||
|
startActivity(intent);
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,33 @@
|
||||||
package com.zeapo.pwdstore;
|
package com.zeapo.pwdstore;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.PendingIntent;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentSender;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.zeapo.pwdstore.R;
|
import com.zeapo.pwdstore.R;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.openintents.openpgp.OpenPgpError;
|
||||||
|
import org.openintents.openpgp.OpenPgpSignatureResult;
|
||||||
|
import org.openintents.openpgp.util.OpenPgpApi;
|
||||||
import org.openintents.openpgp.util.OpenPgpServiceConnection;
|
import org.openintents.openpgp.util.OpenPgpServiceConnection;
|
||||||
|
import org.openintents.openpgp.util.OpenPgpUtils;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
|
||||||
public class PgpHandler extends Activity {
|
public class PgpHandler extends Activity {
|
||||||
|
|
||||||
|
@ -26,12 +45,30 @@ public class PgpHandler extends Activity {
|
||||||
public static final String TAG = "Keychain";
|
public static final String TAG = "Keychain";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String filePath;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_pgp_handler);
|
setContentView(R.layout.activity_pgp_handler);
|
||||||
|
|
||||||
|
// some persistance
|
||||||
|
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
String providerPackageName = settings.getString("openpgp_provider_list", "");
|
||||||
|
|
||||||
|
System.out.println(getIntent().getExtras().getString("FILE_PATH"));
|
||||||
Bundle extra = getIntent().getExtras();
|
Bundle extra = getIntent().getExtras();
|
||||||
((TextView) findViewById(R.id.hhh)).setText(extra.getString("FILE_NAME"));
|
((TextView) findViewById(R.id.hhh)).setText(extra.getString("FILE_PATH"));
|
||||||
|
|
||||||
|
if (TextUtils.isEmpty(providerPackageName)) {
|
||||||
|
Toast.makeText(this, "No OpenPGP Provider selected!", Toast.LENGTH_LONG).show();
|
||||||
|
finish();
|
||||||
|
} else {
|
||||||
|
// bind to service
|
||||||
|
mServiceConnection = new OpenPgpServiceConnection(
|
||||||
|
PgpHandler.this, providerPackageName);
|
||||||
|
mServiceConnection.bindToService();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,4 +90,121 @@ public class PgpHandler extends Activity {
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void handleError(final OpenPgpError error) {
|
||||||
|
runOnUiThread(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Toast.makeText(PgpHandler.this,
|
||||||
|
"onError id:" + error.getErrorId() + "\n\n" + error.getMessage(),
|
||||||
|
Toast.LENGTH_LONG).show();
|
||||||
|
Log.e(Constants.TAG, "onError getErrorId:" + error.getErrorId());
|
||||||
|
Log.e(Constants.TAG, "onError getMessage:" + error.getMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showToast(final String message) {
|
||||||
|
runOnUiThread(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Toast.makeText(PgpHandler.this,
|
||||||
|
message,
|
||||||
|
Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private class MyCallback implements OpenPgpApi.IOpenPgpCallback {
|
||||||
|
boolean returnToCiphertextField;
|
||||||
|
ByteArrayOutputStream os;
|
||||||
|
int requestCode;
|
||||||
|
|
||||||
|
private MyCallback(boolean returnToCiphertextField, ByteArrayOutputStream os, int requestCode) {
|
||||||
|
this.returnToCiphertextField = returnToCiphertextField;
|
||||||
|
this.os = os;
|
||||||
|
this.requestCode = requestCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReturn(Intent result) {
|
||||||
|
switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) {
|
||||||
|
case OpenPgpApi.RESULT_CODE_SUCCESS: {
|
||||||
|
showToast("RESULT_CODE_SUCCESS");
|
||||||
|
|
||||||
|
// encrypt/decrypt/sign/verify
|
||||||
|
if (os != null) {
|
||||||
|
try {
|
||||||
|
Log.d(OpenPgpApi.TAG, "result: " + os.toByteArray().length
|
||||||
|
+ " str=" + os.toString("UTF-8"));
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
Log.e(Constants.TAG, "UnsupportedEncodingException", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify
|
||||||
|
if (result.hasExtra(OpenPgpApi.RESULT_SIGNATURE)) {
|
||||||
|
OpenPgpSignatureResult sigResult
|
||||||
|
= result.getParcelableExtra(OpenPgpApi.RESULT_SIGNATURE);
|
||||||
|
showToast(sigResult.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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]) + ", ";
|
||||||
|
}
|
||||||
|
|
||||||
|
showToast(out);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED: {
|
||||||
|
showToast("RESULT_CODE_USER_INTERACTION_REQUIRED");
|
||||||
|
|
||||||
|
PendingIntent pi = result.getParcelableExtra(OpenPgpApi.RESULT_INTENT);
|
||||||
|
try {
|
||||||
|
PgpHandler.this.startIntentSenderForResult(pi.getIntentSender(),
|
||||||
|
requestCode, null, 0, 0, 0);
|
||||||
|
} catch (IntentSender.SendIntentException e) {
|
||||||
|
Log.e(Constants.TAG, "SendIntentException", e);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case OpenPgpApi.RESULT_CODE_ERROR: {
|
||||||
|
showToast("RESULT_CODE_ERROR");
|
||||||
|
|
||||||
|
OpenPgpError error = result.getParcelableExtra(OpenPgpApi.RESULT_ERROR);
|
||||||
|
handleError(error);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getKey(View view) {
|
||||||
|
decryptAndVerify(new Intent());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decryptAndVerify(Intent data) {
|
||||||
|
data.setAction(OpenPgpApi.ACTION_DECRYPT_VERIFY);
|
||||||
|
data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
|
||||||
|
data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, "Mohamed Zenadi");
|
||||||
|
|
||||||
|
try {
|
||||||
|
InputStream is = FileUtils.openInputStream(new File(getIntent().getExtras().getString("FILE_PATH")));
|
||||||
|
|
||||||
|
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||||
|
|
||||||
|
OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
|
||||||
|
api.executeApiAsync(data, is, os, new MyCallback(false, os, REQUEST_CODE_DECRYPT_AND_VERIFY));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,4 +14,10 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:onClick="getKey"
|
||||||
|
android:text="getkey"/>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
Loading…
Reference in a new issue