mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-17 22:35:05 -05:00
working on decrypt and restructering...
This commit is contained in:
parent
437ec9c49a
commit
e9c01957f4
@ -42,7 +42,7 @@
|
|||||||
android:protectionLevel="dangerous" />
|
android:protectionLevel="dangerous" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name="ApgApplication"
|
android:name=".ApgApplication"
|
||||||
android:hardwareAccelerated="true"
|
android:hardwareAccelerated="true"
|
||||||
android:icon="@drawable/icon"
|
android:icon="@drawable/icon"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
@ -217,9 +217,11 @@
|
|||||||
android:configChanges="keyboardHidden|orientation|keyboard"
|
android:configChanges="keyboardHidden|orientation|keyboard"
|
||||||
android:label="@string/title_preferences" />
|
android:label="@string/title_preferences" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.KeyServerPreferenceActivity"
|
android:name=".ui.PreferencesKeyServerActivity"
|
||||||
android:configChanges="keyboardHidden|orientation|keyboard"
|
android:configChanges="keyboardHidden|orientation|keyboard"
|
||||||
android:label="@string/title_keyServerPreference" />
|
android:label="@string/title_keyServerPreference"
|
||||||
|
android:uiOptions="splitActionBarWhenNarrow"
|
||||||
|
android:windowSoftInputMode="stateHidden" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.SignKeyActivity"
|
android:name=".ui.SignKeyActivity"
|
||||||
android:configChanges="keyboardHidden|orientation|keyboard"
|
android:configChanges="keyboardHidden|orientation|keyboard"
|
||||||
@ -237,7 +239,7 @@
|
|||||||
|
|
||||||
<!-- TODO: need to be moved into new service model -->
|
<!-- TODO: need to be moved into new service model -->
|
||||||
<service
|
<service
|
||||||
android:name=".service.ApgService2"
|
android:name=".deprecated.ApgService2"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:permission="org.thialfihar.android.apg.permission.READ_KEY_DETAILS"
|
android:permission="org.thialfihar.android.apg.permission.READ_KEY_DETAILS"
|
||||||
@ -256,7 +258,7 @@
|
|||||||
android:authorities="org.thialfihar.android.apg.provider"
|
android:authorities="org.thialfihar.android.apg.provider"
|
||||||
android:readPermission="org.thialfihar.android.apg.permission.READ_KEY_DETAILS" />
|
android:readPermission="org.thialfihar.android.apg.permission.READ_KEY_DETAILS" />
|
||||||
<provider
|
<provider
|
||||||
android:name=".provider.blob.ApgServiceBlobProvider"
|
android:name=".deprecated.ApgServiceBlobProvider"
|
||||||
android:authorities="org.thialfihar.android.apg.provider.apgserviceblobprovider"
|
android:authorities="org.thialfihar.android.apg.provider.apgserviceblobprovider"
|
||||||
android:permission="org.thialfihar.android.apg.permission.STORE_BLOBS" />
|
android:permission="org.thialfihar.android.apg.permission.STORE_BLOBS" />
|
||||||
</application>
|
</application>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
|
<!--
|
||||||
|
Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@ -14,30 +15,29 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical" >
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+android:id/text_layout"
|
android:id="@+android:id/text_layout"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal"
|
android:gravity="center_vertical"
|
||||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||||
android:gravity="center_vertical">
|
android:orientation="horizontal" >
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="6sp"
|
||||||
android:layout_marginLeft="16sp"
|
android:layout_marginLeft="16sp"
|
||||||
android:layout_marginRight="6sp"
|
android:layout_marginRight="6sp"
|
||||||
android:layout_marginTop="6sp"
|
android:layout_marginTop="6sp"
|
||||||
android:layout_marginBottom="6sp"
|
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:focusable="true"
|
android:background="@android:drawable/menuitem_background"
|
||||||
android:background="@android:drawable/menuitem_background">
|
android:focusable="true" >
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
@ -51,65 +51,40 @@
|
|||||||
android:id="@+id/summary"
|
android:id="@+id/summary"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@android:id/title"
|
|
||||||
android:layout_alignLeft="@android:id/title"
|
android:layout_alignLeft="@android:id/title"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:layout_below="@android:id/title"
|
||||||
android:maxLines="2" />
|
android:maxLines="2"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/add"
|
android:id="@+id/add"
|
||||||
|
style="@style/PlusButton"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginLeft="4dip"
|
android:layout_marginLeft="4dip"
|
||||||
android:layout_marginRight="6dip"
|
android:layout_marginRight="6dip"
|
||||||
android:layout_gravity="center_vertical"
|
android:clickable="true" />
|
||||||
android:clickable="true"
|
|
||||||
style="@style/PlusButton"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:id="@+id/separator"
|
android:id="@+id/separator"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="1dip"
|
android:layout_height="1dip"
|
||||||
android:background="?android:attr/listDivider"/>
|
android:background="?android:attr/listDivider" />
|
||||||
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="0dip"
|
android:layout_height="0dip"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical" >
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/editors"
|
android:id="@+id/editors"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:orientation="vertical"/>
|
android:orientation="vertical" />
|
||||||
|
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@android:style/ButtonBar">
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:text="@android:string/ok"
|
|
||||||
android:id="@+id/btn_ok"
|
|
||||||
android:layout_width="0dip"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"/>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:text="@android:string/cancel"
|
|
||||||
android:id="@+id/btn_cancel"
|
|
||||||
android:layout_width="0dip"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -8,7 +8,7 @@ And don't add newlines before or after p tags because of transifex -->
|
|||||||
<p><a href="https://github.com/dschuermann/apg">https://github.com/dschuermann/apg</a></p>
|
<p><a href="https://github.com/dschuermann/apg">https://github.com/dschuermann/apg</a></p>
|
||||||
<p>Android Privacy Guard (APG) is a OpenPGP implementation for Android.</p>
|
<p>Android Privacy Guard (APG) is a OpenPGP implementation for Android.</p>
|
||||||
<p>License: Apache License v2</p>
|
<p>License: Apache License v2</p>
|
||||||
<p>Developer: Thialfihar (Main developer), Senecaso (QRCode, sign key, upload key), Markus Doits (AIDL), Oliver Runge, Dominik Schürmann (Version 2 and up)</p>
|
<p>Developer: Thialfihar (Main developer v1.x), Senecaso (QRCode, sign key, upload key), Markus Doits (AIDL), Oliver Runge, Dominik Schürmann (Developer v2.x)</p>
|
||||||
|
|
||||||
<h2>Libraries</h2>
|
<h2>Libraries</h2>
|
||||||
<p>• <a href="http://actionbarsherlock.com/">ActionBarSherlock</a> (Apache License v2)
|
<p>• <a href="http://actionbarsherlock.com/">ActionBarSherlock</a> (Apache License v2)
|
||||||
|
@ -26,7 +26,7 @@ public class ApgApplication extends Application {
|
|||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
|
|
||||||
/** Start passphrase cache service */
|
/* Start passphrase cache service */
|
||||||
PassphraseCacheService.startCacheService(this);
|
PassphraseCacheService.startCacheService(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,8 +27,6 @@ public final class Constants {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final class pref {
|
public static final class pref {
|
||||||
public static final String HAS_SEEN_HELP = "seenHelp";
|
|
||||||
public static final String HAS_SEEN_CHANGE_LOG = "seenChangeLogDialog";
|
|
||||||
public static final String DEFAULT_ENCRYPTION_ALGORITHM = "defaultEncryptionAlgorithm";
|
public static final String DEFAULT_ENCRYPTION_ALGORITHM = "defaultEncryptionAlgorithm";
|
||||||
public static final String DEFAULT_HASH_ALGORITHM = "defaultHashAlgorithm";
|
public static final String DEFAULT_HASH_ALGORITHM = "defaultHashAlgorithm";
|
||||||
public static final String DEFAULT_ASCII_ARMOUR = "defaultAsciiArmour";
|
public static final String DEFAULT_ASCII_ARMOUR = "defaultAsciiArmour";
|
||||||
@ -44,6 +42,7 @@ public final class Constants {
|
|||||||
public static final String KEY_SERVERS = "pool.sks-keyservers.net, subkeys.pgp.net, pgp.mit.edu";
|
public static final String KEY_SERVERS = "pool.sks-keyservers.net, subkeys.pgp.net, pgp.mit.edu";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: rework!
|
||||||
public static final class extras {
|
public static final class extras {
|
||||||
public static final String PROGRESS = "progress";
|
public static final String PROGRESS = "progress";
|
||||||
public static final String PROGRESS_MAX = "max";
|
public static final String PROGRESS_MAX = "max";
|
||||||
|
@ -1,99 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 org.thialfihar.android.apg;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
|
||||||
import org.thialfihar.android.apg.Apg.GeneralException;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Environment;
|
|
||||||
|
|
||||||
public class DataDestination implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = -6478075911319320498L;
|
|
||||||
|
|
||||||
private String mStreamFilename;
|
|
||||||
private String mFilename;
|
|
||||||
private int mMode = Id.mode.undefined;
|
|
||||||
|
|
||||||
public DataDestination() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMode(int mode) {
|
|
||||||
mMode = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFilename(String filename) {
|
|
||||||
mFilename = filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getStreamFilename() {
|
|
||||||
return mStreamFilename;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OutputStream getOutputStream(Context context) throws Apg.GeneralException,
|
|
||||||
FileNotFoundException, IOException {
|
|
||||||
OutputStream out = null;
|
|
||||||
mStreamFilename = null;
|
|
||||||
|
|
||||||
switch (mMode) {
|
|
||||||
case Id.mode.stream: {
|
|
||||||
try {
|
|
||||||
while (true) {
|
|
||||||
mStreamFilename = Apg.generateRandomString(32);
|
|
||||||
if (mStreamFilename == null) {
|
|
||||||
throw new Apg.GeneralException("couldn't generate random file name");
|
|
||||||
}
|
|
||||||
context.openFileInput(mStreamFilename).close();
|
|
||||||
}
|
|
||||||
} catch (FileNotFoundException e) {
|
|
||||||
// found a name that isn't used yet
|
|
||||||
}
|
|
||||||
out = context.openFileOutput(mStreamFilename, Context.MODE_PRIVATE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Id.mode.byte_array: {
|
|
||||||
out = new ByteArrayOutputStream();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Id.mode.file: {
|
|
||||||
if (mFilename.startsWith(Environment.getExternalStorageDirectory().getAbsolutePath())) {
|
|
||||||
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
|
||||||
throw new GeneralException(
|
|
||||||
context.getString(R.string.error_externalStorageNotReady));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out = new FileOutputStream(mFilename);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default: {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,137 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 org.thialfihar.android.apg;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
|
||||||
import org.thialfihar.android.apg.Apg.GeneralException;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Environment;
|
|
||||||
|
|
||||||
public class DataSource implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 2377217399907415255L;
|
|
||||||
|
|
||||||
private Uri mContentUri = null;
|
|
||||||
private String mText = null;
|
|
||||||
private byte[] mData = null;
|
|
||||||
|
|
||||||
public DataSource() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUri(Uri uri) {
|
|
||||||
mContentUri = uri;
|
|
||||||
mText = null;
|
|
||||||
mData = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUri(String uri) {
|
|
||||||
if (uri.startsWith("/")) {
|
|
||||||
setUri(Uri.parse("file://" + uri));
|
|
||||||
} else {
|
|
||||||
setUri(Uri.parse(uri));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Uri getUri() {
|
|
||||||
return mContentUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setText(String text) {
|
|
||||||
mText = text;
|
|
||||||
mData = null;
|
|
||||||
mContentUri = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setData(byte[] data) {
|
|
||||||
mData = data;
|
|
||||||
mText = null;
|
|
||||||
mContentUri = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isText() {
|
|
||||||
return mText != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isBinary() {
|
|
||||||
return mData != null || mContentUri != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getBytes() {
|
|
||||||
byte[] bytes = null;
|
|
||||||
if (mData != null) {
|
|
||||||
bytes = mData;
|
|
||||||
} else {
|
|
||||||
bytes = mText.getBytes();
|
|
||||||
}
|
|
||||||
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public InputData getInputData(Context context, boolean withSize) throws GeneralException,
|
|
||||||
FileNotFoundException, IOException {
|
|
||||||
InputStream in = null;
|
|
||||||
long size = 0;
|
|
||||||
|
|
||||||
if (mContentUri != null) {
|
|
||||||
if (mContentUri.getScheme().equals("file")) {
|
|
||||||
// get the rest after "file://"
|
|
||||||
String path = Uri.decode(mContentUri.toString().substring(7));
|
|
||||||
if (path.startsWith(Environment.getExternalStorageDirectory().getAbsolutePath())) {
|
|
||||||
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
|
||||||
throw new GeneralException(
|
|
||||||
context.getString(R.string.error_externalStorageNotReady));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
in = new FileInputStream(path);
|
|
||||||
File file = new File(path);
|
|
||||||
if (withSize) {
|
|
||||||
size = file.length();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
in = context.getContentResolver().openInputStream(mContentUri);
|
|
||||||
if (withSize) {
|
|
||||||
InputStream tmp = context.getContentResolver().openInputStream(mContentUri);
|
|
||||||
size = Apg.getLengthOfStream(tmp);
|
|
||||||
tmp.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (mText != null || mData != null) {
|
|
||||||
byte[] bytes = null;
|
|
||||||
if (mData != null) {
|
|
||||||
bytes = mData;
|
|
||||||
} else {
|
|
||||||
bytes = mText.getBytes();
|
|
||||||
}
|
|
||||||
in = new ByteArrayInputStream(bytes);
|
|
||||||
if (withSize) {
|
|
||||||
size = bytes.length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new InputData(in, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,138 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
|
|
||||||
*
|
|
||||||
* 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 org.thialfihar.android.apg;
|
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.content.ActivityNotFoundException;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.CheckBox;
|
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.ImageButton;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* SHOUDL BE DELTED, DileDialogFragment is the new implementation
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @author ds1
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class FileDialog {
|
|
||||||
private static EditText mFilename;
|
|
||||||
private static ImageButton mBrowse;
|
|
||||||
private static CheckBox mCheckBox;
|
|
||||||
private static Activity mActivity;
|
|
||||||
private static int mRequestCode;
|
|
||||||
|
|
||||||
public static interface OnClickListener {
|
|
||||||
public void onCancelClick();
|
|
||||||
|
|
||||||
public void onOkClick(String filename, boolean checkbox);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static AlertDialog build(Activity activity, String title, String message,
|
|
||||||
String defaultFile, OnClickListener onClickListener, String fileManagerTitle,
|
|
||||||
String fileManagerButton, String checkboxText, int requestCode) {
|
|
||||||
// TODO: fileManagerTitle and fileManagerButton are deprecated, no use for them right now,
|
|
||||||
// but maybe the Intent now used will someday support them again, so leaving them in
|
|
||||||
LayoutInflater inflater = (LayoutInflater) activity
|
|
||||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
|
||||||
AlertDialog.Builder alert = new AlertDialog.Builder(activity);
|
|
||||||
|
|
||||||
alert.setTitle(title);
|
|
||||||
alert.setMessage(message);
|
|
||||||
|
|
||||||
View view = inflater.inflate(R.layout.file_dialog, null);
|
|
||||||
|
|
||||||
mActivity = activity;
|
|
||||||
mFilename = (EditText) view.findViewById(R.id.input);
|
|
||||||
mFilename.setText(defaultFile);
|
|
||||||
mBrowse = (ImageButton) view.findViewById(R.id.btn_browse);
|
|
||||||
mBrowse.setOnClickListener(new View.OnClickListener() {
|
|
||||||
public void onClick(View v) {
|
|
||||||
openFile();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mRequestCode = requestCode;
|
|
||||||
mCheckBox = (CheckBox) view.findViewById(R.id.checkbox);
|
|
||||||
if (checkboxText == null) {
|
|
||||||
mCheckBox.setEnabled(false);
|
|
||||||
mCheckBox.setVisibility(View.GONE);
|
|
||||||
} else {
|
|
||||||
mCheckBox.setEnabled(true);
|
|
||||||
mCheckBox.setVisibility(View.VISIBLE);
|
|
||||||
mCheckBox.setText(checkboxText);
|
|
||||||
}
|
|
||||||
|
|
||||||
alert.setView(view);
|
|
||||||
|
|
||||||
final OnClickListener clickListener = onClickListener;
|
|
||||||
|
|
||||||
alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
|
||||||
public void onClick(DialogInterface dialog, int id) {
|
|
||||||
boolean checked = false;
|
|
||||||
if (mCheckBox.isEnabled()) {
|
|
||||||
checked = mCheckBox.isChecked();
|
|
||||||
}
|
|
||||||
clickListener.onOkClick(mFilename.getText().toString(), checked);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
|
|
||||||
public void onClick(DialogInterface dialog, int id) {
|
|
||||||
clickListener.onCancelClick();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return alert.create();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setFilename(String filename) {
|
|
||||||
if (mFilename != null) {
|
|
||||||
mFilename.setText(filename);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens the file manager to select a file to open.
|
|
||||||
*/
|
|
||||||
private static void openFile() {
|
|
||||||
String filename = mFilename.getText().toString();
|
|
||||||
|
|
||||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
|
||||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
|
||||||
|
|
||||||
intent.setData(Uri.parse("file://" + filename));
|
|
||||||
intent.setType("text/plain"); // only .asc or .gpg files
|
|
||||||
|
|
||||||
try {
|
|
||||||
mActivity.startActivityForResult(intent, mRequestCode);
|
|
||||||
} catch (ActivityNotFoundException e) {
|
|
||||||
// No compatible file manager was found.
|
|
||||||
Toast.makeText(mActivity, R.string.noFilemanagerInstalled, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2011 Senecaso
|
||||||
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
@ -42,6 +44,7 @@ import org.apache.http.client.methods.HttpPost;
|
|||||||
import org.apache.http.impl.client.DefaultHttpClient;
|
import org.apache.http.impl.client.DefaultHttpClient;
|
||||||
import org.apache.http.message.BasicNameValuePair;
|
import org.apache.http.message.BasicNameValuePair;
|
||||||
import org.apache.http.util.EntityUtils;
|
import org.apache.http.util.EntityUtils;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
|
|
||||||
@ -178,8 +181,8 @@ public class HkpKeyServer extends KeyServer {
|
|||||||
KeyInfo info = new KeyInfo();
|
KeyInfo info = new KeyInfo();
|
||||||
info.size = Integer.parseInt(matcher.group(1));
|
info.size = Integer.parseInt(matcher.group(1));
|
||||||
info.algorithm = matcher.group(2);
|
info.algorithm = matcher.group(2);
|
||||||
info.keyId = Apg.keyFromHex(matcher.group(3));
|
info.keyId = PGPHelper.keyFromHex(matcher.group(3));
|
||||||
info.fingerPrint = Apg.getSmallFingerPrint(info.keyId);
|
info.fingerPrint = PGPHelper.getSmallFingerPrint(info.keyId);
|
||||||
String chunks[] = matcher.group(4).split("-");
|
String chunks[] = matcher.group(4).split("-");
|
||||||
info.date = new GregorianCalendar(Integer.parseInt(chunks[0]),
|
info.date = new GregorianCalendar(Integer.parseInt(chunks[0]),
|
||||||
Integer.parseInt(chunks[1]), Integer.parseInt(chunks[2])).getTime();
|
Integer.parseInt(chunks[1]), Integer.parseInt(chunks[2])).getTime();
|
||||||
@ -210,7 +213,7 @@ public class HkpKeyServer extends KeyServer {
|
|||||||
HttpClient client = new DefaultHttpClient();
|
HttpClient client = new DefaultHttpClient();
|
||||||
try {
|
try {
|
||||||
HttpGet get = new HttpGet("http://" + mHost + ":" + mPort
|
HttpGet get = new HttpGet("http://" + mHost + ":" + mPort
|
||||||
+ "/pks/lookup?op=get&search=0x" + Apg.keyToHex(keyId));
|
+ "/pks/lookup?op=get&search=0x" + PGPHelper.keyToHex(keyId));
|
||||||
|
|
||||||
HttpResponse response = client.execute(get);
|
HttpResponse response = client.execute(get);
|
||||||
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
|
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
|
||||||
@ -220,7 +223,7 @@ public class HkpKeyServer extends KeyServer {
|
|||||||
HttpEntity entity = response.getEntity();
|
HttpEntity entity = response.getEntity();
|
||||||
InputStream is = entity.getContent();
|
InputStream is = entity.getContent();
|
||||||
String data = readAll(is, EntityUtils.getContentCharSet(entity));
|
String data = readAll(is, EntityUtils.getContentCharSet(entity));
|
||||||
Matcher matcher = Apg.PGP_PUBLIC_KEY.matcher(data);
|
Matcher matcher = PGPHelper.PGP_PUBLIC_KEY.matcher(data);
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
return matcher.group(1);
|
return matcher.group(1);
|
||||||
}
|
}
|
||||||
@ -234,7 +237,7 @@ public class HkpKeyServer extends KeyServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void add(String armouredText) throws AddKeyException {
|
public void add(String armouredText) throws AddKeyException {
|
||||||
HttpClient client = new DefaultHttpClient();
|
HttpClient client = new DefaultHttpClient();
|
||||||
try {
|
try {
|
||||||
HttpPost post = new HttpPost("http://" + mHost + ":" + mPort + "/pks/add");
|
HttpPost post = new HttpPost("http://" + mHost + ":" + mPort + "/pks/add");
|
||||||
|
@ -18,6 +18,13 @@ package org.thialfihar.android.apg;
|
|||||||
|
|
||||||
import org.spongycastle.bcpg.CompressionAlgorithmTags;
|
import org.spongycastle.bcpg.CompressionAlgorithmTags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* TODO:
|
||||||
|
*
|
||||||
|
* - refactor ids, some are not needed and can be done with xml
|
||||||
|
*
|
||||||
|
*/
|
||||||
public final class Id {
|
public final class Id {
|
||||||
|
|
||||||
public static final String TAG = "APG";
|
public static final String TAG = "APG";
|
||||||
@ -83,7 +90,7 @@ public final class Id {
|
|||||||
// public static final int query_done = 0x21070010;
|
// public static final int query_done = 0x21070010;
|
||||||
// public static final int unknown_signature_key = 0x21070011;
|
// public static final int unknown_signature_key = 0x21070011;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// use only lower 16 bits due to compatibility lib
|
// use only lower 16 bits due to compatibility lib
|
||||||
public static final class request {
|
public static final class request {
|
||||||
public static final int public_keys = 0x00007001;
|
public static final int public_keys = 0x00007001;
|
||||||
@ -96,18 +103,18 @@ public final class Id {
|
|||||||
public static final int import_from_qr_code = 0x00007008;
|
public static final int import_from_qr_code = 0x00007008;
|
||||||
public static final int sign_key = 0x00007009;
|
public static final int sign_key = 0x00007009;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static final class request {
|
// public static final class request {
|
||||||
// public static final int public_keys = 0x21070001;
|
// public static final int public_keys = 0x21070001;
|
||||||
// public static final int secret_keys = 0x21070002;
|
// public static final int secret_keys = 0x21070002;
|
||||||
// public static final int filename = 0x21070003;
|
// public static final int filename = 0x21070003;
|
||||||
// public static final int output_filename = 0x21070004;
|
// public static final int output_filename = 0x21070004;
|
||||||
// public static final int key_server_preference = 0x21070005;
|
// public static final int key_server_preference = 0x21070005;
|
||||||
// public static final int look_up_key_id = 0x21070006;
|
// public static final int look_up_key_id = 0x21070006;
|
||||||
// public static final int export_to_server = 0x21070007;
|
// public static final int export_to_server = 0x21070007;
|
||||||
// public static final int import_from_qr_code = 0x21070008;
|
// public static final int import_from_qr_code = 0x21070008;
|
||||||
// public static final int sign_key = 0x21070009;
|
// public static final int sign_key = 0x21070009;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
public static final class dialog {
|
public static final class dialog {
|
||||||
public static final int pass_phrase = 0x21070001;
|
public static final int pass_phrase = 0x21070001;
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2011 Senecaso
|
||||||
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
|
||||||
|
* Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
|
||||||
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
@ -23,8 +26,7 @@ import android.content.SharedPreferences;
|
|||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Singelton Implementation of a Preference Helper
|
* Singleton Implementation of a Preference Helper
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class Preferences {
|
public class Preferences {
|
||||||
private static Preferences mPreferences;
|
private static Preferences mPreferences;
|
||||||
|
@ -14,10 +14,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.util;
|
package org.thialfihar.android.apg.deprecated;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.service.IApgService2;
|
import org.thialfihar.android.apg.deprecated.ApgConInterface.OnCallFinishListener;
|
||||||
import org.thialfihar.android.apg.util.ApgConInterface.OnCallFinishListener;
|
import org.thialfihar.android.apg.deprecated.IApgService2;
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
@ -12,7 +12,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.util;
|
package org.thialfihar.android.apg.deprecated;
|
||||||
|
|
||||||
public interface ApgConInterface {
|
public interface ApgConInterface {
|
||||||
public static interface OnCallFinishListener {
|
public static interface OnCallFinishListener {
|
@ -12,7 +12,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.service;
|
package org.thialfihar.android.apg.deprecated;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
@ -25,19 +25,19 @@ import java.util.HashMap;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.Apg;
|
import org.thialfihar.android.apg.deprecated.IApgService2;
|
||||||
import org.thialfihar.android.apg.service.IApgService2;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.InputData;
|
|
||||||
import org.thialfihar.android.apg.Preferences;
|
import org.thialfihar.android.apg.Preferences;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.service.IApgService2.Stub;
|
import org.thialfihar.android.apg.deprecated.IApgService2.Stub;
|
||||||
import org.thialfihar.android.apg.Id.database;
|
import org.thialfihar.android.apg.Id.database;
|
||||||
import org.thialfihar.android.apg.R.string;
|
import org.thialfihar.android.apg.R.string;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
|
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
|
||||||
import org.thialfihar.android.apg.provider.KeyRings;
|
import org.thialfihar.android.apg.provider.KeyRings;
|
||||||
import org.thialfihar.android.apg.provider.Keys;
|
import org.thialfihar.android.apg.provider.Keys;
|
||||||
import org.thialfihar.android.apg.provider.UserIds;
|
import org.thialfihar.android.apg.provider.UserIds;
|
||||||
|
import org.thialfihar.android.apg.util.InputData;
|
||||||
|
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -204,7 +204,7 @@ public class ApgService2 extends PassphraseCacheService {
|
|||||||
typeWhere = KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = ?";
|
typeWhere = KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = ?";
|
||||||
typeVal = new String[] { "" + pParams.get("key_type") };
|
typeVal = new String[] { "" + pParams.get("key_type") };
|
||||||
}
|
}
|
||||||
return qb.query(Apg.getDatabase().db(), (String[]) pParams.get("columns"), typeWhere,
|
return qb.query(PGPHelper.getDatabase().db(), (String[]) pParams.get("columns"), typeWhere,
|
||||||
typeVal, null, null, orderBy);
|
typeVal, null, null, orderBy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,7 +253,7 @@ public class ApgService2 extends PassphraseCacheService {
|
|||||||
long curMkey = mCursor.getLong(0);
|
long curMkey = mCursor.getLong(0);
|
||||||
String curUser = mCursor.getString(1);
|
String curUser = mCursor.getString(1);
|
||||||
|
|
||||||
String curFprint = Apg.getSmallFingerPrint(curMkey);
|
String curFprint = PGPHelper.getSmallFingerPrint(curMkey);
|
||||||
if (LOCAL_LOGV)
|
if (LOCAL_LOGV)
|
||||||
Log.v(TAG, "current user: " + curUser + " (" + curFprint + ")");
|
Log.v(TAG, "current user: " + curUser + " (" + curFprint + ")");
|
||||||
if (pSearchKeys.contains(curFprint) || pSearchKeys.contains(curUser)) {
|
if (pSearchKeys.contains(curFprint) || pSearchKeys.contains(curUser)) {
|
||||||
@ -427,7 +427,7 @@ public class ApgService2 extends PassphraseCacheService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean prepareArgs(String pCall, Bundle pArgs, Bundle pReturn) {
|
private boolean prepareArgs(String pCall, Bundle pArgs, Bundle pReturn) {
|
||||||
Apg.initialize(getBaseContext());
|
PGPHelper.initialize(getBaseContext());
|
||||||
|
|
||||||
/* add default return values for all functions */
|
/* add default return values for all functions */
|
||||||
addDefaultReturns(pReturn);
|
addDefaultReturns(pReturn);
|
||||||
@ -493,7 +493,7 @@ public class ApgService2 extends PassphraseCacheService {
|
|||||||
if (LOCAL_LOGV)
|
if (LOCAL_LOGV)
|
||||||
Log.v(TAG, "About to encrypt");
|
Log.v(TAG, "About to encrypt");
|
||||||
try {
|
try {
|
||||||
Apg.encrypt(getBaseContext(), // context
|
PGPHelper.encrypt(getBaseContext(), // context
|
||||||
in, // input stream
|
in, // input stream
|
||||||
out, // output stream
|
out, // output stream
|
||||||
pArgs.getBoolean(arg.ARMORED_OUTPUT.name()), // ARMORED_OUTPUT
|
pArgs.getBoolean(arg.ARMORED_OUTPUT.name()), // ARMORED_OUTPUT
|
||||||
@ -569,8 +569,8 @@ public class ApgService2 extends PassphraseCacheService {
|
|||||||
ArrayList<String> ids = new ArrayList<String>();
|
ArrayList<String> ids = new ArrayList<String>();
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
if (LOCAL_LOGV)
|
if (LOCAL_LOGV)
|
||||||
Log.v(TAG, "adding key " + Apg.getSmallFingerPrint(cursor.getLong(0)));
|
Log.v(TAG, "adding key " + PGPHelper.getSmallFingerPrint(cursor.getLong(0)));
|
||||||
fPrints.add(Apg.getSmallFingerPrint(cursor.getLong(0)));
|
fPrints.add(PGPHelper.getSmallFingerPrint(cursor.getLong(0)));
|
||||||
ids.add(cursor.getString(1));
|
ids.add(cursor.getString(1));
|
||||||
}
|
}
|
||||||
cursor.close();
|
cursor.close();
|
||||||
@ -625,7 +625,7 @@ public class ApgService2 extends PassphraseCacheService {
|
|||||||
if (LOCAL_LOGV)
|
if (LOCAL_LOGV)
|
||||||
Log.v(TAG, "About to decrypt");
|
Log.v(TAG, "About to decrypt");
|
||||||
try {
|
try {
|
||||||
Apg.decrypt(getBaseContext(), in, out, passphrase, null, // progress
|
PGPHelper.decrypt(getBaseContext(), in, out, passphrase, null, // progress
|
||||||
pArgs.getString(arg.SYMMETRIC_PASSPHRASE.name()) != null // symmetric
|
pArgs.getString(arg.SYMMETRIC_PASSPHRASE.name()) != null // symmetric
|
||||||
);
|
);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
@ -12,9 +12,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.provider.blob;
|
package org.thialfihar.android.apg.deprecated;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.service.ApgService2;
|
|
||||||
|
|
||||||
import android.content.ContentUris;
|
import android.content.ContentUris;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
@ -12,10 +12,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.provider.blob;
|
package org.thialfihar.android.apg.deprecated;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.service.ApgService2;
|
|
||||||
|
|
||||||
import android.content.ContentProvider;
|
import android.content.ContentProvider;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
@ -1,3 +1,4 @@
|
|||||||
|
package org.thialfihar.android.apg.deprecated;
|
||||||
//package org.thialfihar.android.apg.provider.blob;
|
//package org.thialfihar.android.apg.provider.blob;
|
||||||
//
|
//
|
||||||
//import android.net.Uri;
|
//import android.net.Uri;
|
@ -1,4 +1,4 @@
|
|||||||
package org.thialfihar.android.apg.service;
|
package org.thialfihar.android.apg.deprecated;
|
||||||
|
|
||||||
interface IApgService2 {
|
interface IApgService2 {
|
||||||
|
|
@ -0,0 +1,57 @@
|
|||||||
|
package org.thialfihar.android.apg.helper;
|
||||||
|
|
||||||
|
import org.thialfihar.android.apg.R;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Environment;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
public class FileHelper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if external storage is mounted if file is located on external storage
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @return true if storage is mounted
|
||||||
|
*/
|
||||||
|
public static boolean isStorageMounted(String file) {
|
||||||
|
if (file.startsWith(Environment.getExternalStorageDirectory().getAbsolutePath())) {
|
||||||
|
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens the preferred installed file manager on Android and shows a toast if no manager is
|
||||||
|
* installed.
|
||||||
|
*
|
||||||
|
* @param activity
|
||||||
|
* @param filename
|
||||||
|
* default selected file, not supported by all file managers
|
||||||
|
* @param type
|
||||||
|
* can be text/plain for example
|
||||||
|
* @param requestCode
|
||||||
|
* requestCode used to identify the result coming back from file manager to
|
||||||
|
* onActivityResult() in your activity
|
||||||
|
*/
|
||||||
|
public static void openFile(Activity activity, String filename, String type, int requestCode) {
|
||||||
|
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||||
|
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||||
|
|
||||||
|
intent.setData(Uri.parse("file://" + filename));
|
||||||
|
intent.setType(type);
|
||||||
|
|
||||||
|
try {
|
||||||
|
activity.startActivityForResult(intent, requestCode);
|
||||||
|
} catch (ActivityNotFoundException e) {
|
||||||
|
// No compatible file manager was found.
|
||||||
|
Toast.makeText(activity, R.string.noFilemanagerInstalled, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
|
||||||
|
*
|
||||||
|
* 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 org.thialfihar.android.apg.helper;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.GregorianCalendar;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
public class OtherHelper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads html files from /res/raw/example.html to output them as string. See
|
||||||
|
* http://www.monocube.com/2011/02/08/android-tutorial-html-file-in-webview/
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
* current context
|
||||||
|
* @param resourceID
|
||||||
|
* of html file to read
|
||||||
|
* @return content of html file with formatting
|
||||||
|
*/
|
||||||
|
public static String readContentFromResource(Context context, int resourceID) {
|
||||||
|
InputStream raw = context.getResources().openRawResource(resourceID);
|
||||||
|
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||||
|
int i;
|
||||||
|
try {
|
||||||
|
i = raw.read();
|
||||||
|
while (i != -1) {
|
||||||
|
stream.write(i);
|
||||||
|
i = raw.read();
|
||||||
|
}
|
||||||
|
raw.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return stream.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the number if days between two dates
|
||||||
|
*
|
||||||
|
* @param first
|
||||||
|
* @param second
|
||||||
|
* @return number of days
|
||||||
|
*/
|
||||||
|
public static long getNumDaysBetween(GregorianCalendar first, GregorianCalendar second) {
|
||||||
|
GregorianCalendar tmp = new GregorianCalendar();
|
||||||
|
tmp.setTime(first.getTime());
|
||||||
|
long numDays = (second.getTimeInMillis() - first.getTimeInMillis()) / 1000 / 86400;
|
||||||
|
tmp.add(Calendar.DAY_OF_MONTH, (int) numDays);
|
||||||
|
while (tmp.before(second)) {
|
||||||
|
tmp.add(Calendar.DAY_OF_MONTH, 1);
|
||||||
|
++numDays;
|
||||||
|
}
|
||||||
|
return numDays;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -14,14 +14,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg.util;
|
package org.thialfihar.android.apg.helper;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.GregorianCalendar;
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
@ -29,82 +26,10 @@ import org.spongycastle.openpgp.PGPObjectFactory;
|
|||||||
import org.spongycastle.openpgp.PGPSecretKey;
|
import org.spongycastle.openpgp.PGPSecretKey;
|
||||||
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.R;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.ActivityNotFoundException;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
public class Utils {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens the file manager to select a file to open.
|
|
||||||
*/
|
|
||||||
public static void openFile(Activity activity, String filename, String type, int requestCode) {
|
|
||||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
|
||||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
|
||||||
|
|
||||||
intent.setData(Uri.parse("file://" + filename));
|
|
||||||
intent.setType(type);
|
|
||||||
|
|
||||||
try {
|
|
||||||
activity.startActivityForResult(intent, requestCode);
|
|
||||||
} catch (ActivityNotFoundException e) {
|
|
||||||
// No compatible file manager was found.
|
|
||||||
Toast.makeText(activity, R.string.noFilemanagerInstalled, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads html files from /res/raw/example.html to output them as string. See
|
|
||||||
* http://www.monocube.com/2011/02/08/android-tutorial-html-file-in-webview/
|
|
||||||
*
|
|
||||||
* @param context
|
|
||||||
* current context
|
|
||||||
* @param resourceID
|
|
||||||
* of html file to read
|
|
||||||
* @return content of html file with formatting
|
|
||||||
*/
|
|
||||||
public static String readContentFromResource(Context context, int resourceID) {
|
|
||||||
InputStream raw = context.getResources().openRawResource(resourceID);
|
|
||||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
|
||||||
int i;
|
|
||||||
try {
|
|
||||||
i = raw.read();
|
|
||||||
while (i != -1) {
|
|
||||||
stream.write(i);
|
|
||||||
i = raw.read();
|
|
||||||
}
|
|
||||||
raw.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return stream.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the number if days between two dates
|
|
||||||
*
|
|
||||||
* @param first
|
|
||||||
* @param second
|
|
||||||
* @return number of days
|
|
||||||
*/
|
|
||||||
public static long getNumDaysBetween(GregorianCalendar first, GregorianCalendar second) {
|
|
||||||
GregorianCalendar tmp = new GregorianCalendar();
|
|
||||||
tmp.setTime(first.getTime());
|
|
||||||
long numDays = (second.getTimeInMillis() - first.getTimeInMillis()) / 1000 / 86400;
|
|
||||||
tmp.add(Calendar.DAY_OF_MONTH, (int) numDays);
|
|
||||||
while (tmp.before(second)) {
|
|
||||||
tmp.add(Calendar.DAY_OF_MONTH, 1);
|
|
||||||
++numDays;
|
|
||||||
}
|
|
||||||
return numDays;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public class PGPConversionHelper {
|
||||||
/**
|
/**
|
||||||
* Converts Vector<PGPSecretKey> to a byte[] array to send it by intent to service
|
* Converts Vector<PGPSecretKey> to a byte[] array to send it by intent to service
|
||||||
*
|
*
|
||||||
@ -185,5 +110,4 @@ public class Utils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,4 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
|
||||||
* Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
|
* Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -14,7 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg;
|
package org.thialfihar.android.apg.helper;
|
||||||
|
|
||||||
import org.spongycastle.bcpg.ArmoredInputStream;
|
import org.spongycastle.bcpg.ArmoredInputStream;
|
||||||
import org.spongycastle.bcpg.ArmoredOutputStream;
|
import org.spongycastle.bcpg.ArmoredOutputStream;
|
||||||
@ -62,20 +63,37 @@ import org.spongycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBu
|
|||||||
import org.spongycastle.openpgp.operator.jcajce.JcaPGPKeyPair;
|
import org.spongycastle.openpgp.operator.jcajce.JcaPGPKeyPair;
|
||||||
import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder;
|
import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder;
|
||||||
import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyEncryptorBuilder;
|
import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyEncryptorBuilder;
|
||||||
|
import org.thialfihar.android.apg.Id.choice;
|
||||||
|
import org.thialfihar.android.apg.Id.content;
|
||||||
|
import org.thialfihar.android.apg.Id.database;
|
||||||
|
import org.thialfihar.android.apg.Id.key;
|
||||||
import org.thialfihar.android.apg.Id.return_value;
|
import org.thialfihar.android.apg.Id.return_value;
|
||||||
|
import org.thialfihar.android.apg.Id.type;
|
||||||
|
import org.thialfihar.android.apg.Id.choice.algorithm;
|
||||||
|
import org.thialfihar.android.apg.Id.choice.compression;
|
||||||
|
import org.thialfihar.android.apg.Id.choice.usage;
|
||||||
import org.thialfihar.android.apg.KeyServer.AddKeyException;
|
import org.thialfihar.android.apg.KeyServer.AddKeyException;
|
||||||
|
import org.thialfihar.android.apg.R.string;
|
||||||
import org.thialfihar.android.apg.passphrase.CachedPassPhrase;
|
import org.thialfihar.android.apg.passphrase.CachedPassPhrase;
|
||||||
import org.thialfihar.android.apg.provider.DataProvider;
|
import org.thialfihar.android.apg.provider.DataProvider;
|
||||||
import org.thialfihar.android.apg.provider.Database;
|
import org.thialfihar.android.apg.provider.Database;
|
||||||
import org.thialfihar.android.apg.provider.KeyRings;
|
import org.thialfihar.android.apg.provider.KeyRings;
|
||||||
import org.thialfihar.android.apg.provider.Keys;
|
import org.thialfihar.android.apg.provider.Keys;
|
||||||
import org.thialfihar.android.apg.provider.UserIds;
|
import org.thialfihar.android.apg.provider.UserIds;
|
||||||
|
import org.thialfihar.android.apg.service.ApgService;
|
||||||
import org.thialfihar.android.apg.ui.BaseActivity;
|
import org.thialfihar.android.apg.ui.BaseActivity;
|
||||||
import org.thialfihar.android.apg.ui.widget.KeyEditor;
|
import org.thialfihar.android.apg.ui.widget.KeyEditor;
|
||||||
import org.thialfihar.android.apg.ui.widget.SectionView;
|
import org.thialfihar.android.apg.ui.widget.SectionView;
|
||||||
import org.thialfihar.android.apg.ui.widget.UserIdEditor;
|
import org.thialfihar.android.apg.ui.widget.UserIdEditor;
|
||||||
|
import org.thialfihar.android.apg.util.InputData;
|
||||||
import org.thialfihar.android.apg.util.IterableIterator;
|
import org.thialfihar.android.apg.util.IterableIterator;
|
||||||
import org.thialfihar.android.apg.util.Utils;
|
import org.thialfihar.android.apg.util.PositionAwareInputStream;
|
||||||
|
import org.thialfihar.android.apg.util.Primes;
|
||||||
|
import org.thialfihar.android.apg.Constants;
|
||||||
|
import org.thialfihar.android.apg.HkpKeyServer;
|
||||||
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.KeyServer;
|
||||||
|
import org.thialfihar.android.apg.ProgressDialogUpdater;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@ -122,7 +140,15 @@ import java.util.Map;
|
|||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class Apg {
|
/**
|
||||||
|
* TODO:
|
||||||
|
*
|
||||||
|
* - Externalize the constants
|
||||||
|
*
|
||||||
|
* - Separate this file into different helpers
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PGPHelper {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
// register spongy castle provider
|
// register spongy castle provider
|
||||||
@ -161,13 +187,9 @@ public class Apg {
|
|||||||
public static final String EXTRA_ENCRYPTED_MESSAGE = "encryptedMessage";
|
public static final String EXTRA_ENCRYPTED_MESSAGE = "encryptedMessage";
|
||||||
public static final String EXTRA_ENCRYPTED_DATA = "encryptedData";
|
public static final String EXTRA_ENCRYPTED_DATA = "encryptedData";
|
||||||
public static final String EXTRA_RESULT_URI = "resultUri";
|
public static final String EXTRA_RESULT_URI = "resultUri";
|
||||||
public static final String EXTRA_SIGNATURE = "signature";
|
|
||||||
public static final String EXTRA_SIGNATURE_KEY_ID = "signatureKeyId";
|
|
||||||
public static final String EXTRA_SIGNATURE_USER_ID = "signatureUserId";
|
|
||||||
public static final String EXTRA_SIGNATURE_SUCCESS = "signatureSuccess";
|
|
||||||
public static final String EXTRA_SIGNATURE_UNKNOWN = "signatureUnknown";
|
|
||||||
public static final String EXTRA_SIGNATURE_DATA = "signatureData";
|
public static final String EXTRA_SIGNATURE_DATA = "signatureData";
|
||||||
public static final String EXTRA_SIGNATURE_TEXT = "signatureText";
|
public static final String EXTRA_SIGNATURE_TEXT = "signatureText";
|
||||||
|
public static final String EXTRA_SIGNATURE_KEY_ID = "signatureKeyId";
|
||||||
public static final String EXTRA_USER_ID = "userId";
|
public static final String EXTRA_USER_ID = "userId";
|
||||||
public static final String EXTRA_USER_IDS = "userIds";
|
public static final String EXTRA_USER_IDS = "userIds";
|
||||||
public static final String EXTRA_KEY_ID = "keyId";
|
public static final String EXTRA_KEY_ID = "keyId";
|
||||||
@ -426,7 +448,7 @@ public class Apg {
|
|||||||
public static void buildSecretKey(Context context, ArrayList<String> userIds,
|
public static void buildSecretKey(Context context, ArrayList<String> userIds,
|
||||||
ArrayList<PGPSecretKey> keys, ArrayList<Integer> keysUsages, long masterKeyId,
|
ArrayList<PGPSecretKey> keys, ArrayList<Integer> keysUsages, long masterKeyId,
|
||||||
String oldPassPhrase, String newPassPhrase, ProgressDialogUpdater progress)
|
String oldPassPhrase, String newPassPhrase, ProgressDialogUpdater progress)
|
||||||
throws Apg.GeneralException, NoSuchProviderException, PGPException,
|
throws PGPHelper.GeneralException, NoSuchProviderException, PGPException,
|
||||||
NoSuchAlgorithmException, SignatureException, IOException, Database.GeneralException {
|
NoSuchAlgorithmException, SignatureException, IOException, Database.GeneralException {
|
||||||
|
|
||||||
if (progress != null)
|
if (progress != null)
|
||||||
@ -1143,9 +1165,9 @@ public class Apg {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getFingerPrint(long keyId) {
|
public static String getFingerPrint(long keyId) {
|
||||||
PGPPublicKey key = Apg.getPublicKey(keyId);
|
PGPPublicKey key = PGPHelper.getPublicKey(keyId);
|
||||||
if (key == null) {
|
if (key == null) {
|
||||||
PGPSecretKey secretKey = Apg.getSecretKey(keyId);
|
PGPSecretKey secretKey = PGPHelper.getSecretKey(keyId);
|
||||||
if (secretKey == null) {
|
if (secretKey == null) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@ -1654,9 +1676,9 @@ public class Apg {
|
|||||||
progress.setProgress(R.string.progress_done, 100, 100);
|
progress.setProgress(R.string.progress_done, 100, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long getDecryptionKeyId(Context context, InputData data) throws GeneralException,
|
public static long getDecryptionKeyId(Context context, InputStream inputStream)
|
||||||
NoAsymmetricEncryptionException, IOException {
|
throws GeneralException, NoAsymmetricEncryptionException, IOException {
|
||||||
InputStream in = PGPUtil.getDecoderStream(data.getInputStream());
|
InputStream in = PGPUtil.getDecoderStream(inputStream);
|
||||||
PGPObjectFactory pgpF = new PGPObjectFactory(in);
|
PGPObjectFactory pgpF = new PGPObjectFactory(in);
|
||||||
PGPEncryptedDataList enc;
|
PGPEncryptedDataList enc;
|
||||||
Object o = pgpF.nextObject();
|
Object o = pgpF.nextObject();
|
||||||
@ -1700,9 +1722,9 @@ public class Apg {
|
|||||||
return secretKey.getKeyID();
|
return secretKey.getKeyID();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasSymmetricEncryption(Context context, InputData data)
|
public static boolean hasSymmetricEncryption(Context context, InputStream inputStream)
|
||||||
throws GeneralException, IOException {
|
throws GeneralException, IOException {
|
||||||
InputStream in = PGPUtil.getDecoderStream(data.getInputStream());
|
InputStream in = PGPUtil.getDecoderStream(inputStream);
|
||||||
PGPObjectFactory pgpF = new PGPObjectFactory(in);
|
PGPObjectFactory pgpF = new PGPObjectFactory(in);
|
||||||
PGPEncryptedDataList enc;
|
PGPEncryptedDataList enc;
|
||||||
Object o = pgpF.nextObject();
|
Object o = pgpF.nextObject();
|
||||||
@ -1850,7 +1872,7 @@ public class Apg {
|
|||||||
if (dataChunk instanceof PGPOnePassSignatureList) {
|
if (dataChunk instanceof PGPOnePassSignatureList) {
|
||||||
if (progress != null)
|
if (progress != null)
|
||||||
progress.setProgress(R.string.progress_processingSignature, currentProgress, 100);
|
progress.setProgress(R.string.progress_processingSignature, currentProgress, 100);
|
||||||
returnData.putBoolean(EXTRA_SIGNATURE, true);
|
returnData.putBoolean(ApgService.EXTRA_SIGNATURE, true);
|
||||||
PGPOnePassSignatureList sigList = (PGPOnePassSignatureList) dataChunk;
|
PGPOnePassSignatureList sigList = (PGPOnePassSignatureList) dataChunk;
|
||||||
for (int i = 0; i < sigList.size(); ++i) {
|
for (int i = 0; i < sigList.size(); ++i) {
|
||||||
signature = sigList.get(i);
|
signature = sigList.get(i);
|
||||||
@ -1868,17 +1890,17 @@ public class Apg {
|
|||||||
if (sigKeyRing != null) {
|
if (sigKeyRing != null) {
|
||||||
userId = getMainUserId(getMasterKey(sigKeyRing));
|
userId = getMainUserId(getMasterKey(sigKeyRing));
|
||||||
}
|
}
|
||||||
returnData.putString(EXTRA_SIGNATURE_USER_ID, userId);
|
returnData.putString(ApgService.EXTRA_SIGNATURE_USER_ID, userId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
returnData.putLong(EXTRA_SIGNATURE_KEY_ID, signatureKeyId);
|
returnData.putLong(ApgService.EXTRA_SIGNATURE_KEY_ID, signatureKeyId);
|
||||||
|
|
||||||
if (signature != null) {
|
if (signature != null) {
|
||||||
signature.initVerify(signatureKey, new BouncyCastleProvider());
|
signature.initVerify(signatureKey, new BouncyCastleProvider());
|
||||||
} else {
|
} else {
|
||||||
returnData.putBoolean(EXTRA_SIGNATURE_UNKNOWN, true);
|
returnData.putBoolean(ApgService.EXTRA_SIGNATURE_UNKNOWN, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
dataChunk = plainFact.nextObject();
|
dataChunk = plainFact.nextObject();
|
||||||
@ -1915,7 +1937,7 @@ public class Apg {
|
|||||||
try {
|
try {
|
||||||
signature.update(buffer, 0, n);
|
signature.update(buffer, 0, n);
|
||||||
} catch (SignatureException e) {
|
} catch (SignatureException e) {
|
||||||
returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, false);
|
returnData.putBoolean(ApgService.EXTRA_SIGNATURE_SUCCESS, false);
|
||||||
signature = null;
|
signature = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1938,9 +1960,9 @@ public class Apg {
|
|||||||
PGPSignatureList signatureList = (PGPSignatureList) plainFact.nextObject();
|
PGPSignatureList signatureList = (PGPSignatureList) plainFact.nextObject();
|
||||||
PGPSignature messageSignature = signatureList.get(signatureIndex);
|
PGPSignature messageSignature = signatureList.get(signatureIndex);
|
||||||
if (signature.verify(messageSignature)) {
|
if (signature.verify(messageSignature)) {
|
||||||
returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, true);
|
returnData.putBoolean(ApgService.EXTRA_SIGNATURE_SUCCESS, true);
|
||||||
} else {
|
} else {
|
||||||
returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, false);
|
returnData.putBoolean(ApgService.EXTRA_SIGNATURE_SUCCESS, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1963,7 +1985,7 @@ public class Apg {
|
|||||||
return returnData;
|
return returnData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Bundle verifyText(BaseActivity context, InputData data, OutputStream outStream,
|
public static Bundle verifyText(Context context, InputData data, OutputStream outStream,
|
||||||
ProgressDialogUpdater progress) throws IOException, GeneralException, PGPException,
|
ProgressDialogUpdater progress) throws IOException, GeneralException, PGPException,
|
||||||
SignatureException {
|
SignatureException {
|
||||||
Bundle returnData = new Bundle();
|
Bundle returnData = new Bundle();
|
||||||
@ -1995,7 +2017,7 @@ public class Apg {
|
|||||||
byte[] clearText = out.toByteArray();
|
byte[] clearText = out.toByteArray();
|
||||||
outStream.write(clearText);
|
outStream.write(clearText);
|
||||||
|
|
||||||
returnData.putBoolean(EXTRA_SIGNATURE, true);
|
returnData.putBoolean(ApgService.EXTRA_SIGNATURE, true);
|
||||||
|
|
||||||
if (progress != null)
|
if (progress != null)
|
||||||
progress.setProgress(R.string.progress_processingSignature, 60, 100);
|
progress.setProgress(R.string.progress_processingSignature, 60, 100);
|
||||||
@ -2015,16 +2037,17 @@ public class Apg {
|
|||||||
signatureKeyId = signature.getKeyID();
|
signatureKeyId = signature.getKeyID();
|
||||||
}
|
}
|
||||||
if (signatureKey == null) {
|
if (signatureKey == null) {
|
||||||
Bundle pauseData = new Bundle();
|
// TODO: reimplement!
|
||||||
pauseData.putInt(Constants.extras.STATUS, Id.message.unknown_signature_key);
|
// Bundle pauseData = new Bundle();
|
||||||
pauseData.putLong(Constants.extras.KEY_ID, signatureKeyId);
|
// pauseData.putInt(Constants.extras.STATUS, Id.message.unknown_signature_key);
|
||||||
Message msg = new Message();
|
// pauseData.putLong(Constants.extras.KEY_ID, signatureKeyId);
|
||||||
msg.setData(pauseData);
|
// Message msg = new Message();
|
||||||
context.sendMessage(msg);
|
// msg.setData(pauseData);
|
||||||
// pause here
|
// context.sendMessage(msg);
|
||||||
context.getRunningThread().pause();
|
// // pause here
|
||||||
// see whether the key was found in the meantime
|
// context.getRunningThread().pause();
|
||||||
signatureKey = getPublicKey(signature.getKeyID());
|
// // see whether the key was found in the meantime
|
||||||
|
// signatureKey = getPublicKey(signature.getKeyID());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (signatureKey == null) {
|
if (signatureKey == null) {
|
||||||
@ -2036,15 +2059,15 @@ public class Apg {
|
|||||||
if (sigKeyRing != null) {
|
if (sigKeyRing != null) {
|
||||||
userId = getMainUserId(getMasterKey(sigKeyRing));
|
userId = getMainUserId(getMasterKey(sigKeyRing));
|
||||||
}
|
}
|
||||||
returnData.putString(EXTRA_SIGNATURE_USER_ID, userId);
|
returnData.putString(ApgService.EXTRA_SIGNATURE_USER_ID, userId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
returnData.putLong(EXTRA_SIGNATURE_KEY_ID, signatureKeyId);
|
returnData.putLong(ApgService.EXTRA_SIGNATURE_KEY_ID, signatureKeyId);
|
||||||
|
|
||||||
if (signature == null) {
|
if (signature == null) {
|
||||||
returnData.putBoolean(EXTRA_SIGNATURE_UNKNOWN, true);
|
returnData.putBoolean(ApgService.EXTRA_SIGNATURE_UNKNOWN, true);
|
||||||
if (progress != null)
|
if (progress != null)
|
||||||
progress.setProgress(R.string.progress_done, 100, 100);
|
progress.setProgress(R.string.progress_done, 100, 100);
|
||||||
return returnData;
|
return returnData;
|
||||||
@ -2069,7 +2092,7 @@ public class Apg {
|
|||||||
} while (lookAhead != -1);
|
} while (lookAhead != -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
returnData.putBoolean(EXTRA_SIGNATURE_SUCCESS, signature.verify());
|
returnData.putBoolean(ApgService.EXTRA_SIGNATURE_SUCCESS, signature.verify());
|
||||||
|
|
||||||
if (progress != null)
|
if (progress != null)
|
||||||
progress.setProgress(R.string.progress_done, 100, 100);
|
progress.setProgress(R.string.progress_done, 100, 100);
|
@ -20,9 +20,9 @@ import org.spongycastle.jce.provider.BouncyCastleProvider;
|
|||||||
import org.spongycastle.openpgp.PGPException;
|
import org.spongycastle.openpgp.PGPException;
|
||||||
import org.spongycastle.openpgp.PGPPrivateKey;
|
import org.spongycastle.openpgp.PGPPrivateKey;
|
||||||
import org.spongycastle.openpgp.PGPSecretKey;
|
import org.spongycastle.openpgp.PGPSecretKey;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
@ -55,7 +55,7 @@ public class AskForPassphrase {
|
|||||||
secretKey = null;
|
secretKey = null;
|
||||||
alert.setMessage(context.getString(R.string.passPhraseForSymmetricEncryption));
|
alert.setMessage(context.getString(R.string.passPhraseForSymmetricEncryption));
|
||||||
} else {
|
} else {
|
||||||
secretKey = Apg.getMasterKey(Apg.getSecretKeyRing(secretKeyId));
|
secretKey = PGPHelper.getMasterKey(PGPHelper.getSecretKeyRing(secretKeyId));
|
||||||
if (secretKey == null) {
|
if (secretKey == null) {
|
||||||
alert.setTitle(R.string.title_keyNotFound);
|
alert.setTitle(R.string.title_keyNotFound);
|
||||||
alert.setMessage(context.getString(R.string.keyNotFound, secretKeyId));
|
alert.setMessage(context.getString(R.string.keyNotFound, secretKeyId));
|
||||||
@ -67,7 +67,7 @@ public class AskForPassphrase {
|
|||||||
alert.setCancelable(false);
|
alert.setCancelable(false);
|
||||||
return alert.create();
|
return alert.create();
|
||||||
}
|
}
|
||||||
String userId = Apg.getMainUserIdSafe(context, secretKey);
|
String userId = PGPHelper.getMainUserIdSafe(context, secretKey);
|
||||||
alert.setMessage(context.getString(R.string.passPhraseFor, userId));
|
alert.setMessage(context.getString(R.string.passPhraseFor, userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,7 +111,7 @@ public class AskForPassphrase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// cache again
|
// cache again
|
||||||
Apg.setCachedPassPhrase(keyId, passPhrase);
|
PGPHelper.setCachedPassPhrase(keyId, passPhrase);
|
||||||
// return by callback
|
// return by callback
|
||||||
cb.passPhraseCallback(keyId, passPhrase);
|
cb.passPhraseCallback(keyId, passPhrase);
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ public class AskForPassphrase {
|
|||||||
Log.d("APG", "Key has no passphrase!");
|
Log.d("APG", "Key has no passphrase!");
|
||||||
|
|
||||||
// cache null
|
// cache null
|
||||||
Apg.setCachedPassPhrase(secretKey.getKeyID(), null);
|
PGPHelper.setCachedPassPhrase(secretKey.getKeyID(), null);
|
||||||
// return by callback
|
// return by callback
|
||||||
cb.passPhraseCallback(secretKey.getKeyID(), null);
|
cb.passPhraseCallback(secretKey.getKeyID(), null);
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
|
|
||||||
package org.thialfihar.android.apg.passphrase;
|
package org.thialfihar.android.apg.passphrase;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Preferences;
|
import org.thialfihar.android.apg.Preferences;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -47,7 +47,7 @@ public class PassphraseCacheService extends Service {
|
|||||||
delay = 60000;
|
delay = 60000;
|
||||||
}
|
}
|
||||||
|
|
||||||
delay = Apg.cleanUpCache(mPassPhraseCacheTtl, delay);
|
delay = PGPHelper.cleanUpCache(mPassPhraseCacheTtl, delay);
|
||||||
// don't check too often, even if we were close
|
// don't check too often, even if we were close
|
||||||
if (delay < 5000) {
|
if (delay < 5000) {
|
||||||
delay = 5000;
|
delay = 5000;
|
||||||
|
@ -19,8 +19,8 @@ import org.spongycastle.openpgp.PGPPublicKey;
|
|||||||
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
||||||
import org.spongycastle.openpgp.PGPSecretKey;
|
import org.spongycastle.openpgp.PGPSecretKey;
|
||||||
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.util.IterableIterator;
|
import org.thialfihar.android.apg.util.IterableIterator;
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
@ -318,11 +318,11 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
values.put(Keys.IS_MASTER_KEY, key.isMasterKey());
|
values.put(Keys.IS_MASTER_KEY, key.isMasterKey());
|
||||||
values.put(Keys.ALGORITHM, key.getAlgorithm());
|
values.put(Keys.ALGORITHM, key.getAlgorithm());
|
||||||
values.put(Keys.KEY_SIZE, key.getBitStrength());
|
values.put(Keys.KEY_SIZE, key.getBitStrength());
|
||||||
values.put(Keys.CAN_SIGN, Apg.isSigningKey(key));
|
values.put(Keys.CAN_SIGN, PGPHelper.isSigningKey(key));
|
||||||
values.put(Keys.CAN_ENCRYPT, Apg.isEncryptionKey(key));
|
values.put(Keys.CAN_ENCRYPT, PGPHelper.isEncryptionKey(key));
|
||||||
values.put(Keys.IS_REVOKED, key.isRevoked());
|
values.put(Keys.IS_REVOKED, key.isRevoked());
|
||||||
values.put(Keys.CREATION, Apg.getCreationDate(key).getTime() / 1000);
|
values.put(Keys.CREATION, PGPHelper.getCreationDate(key).getTime() / 1000);
|
||||||
Date expiryDate = Apg.getExpiryDate(key);
|
Date expiryDate = PGPHelper.getExpiryDate(key);
|
||||||
if (expiryDate != null) {
|
if (expiryDate != null) {
|
||||||
values.put(Keys.EXPIRY, expiryDate.getTime() / 1000);
|
values.put(Keys.EXPIRY, expiryDate.getTime() / 1000);
|
||||||
}
|
}
|
||||||
@ -367,11 +367,11 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
values.put(Keys.IS_MASTER_KEY, key.isMasterKey());
|
values.put(Keys.IS_MASTER_KEY, key.isMasterKey());
|
||||||
values.put(Keys.ALGORITHM, key.getPublicKey().getAlgorithm());
|
values.put(Keys.ALGORITHM, key.getPublicKey().getAlgorithm());
|
||||||
values.put(Keys.KEY_SIZE, key.getPublicKey().getBitStrength());
|
values.put(Keys.KEY_SIZE, key.getPublicKey().getBitStrength());
|
||||||
values.put(Keys.CAN_SIGN, Apg.isSigningKey(key));
|
values.put(Keys.CAN_SIGN, PGPHelper.isSigningKey(key));
|
||||||
values.put(Keys.CAN_ENCRYPT, Apg.isEncryptionKey(key));
|
values.put(Keys.CAN_ENCRYPT, PGPHelper.isEncryptionKey(key));
|
||||||
values.put(Keys.IS_REVOKED, key.getPublicKey().isRevoked());
|
values.put(Keys.IS_REVOKED, key.getPublicKey().isRevoked());
|
||||||
values.put(Keys.CREATION, Apg.getCreationDate(key).getTime() / 1000);
|
values.put(Keys.CREATION, PGPHelper.getCreationDate(key).getTime() / 1000);
|
||||||
Date expiryDate = Apg.getExpiryDate(key);
|
Date expiryDate = PGPHelper.getExpiryDate(key);
|
||||||
if (expiryDate != null) {
|
if (expiryDate != null) {
|
||||||
values.put(Keys.EXPIRY, expiryDate.getTime() / 1000);
|
values.put(Keys.EXPIRY, expiryDate.getTime() / 1000);
|
||||||
}
|
}
|
||||||
|
@ -28,23 +28,23 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
import org.spongycastle.openpgp.PGPSecretKey;
|
import org.spongycastle.openpgp.PGPSecretKey;
|
||||||
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.InputData;
|
|
||||||
import org.thialfihar.android.apg.Preferences;
|
import org.thialfihar.android.apg.Preferences;
|
||||||
import org.thialfihar.android.apg.ProgressDialogUpdater;
|
import org.thialfihar.android.apg.ProgressDialogUpdater;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg.GeneralException;
|
import org.thialfihar.android.apg.helper.FileHelper;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper.GeneralException;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPConversionHelper;
|
||||||
import org.thialfihar.android.apg.provider.DataProvider;
|
import org.thialfihar.android.apg.provider.DataProvider;
|
||||||
import org.thialfihar.android.apg.util.Utils;
|
import org.thialfihar.android.apg.util.InputData;
|
||||||
|
|
||||||
import android.app.IntentService;
|
import android.app.IntentService;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.Messenger;
|
import android.os.Messenger;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
@ -55,7 +55,16 @@ import android.util.Log;
|
|||||||
* data from the activities or other apps, queues these intents, executes them, and stops itself
|
* data from the activities or other apps, queues these intents, executes them, and stops itself
|
||||||
* after doing them.
|
* after doing them.
|
||||||
*/
|
*/
|
||||||
// TODO: ProgressDialogUpdater rework???
|
|
||||||
|
/**
|
||||||
|
* TODO:
|
||||||
|
*
|
||||||
|
* - ProgressDialogUpdater rework???
|
||||||
|
*
|
||||||
|
* - put recurring things into private functions when possible
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class ApgService extends IntentService implements ProgressDialogUpdater {
|
public class ApgService extends IntentService implements ProgressDialogUpdater {
|
||||||
|
|
||||||
// extras that can be given by intent
|
// extras that can be given by intent
|
||||||
@ -64,6 +73,26 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
public static final String EXTRA_DATA = "data";
|
public static final String EXTRA_DATA = "data";
|
||||||
|
|
||||||
// keys for data bundle
|
// keys for data bundle
|
||||||
|
|
||||||
|
// encrypt
|
||||||
|
public static final String SECRET_KEY_ID = "secret_key_id";
|
||||||
|
public static final String USE_ASCII_AMOR = "use_ascii_amor";
|
||||||
|
public static final String ENCRYPTION_KEYS_IDS = "encryption_keys_ids";
|
||||||
|
public static final String SIGNATURE_KEY_ID = "signature_key_id";
|
||||||
|
public static final String COMPRESSION_ID = "compression_id";
|
||||||
|
public static final String GENERATE_SIGNATURE = "generate_signature";
|
||||||
|
public static final String SIGN_ONLY = "sign_only";
|
||||||
|
public static final String MESSAGE_BYTES = "message_bytes";
|
||||||
|
public static final String INPUT_FILE = "input_file";
|
||||||
|
public static final String OUTPUT_FILE = "output_file";
|
||||||
|
public static final String PROVIDER_URI = "provider_uri";
|
||||||
|
|
||||||
|
// decrypt
|
||||||
|
public static final String SIGNED_ONLY = "signed_only";
|
||||||
|
public static final String RETURN_BYTES = "return_binary";
|
||||||
|
public static final String CIPHERTEXT_BYTES = "ciphertext_bytes";
|
||||||
|
public static final String ASSUME_SYMMETRIC = "assume_symmetric";
|
||||||
|
|
||||||
// edit keys
|
// edit keys
|
||||||
public static final String NEW_PASSPHRASE = "new_passphrase";
|
public static final String NEW_PASSPHRASE = "new_passphrase";
|
||||||
public static final String CURRENT_PASSPHRASE = "current_passphrase";
|
public static final String CURRENT_PASSPHRASE = "current_passphrase";
|
||||||
@ -78,41 +107,44 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
public static final String SYMMETRIC_PASSPHRASE = "passphrase";
|
public static final String SYMMETRIC_PASSPHRASE = "passphrase";
|
||||||
public static final String MASTER_KEY = "master_key";
|
public static final String MASTER_KEY = "master_key";
|
||||||
|
|
||||||
// encrypt
|
|
||||||
public static final String SECRET_KEY_ID = "secret_key_id";
|
|
||||||
public static final String USE_ASCII_AMOR = "use_ascii_amor";
|
|
||||||
public static final String ENCRYPTION_KEYS_IDS = "encryption_keys_ids";
|
|
||||||
public static final String SIGNATURE_KEY_ID = "signature_key_id";
|
|
||||||
public static final String COMPRESSION_ID = "compression_id";
|
|
||||||
public static final String GENERATE_SIGNATURE = "generate_signature";
|
|
||||||
public static final String SIGN_ONLY = "sign_only";
|
|
||||||
public static final String BYTES = "bytes";
|
|
||||||
public static final String INPUT_FILE = "input_file";
|
|
||||||
public static final String OUTPUT_FILE = "output_file";
|
|
||||||
public static final String PROVIDER_URI = "provider_uri";
|
|
||||||
|
|
||||||
// delete file securely
|
// delete file securely
|
||||||
public static final String DELETE_FILE = "delete_file";
|
public static final String DELETE_FILE = "delete_file";
|
||||||
|
|
||||||
// possible ints for EXTRA_ACTION
|
// possible EXTRA_ACTIONs
|
||||||
public static final int ACTION_SAVE_KEYRING = 1;
|
public static final int ACTION_ENCRYPT_SIGN_BYTES = 10;
|
||||||
public static final int ACTION_GENERATE_KEY = 2;
|
public static final int ACTION_ENCRYPT_SIGN_FILE = 11;
|
||||||
public static final int ACTION_GENERATE_DEFAULT_RSA_KEYS = 3;
|
public static final int ACTION_ENCRYPT_SIGN_STREAM = 12;
|
||||||
|
|
||||||
public static final int ACTION_ENCRYPT_SIGN_BYTES = 4;
|
public static final int ACTION_DECRYPT_BYTES = 20;
|
||||||
public static final int ACTION_ENCRYPT_SIGN_FILE = 5;
|
public static final int ACTION_DECRYPT_FILE = 21;
|
||||||
public static final int ACTION_ENCRYPT_SIGN_STREAM = 6;
|
public static final int ACTION_DECRYPT_STREAM = 22;
|
||||||
|
|
||||||
public static final int ACTION_DELETE_FILE_SECURELY = 7;
|
public static final int ACTION_SAVE_KEYRING = 30;
|
||||||
|
public static final int ACTION_GENERATE_KEY = 31;
|
||||||
|
public static final int ACTION_GENERATE_DEFAULT_RSA_KEYS = 32;
|
||||||
|
|
||||||
|
public static final int ACTION_DELETE_FILE_SECURELY = 40;
|
||||||
|
|
||||||
// possible data keys as result
|
// possible data keys as result
|
||||||
|
// keys
|
||||||
public static final String RESULT_NEW_KEY = "new_key";
|
public static final String RESULT_NEW_KEY = "new_key";
|
||||||
public static final String RESULT_NEW_KEY2 = "new_key2";
|
public static final String RESULT_NEW_KEY2 = "new_key2";
|
||||||
public static final String RESULT_SIGNATURE_DATA = "signatureData";
|
|
||||||
public static final String RESULT_SIGNATURE_TEXT = "signatureText";
|
// encrypt
|
||||||
public static final String RESULT_ENCRYPTED_MESSAGE = "encryptedMessage";
|
public static final String RESULT_SIGNATURE_DATA = "signature_data";
|
||||||
public static final String RESULT_ENCRYPTED_DATA = "encryptedData";
|
public static final String RESULT_SIGNATURE_TEXT = "signature_text";
|
||||||
public static final String RESULT_URI = "resultUri";
|
public static final String RESULT_ENCRYPTED_MESSAGE = "encrypted_message";
|
||||||
|
public static final String RESULT_ENCRYPTED_DATA = "encrypted_data";
|
||||||
|
public static final String RESULT_URI = "result_uri";
|
||||||
|
|
||||||
|
// decrypt
|
||||||
|
public static final String RESULT_DECRYPTED_MESSAGE = "decrypted_message";
|
||||||
|
public static final String RESULT_DECRYPTED_DATA = "decrypted_data";
|
||||||
|
public static final String EXTRA_SIGNATURE = "signature";
|
||||||
|
public static final String EXTRA_SIGNATURE_KEY_ID = "signature_key_id";
|
||||||
|
public static final String EXTRA_SIGNATURE_USER_ID = "signature_user_id";
|
||||||
|
public static final String EXTRA_SIGNATURE_SUCCESS = "signature_success";
|
||||||
|
public static final String EXTRA_SIGNATURE_UNKNOWN = "signature_unknown";
|
||||||
|
|
||||||
Messenger mMessenger;
|
Messenger mMessenger;
|
||||||
|
|
||||||
@ -149,7 +181,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
case ACTION_SAVE_KEYRING:
|
case ACTION_SAVE_KEYRING:
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Input
|
/* Input */
|
||||||
String oldPassPhrase = data.getString(CURRENT_PASSPHRASE);
|
String oldPassPhrase = data.getString(CURRENT_PASSPHRASE);
|
||||||
String newPassPhrase = data.getString(NEW_PASSPHRASE);
|
String newPassPhrase = data.getString(NEW_PASSPHRASE);
|
||||||
if (newPassPhrase == null) {
|
if (newPassPhrase == null) {
|
||||||
@ -157,19 +189,19 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
}
|
}
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
ArrayList<String> userIds = (ArrayList<String>) data.getSerializable(USER_IDS);
|
ArrayList<String> userIds = (ArrayList<String>) data.getSerializable(USER_IDS);
|
||||||
ArrayList<PGPSecretKey> keys = Utils.BytesToPGPSecretKeyList(data
|
ArrayList<PGPSecretKey> keys = PGPConversionHelper.BytesToPGPSecretKeyList(data
|
||||||
.getByteArray(KEYS));
|
.getByteArray(KEYS));
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
ArrayList<Integer> keysUsages = (ArrayList<Integer>) data
|
ArrayList<Integer> keysUsages = (ArrayList<Integer>) data
|
||||||
.getSerializable(KEYS_USAGES);
|
.getSerializable(KEYS_USAGES);
|
||||||
long masterKeyId = data.getLong(MASTER_KEY_ID);
|
long masterKeyId = data.getLong(MASTER_KEY_ID);
|
||||||
|
|
||||||
// Operation
|
/* Operation */
|
||||||
Apg.buildSecretKey(this, userIds, keys, keysUsages, masterKeyId, oldPassPhrase,
|
PGPHelper.buildSecretKey(this, userIds, keys, keysUsages, masterKeyId,
|
||||||
newPassPhrase, this);
|
oldPassPhrase, newPassPhrase, this);
|
||||||
Apg.setCachedPassPhrase(masterKeyId, newPassPhrase);
|
PGPHelper.setCachedPassPhrase(masterKeyId, newPassPhrase);
|
||||||
|
|
||||||
// Output
|
/* Output */
|
||||||
sendMessageToHandler(ApgHandler.MESSAGE_OKAY);
|
sendMessageToHandler(ApgHandler.MESSAGE_OKAY);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sendErrorToHandler(e);
|
sendErrorToHandler(e);
|
||||||
@ -180,22 +212,24 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
case ACTION_GENERATE_KEY:
|
case ACTION_GENERATE_KEY:
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Input
|
/* Input */
|
||||||
int algorithm = data.getInt(ALGORITHM);
|
int algorithm = data.getInt(ALGORITHM);
|
||||||
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
int keysize = data.getInt(KEY_SIZE);
|
int keysize = data.getInt(KEY_SIZE);
|
||||||
PGPSecretKey masterKey = null;
|
PGPSecretKey masterKey = null;
|
||||||
if (data.containsKey(MASTER_KEY)) {
|
if (data.containsKey(MASTER_KEY)) {
|
||||||
masterKey = Utils.BytesToPGPSecretKey(data.getByteArray(MASTER_KEY));
|
masterKey = PGPConversionHelper.BytesToPGPSecretKey(data
|
||||||
|
.getByteArray(MASTER_KEY));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Operation
|
/* Operation */
|
||||||
PGPSecretKeyRing newKeyRing = Apg.createKey(this, algorithm, keysize, passphrase,
|
PGPSecretKeyRing newKeyRing = PGPHelper.createKey(this, algorithm, keysize,
|
||||||
masterKey);
|
passphrase, masterKey);
|
||||||
|
|
||||||
// Output
|
/* Output */
|
||||||
Bundle resultData = new Bundle();
|
Bundle resultData = new Bundle();
|
||||||
resultData.putByteArray(RESULT_NEW_KEY, Utils.PGPSecretKeyRingToBytes(newKeyRing));
|
resultData.putByteArray(RESULT_NEW_KEY,
|
||||||
|
PGPConversionHelper.PGPSecretKeyRingToBytes(newKeyRing));
|
||||||
sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
|
sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sendErrorToHandler(e);
|
sendErrorToHandler(e);
|
||||||
@ -206,20 +240,22 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
case ACTION_GENERATE_DEFAULT_RSA_KEYS:
|
case ACTION_GENERATE_DEFAULT_RSA_KEYS:
|
||||||
// generate one RSA 2048 key for signing and one subkey for encrypting!
|
// generate one RSA 2048 key for signing and one subkey for encrypting!
|
||||||
try {
|
try {
|
||||||
|
/* Input */
|
||||||
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
|
|
||||||
// Operation
|
/* Operation */
|
||||||
PGPSecretKeyRing masterKeyRing = Apg.createKey(this, Id.choice.algorithm.rsa, 2048,
|
PGPSecretKeyRing masterKeyRing = PGPHelper.createKey(this, Id.choice.algorithm.rsa,
|
||||||
passphrase, null);
|
2048, passphrase, null);
|
||||||
|
|
||||||
PGPSecretKeyRing subKeyRing = Apg.createKey(this, Id.choice.algorithm.rsa, 2048,
|
PGPSecretKeyRing subKeyRing = PGPHelper.createKey(this, Id.choice.algorithm.rsa,
|
||||||
passphrase, masterKeyRing.getSecretKey());
|
2048, passphrase, masterKeyRing.getSecretKey());
|
||||||
|
|
||||||
// Output
|
/* Output */
|
||||||
Bundle resultData = new Bundle();
|
Bundle resultData = new Bundle();
|
||||||
resultData.putByteArray(RESULT_NEW_KEY,
|
resultData.putByteArray(RESULT_NEW_KEY,
|
||||||
Utils.PGPSecretKeyRingToBytes(masterKeyRing));
|
PGPConversionHelper.PGPSecretKeyRingToBytes(masterKeyRing));
|
||||||
resultData.putByteArray(RESULT_NEW_KEY2, Utils.PGPSecretKeyRingToBytes(subKeyRing));
|
resultData.putByteArray(RESULT_NEW_KEY2,
|
||||||
|
PGPConversionHelper.PGPSecretKeyRingToBytes(subKeyRing));
|
||||||
sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
|
sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sendErrorToHandler(e);
|
sendErrorToHandler(e);
|
||||||
@ -230,11 +266,11 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
case ACTION_ENCRYPT_SIGN_BYTES:
|
case ACTION_ENCRYPT_SIGN_BYTES:
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Input
|
/* Input */
|
||||||
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
||||||
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
|
|
||||||
byte[] bytes = data.getByteArray(BYTES);
|
byte[] bytes = data.getByteArray(MESSAGE_BYTES);
|
||||||
|
|
||||||
boolean useAsciiArmour = data.getBoolean(USE_ASCII_AMOR);
|
boolean useAsciiArmour = data.getBoolean(USE_ASCII_AMOR);
|
||||||
long encryptionKeyIds[] = data.getLongArray(ENCRYPTION_KEYS_IDS);
|
long encryptionKeyIds[] = data.getLongArray(ENCRYPTION_KEYS_IDS);
|
||||||
@ -243,7 +279,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
|
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
|
||||||
boolean signOnly = data.getBoolean(SIGN_ONLY);
|
boolean signOnly = data.getBoolean(SIGN_ONLY);
|
||||||
|
|
||||||
// Operation
|
/* Operation */
|
||||||
ByteArrayInputStream inStream = new ByteArrayInputStream(bytes);
|
ByteArrayInputStream inStream = new ByteArrayInputStream(bytes);
|
||||||
int inLength = bytes.length;
|
int inLength = bytes.length;
|
||||||
|
|
||||||
@ -252,20 +288,20 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
|
|
||||||
if (generateSignature) {
|
if (generateSignature) {
|
||||||
Log.d(Constants.TAG, "generate signature...");
|
Log.d(Constants.TAG, "generate signature...");
|
||||||
Apg.generateSignature(this, inputData, outStream, useAsciiArmour, false,
|
PGPHelper.generateSignature(this, inputData, outStream, useAsciiArmour, false,
|
||||||
secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
|
secretKeyId, PGPHelper.getCachedPassPhrase(secretKeyId), Preferences
|
||||||
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
||||||
.getPreferences(this).getForceV3Signatures(), this);
|
.getPreferences(this).getForceV3Signatures(), this);
|
||||||
} else if (signOnly) {
|
} else if (signOnly) {
|
||||||
Log.d(Constants.TAG, "sign only...");
|
Log.d(Constants.TAG, "sign only...");
|
||||||
Apg.signText(this, inputData, outStream, secretKeyId, Apg
|
PGPHelper.signText(this, inputData, outStream, secretKeyId, PGPHelper
|
||||||
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
||||||
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
||||||
.getForceV3Signatures(), this);
|
.getForceV3Signatures(), this);
|
||||||
} else {
|
} else {
|
||||||
Log.d(Constants.TAG, "encrypt...");
|
Log.d(Constants.TAG, "encrypt...");
|
||||||
Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
PGPHelper.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
||||||
signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
|
signatureKeyId, PGPHelper.getCachedPassPhrase(signatureKeyId), this,
|
||||||
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
||||||
Preferences.getPreferences(this).getDefaultHashAlgorithm(),
|
Preferences.getPreferences(this).getDefaultHashAlgorithm(),
|
||||||
compressionId, Preferences.getPreferences(this).getForceV3Signatures(),
|
compressionId, Preferences.getPreferences(this).getForceV3Signatures(),
|
||||||
@ -274,7 +310,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
|
|
||||||
outStream.close();
|
outStream.close();
|
||||||
|
|
||||||
// Output
|
/* Output */
|
||||||
Bundle resultData = new Bundle();
|
Bundle resultData = new Bundle();
|
||||||
|
|
||||||
if (useAsciiArmour) {
|
if (useAsciiArmour) {
|
||||||
@ -302,7 +338,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
|
|
||||||
case ACTION_ENCRYPT_SIGN_FILE:
|
case ACTION_ENCRYPT_SIGN_FILE:
|
||||||
try {
|
try {
|
||||||
// Input
|
/* Input */
|
||||||
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
||||||
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
|
|
||||||
@ -316,51 +352,41 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
|
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
|
||||||
boolean signOnly = data.getBoolean(SIGN_ONLY);
|
boolean signOnly = data.getBoolean(SIGN_ONLY);
|
||||||
|
|
||||||
|
/* Operation */
|
||||||
|
// check if storage is ready
|
||||||
|
if (!FileHelper.isStorageMounted(inputFile)
|
||||||
|
|| !FileHelper.isStorageMounted(outputFile)) {
|
||||||
|
sendErrorToHandler(new GeneralException(
|
||||||
|
getString(R.string.error_externalStorageNotReady)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// InputStream
|
// InputStream
|
||||||
long inLength = -1;
|
long inLength = -1;
|
||||||
FileInputStream inStream = null;
|
FileInputStream inStream = new FileInputStream(inputFile);
|
||||||
if (inputFile.startsWith(Environment.getExternalStorageDirectory()
|
|
||||||
.getAbsolutePath())) {
|
|
||||||
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
|
||||||
sendErrorToHandler(new GeneralException(
|
|
||||||
getString(R.string.error_externalStorageNotReady)));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
inStream = new FileInputStream(inputFile);
|
|
||||||
File file = new File(inputFile);
|
File file = new File(inputFile);
|
||||||
inLength = file.length();
|
inLength = file.length();
|
||||||
|
|
||||||
InputData inputData = new InputData(inStream, inLength);
|
InputData inputData = new InputData(inStream, inLength);
|
||||||
|
|
||||||
// OutputStream
|
// OutputStream
|
||||||
if (outputFile.startsWith(Environment.getExternalStorageDirectory()
|
|
||||||
.getAbsolutePath())) {
|
|
||||||
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
|
||||||
sendErrorToHandler(new GeneralException(
|
|
||||||
getString(R.string.error_externalStorageNotReady)));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FileOutputStream outStream = new FileOutputStream(outputFile);
|
FileOutputStream outStream = new FileOutputStream(outputFile);
|
||||||
|
|
||||||
// Operation
|
|
||||||
if (generateSignature) {
|
if (generateSignature) {
|
||||||
Log.d(Constants.TAG, "generate signature...");
|
Log.d(Constants.TAG, "generate signature...");
|
||||||
Apg.generateSignature(this, inputData, outStream, useAsciiArmour, true,
|
PGPHelper.generateSignature(this, inputData, outStream, useAsciiArmour, true,
|
||||||
secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
|
secretKeyId, PGPHelper.getCachedPassPhrase(secretKeyId), Preferences
|
||||||
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
||||||
.getPreferences(this).getForceV3Signatures(), this);
|
.getPreferences(this).getForceV3Signatures(), this);
|
||||||
} else if (signOnly) {
|
} else if (signOnly) {
|
||||||
Log.d(Constants.TAG, "sign only...");
|
Log.d(Constants.TAG, "sign only...");
|
||||||
Apg.signText(this, inputData, outStream, secretKeyId, Apg
|
PGPHelper.signText(this, inputData, outStream, secretKeyId, PGPHelper
|
||||||
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
||||||
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
||||||
.getForceV3Signatures(), this);
|
.getForceV3Signatures(), this);
|
||||||
} else {
|
} else {
|
||||||
Log.d(Constants.TAG, "encrypt...");
|
Log.d(Constants.TAG, "encrypt...");
|
||||||
Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
PGPHelper.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
||||||
signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
|
signatureKeyId, PGPHelper.getCachedPassPhrase(signatureKeyId), this,
|
||||||
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
||||||
Preferences.getPreferences(this).getDefaultHashAlgorithm(),
|
Preferences.getPreferences(this).getDefaultHashAlgorithm(),
|
||||||
compressionId, Preferences.getPreferences(this).getForceV3Signatures(),
|
compressionId, Preferences.getPreferences(this).getForceV3Signatures(),
|
||||||
@ -369,6 +395,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
|
|
||||||
outStream.close();
|
outStream.close();
|
||||||
|
|
||||||
|
/* Output */
|
||||||
sendMessageToHandler(ApgHandler.MESSAGE_OKAY);
|
sendMessageToHandler(ApgHandler.MESSAGE_OKAY);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sendErrorToHandler(e);
|
sendErrorToHandler(e);
|
||||||
@ -377,7 +404,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
|
|
||||||
case ACTION_ENCRYPT_SIGN_STREAM:
|
case ACTION_ENCRYPT_SIGN_STREAM:
|
||||||
try {
|
try {
|
||||||
// Input
|
/* Input */
|
||||||
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
||||||
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
String passphrase = data.getString(SYMMETRIC_PASSPHRASE);
|
||||||
|
|
||||||
@ -389,20 +416,21 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
int compressionId = data.getInt(COMPRESSION_ID);
|
int compressionId = data.getInt(COMPRESSION_ID);
|
||||||
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
|
boolean generateSignature = data.getBoolean(GENERATE_SIGNATURE);
|
||||||
boolean signOnly = data.getBoolean(SIGN_ONLY);
|
boolean signOnly = data.getBoolean(SIGN_ONLY);
|
||||||
|
|
||||||
|
/* Operation */
|
||||||
// InputStream
|
// InputStream
|
||||||
InputStream in = getContentResolver().openInputStream(providerUri);
|
InputStream in = getContentResolver().openInputStream(providerUri);
|
||||||
long inLength = Apg.getLengthOfStream(in);
|
long inLength = PGPHelper.getLengthOfStream(in);
|
||||||
|
|
||||||
InputData inputData = new InputData(in, inLength);
|
InputData inputData = new InputData(in, inLength);
|
||||||
|
|
||||||
// OutputStream
|
// OutputStream
|
||||||
String streamFilename = null;
|
String streamFilename = null;
|
||||||
try {
|
try {
|
||||||
while (true) {
|
while (true) {
|
||||||
streamFilename = Apg.generateRandomString(32);
|
streamFilename = PGPHelper.generateRandomString(32);
|
||||||
if (streamFilename == null) {
|
if (streamFilename == null) {
|
||||||
throw new Apg.GeneralException("couldn't generate random file name");
|
throw new PGPHelper.GeneralException(
|
||||||
|
"couldn't generate random file name");
|
||||||
}
|
}
|
||||||
openFileInput(streamFilename).close();
|
openFileInput(streamFilename).close();
|
||||||
}
|
}
|
||||||
@ -411,20 +439,19 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
}
|
}
|
||||||
FileOutputStream outStream = openFileOutput(streamFilename, Context.MODE_PRIVATE);
|
FileOutputStream outStream = openFileOutput(streamFilename, Context.MODE_PRIVATE);
|
||||||
|
|
||||||
// Operation
|
|
||||||
if (generateSignature) {
|
if (generateSignature) {
|
||||||
Apg.generateSignature(this, inputData, outStream, useAsciiArmour, true,
|
PGPHelper.generateSignature(this, inputData, outStream, useAsciiArmour, true,
|
||||||
secretKeyId, Apg.getCachedPassPhrase(secretKeyId), Preferences
|
secretKeyId, PGPHelper.getCachedPassPhrase(secretKeyId), Preferences
|
||||||
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
.getPreferences(this).getDefaultHashAlgorithm(), Preferences
|
||||||
.getPreferences(this).getForceV3Signatures(), this);
|
.getPreferences(this).getForceV3Signatures(), this);
|
||||||
} else if (signOnly) {
|
} else if (signOnly) {
|
||||||
Apg.signText(this, inputData, outStream, secretKeyId, Apg
|
PGPHelper.signText(this, inputData, outStream, secretKeyId, PGPHelper
|
||||||
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
.getCachedPassPhrase(secretKeyId), Preferences.getPreferences(this)
|
||||||
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
.getDefaultHashAlgorithm(), Preferences.getPreferences(this)
|
||||||
.getForceV3Signatures(), this);
|
.getForceV3Signatures(), this);
|
||||||
} else {
|
} else {
|
||||||
Apg.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
PGPHelper.encrypt(this, inputData, outStream, useAsciiArmour, encryptionKeyIds,
|
||||||
signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this,
|
signatureKeyId, PGPHelper.getCachedPassPhrase(signatureKeyId), this,
|
||||||
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
Preferences.getPreferences(this).getDefaultEncryptionAlgorithm(),
|
||||||
Preferences.getPreferences(this).getDefaultHashAlgorithm(),
|
Preferences.getPreferences(this).getDefaultHashAlgorithm(),
|
||||||
compressionId, Preferences.getPreferences(this).getForceV3Signatures(),
|
compressionId, Preferences.getPreferences(this).getForceV3Signatures(),
|
||||||
@ -433,7 +460,7 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
|
|
||||||
outStream.close();
|
outStream.close();
|
||||||
|
|
||||||
// Output
|
/* Output */
|
||||||
Bundle resultData = new Bundle();
|
Bundle resultData = new Bundle();
|
||||||
|
|
||||||
String uri = "content://" + DataProvider.AUTHORITY + "/data/" + streamFilename;
|
String uri = "content://" + DataProvider.AUTHORITY + "/data/" + streamFilename;
|
||||||
@ -448,21 +475,21 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
|
|
||||||
case ACTION_DELETE_FILE_SECURELY:
|
case ACTION_DELETE_FILE_SECURELY:
|
||||||
try {
|
try {
|
||||||
// Input
|
/* Input */
|
||||||
String deleteFile = data.getString(DELETE_FILE);
|
String deleteFile = data.getString(DELETE_FILE);
|
||||||
|
|
||||||
// Operation
|
/* Operation */
|
||||||
try {
|
try {
|
||||||
Apg.deleteFileSecurely(this, new File(deleteFile), this);
|
PGPHelper.deleteFileSecurely(this, new File(deleteFile), this);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
throw new Apg.GeneralException(getString(R.string.error_fileNotFound,
|
throw new PGPHelper.GeneralException(getString(R.string.error_fileNotFound,
|
||||||
deleteFile));
|
deleteFile));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new Apg.GeneralException(getString(R.string.error_fileDeleteFailed,
|
throw new PGPHelper.GeneralException(getString(R.string.error_fileDeleteFailed,
|
||||||
deleteFile));
|
deleteFile));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Output
|
/* Output */
|
||||||
sendMessageToHandler(ApgHandler.MESSAGE_OKAY);
|
sendMessageToHandler(ApgHandler.MESSAGE_OKAY);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sendErrorToHandler(e);
|
sendErrorToHandler(e);
|
||||||
@ -470,6 +497,157 @@ public class ApgService extends IntentService implements ProgressDialogUpdater {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ACTION_DECRYPT_BYTES:
|
||||||
|
try {
|
||||||
|
/* Input */
|
||||||
|
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
||||||
|
byte[] bytes = data.getByteArray(CIPHERTEXT_BYTES);
|
||||||
|
boolean signedOnly = data.getBoolean(SIGNED_ONLY);
|
||||||
|
boolean returnBytes = data.getBoolean(RETURN_BYTES);
|
||||||
|
boolean assumeSymmetricEncryption = data.getBoolean(ASSUME_SYMMETRIC);
|
||||||
|
|
||||||
|
/* Operation */
|
||||||
|
ByteArrayInputStream inStream = new ByteArrayInputStream(bytes);
|
||||||
|
int inLength = bytes.length;
|
||||||
|
|
||||||
|
InputData inputData = new InputData(inStream, inLength);
|
||||||
|
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
||||||
|
|
||||||
|
Bundle resultData = new Bundle();
|
||||||
|
|
||||||
|
// verifyText and decrypt returning additional resultData values for the
|
||||||
|
// verification of signatures
|
||||||
|
if (signedOnly) {
|
||||||
|
resultData = PGPHelper.verifyText(this, inputData, outStream, this);
|
||||||
|
} else {
|
||||||
|
resultData = PGPHelper.decrypt(this, inputData, outStream,
|
||||||
|
PGPHelper.getCachedPassPhrase(secretKeyId), this,
|
||||||
|
assumeSymmetricEncryption);
|
||||||
|
}
|
||||||
|
|
||||||
|
outStream.close();
|
||||||
|
|
||||||
|
/* Output */
|
||||||
|
if (returnBytes) {
|
||||||
|
byte output[] = outStream.toByteArray();
|
||||||
|
resultData.putByteArray(RESULT_DECRYPTED_DATA, output);
|
||||||
|
} else {
|
||||||
|
String output = new String(outStream.toByteArray());
|
||||||
|
resultData.putString(RESULT_DECRYPTED_MESSAGE, output);
|
||||||
|
}
|
||||||
|
|
||||||
|
sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
|
||||||
|
} catch (Exception e) {
|
||||||
|
sendErrorToHandler(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACTION_DECRYPT_FILE:
|
||||||
|
try {
|
||||||
|
/* Input */
|
||||||
|
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
||||||
|
boolean signedOnly = data.getBoolean(SIGNED_ONLY);
|
||||||
|
boolean assumeSymmetricEncryption = data.getBoolean(ASSUME_SYMMETRIC);
|
||||||
|
|
||||||
|
String inputFile = data.getString(INPUT_FILE);
|
||||||
|
String outputFile = data.getString(OUTPUT_FILE);
|
||||||
|
|
||||||
|
/* Operation */
|
||||||
|
// check if storage is ready
|
||||||
|
if (!FileHelper.isStorageMounted(inputFile)
|
||||||
|
|| !FileHelper.isStorageMounted(outputFile)) {
|
||||||
|
sendErrorToHandler(new GeneralException(
|
||||||
|
getString(R.string.error_externalStorageNotReady)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// InputStream
|
||||||
|
long inLength = -1;
|
||||||
|
FileInputStream inStream = new FileInputStream(inputFile);
|
||||||
|
File file = new File(inputFile);
|
||||||
|
inLength = file.length();
|
||||||
|
InputData inputData = new InputData(inStream, inLength);
|
||||||
|
|
||||||
|
// OutputStream
|
||||||
|
FileOutputStream outStream = new FileOutputStream(outputFile);
|
||||||
|
|
||||||
|
Bundle resultData = new Bundle();
|
||||||
|
|
||||||
|
// verifyText and decrypt returning additional output values for the
|
||||||
|
// verification of signatures
|
||||||
|
if (signedOnly) {
|
||||||
|
resultData = PGPHelper.verifyText(this, inputData, outStream, this);
|
||||||
|
} else {
|
||||||
|
resultData = PGPHelper.decrypt(this, inputData, outStream,
|
||||||
|
PGPHelper.getCachedPassPhrase(secretKeyId), this,
|
||||||
|
assumeSymmetricEncryption);
|
||||||
|
}
|
||||||
|
|
||||||
|
outStream.close();
|
||||||
|
|
||||||
|
/* Output */
|
||||||
|
sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
|
||||||
|
} catch (Exception e) {
|
||||||
|
sendErrorToHandler(e);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACTION_DECRYPT_STREAM:
|
||||||
|
try {
|
||||||
|
/* Input */
|
||||||
|
long secretKeyId = data.getLong(SECRET_KEY_ID);
|
||||||
|
boolean signedOnly = data.getBoolean(SIGNED_ONLY);
|
||||||
|
boolean assumeSymmetricEncryption = data.getBoolean(ASSUME_SYMMETRIC);
|
||||||
|
Uri providerUri = Uri.parse(data.getString(PROVIDER_URI));
|
||||||
|
|
||||||
|
/* Operation */
|
||||||
|
// InputStream
|
||||||
|
InputStream in = getContentResolver().openInputStream(providerUri);
|
||||||
|
long inLength = PGPHelper.getLengthOfStream(in);
|
||||||
|
InputData inputData = new InputData(in, inLength);
|
||||||
|
|
||||||
|
// OutputStream
|
||||||
|
String streamFilename = null;
|
||||||
|
try {
|
||||||
|
while (true) {
|
||||||
|
streamFilename = PGPHelper.generateRandomString(32);
|
||||||
|
if (streamFilename == null) {
|
||||||
|
throw new PGPHelper.GeneralException(
|
||||||
|
"couldn't generate random file name");
|
||||||
|
}
|
||||||
|
openFileInput(streamFilename).close();
|
||||||
|
}
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
// found a name that isn't used yet
|
||||||
|
}
|
||||||
|
FileOutputStream outStream = openFileOutput(streamFilename, Context.MODE_PRIVATE);
|
||||||
|
|
||||||
|
Bundle resultData = new Bundle();
|
||||||
|
|
||||||
|
// verifyText and decrypt returning additional output values for the
|
||||||
|
// verification of signatures
|
||||||
|
if (signedOnly) {
|
||||||
|
resultData = PGPHelper.verifyText(this, inputData, outStream, this);
|
||||||
|
} else {
|
||||||
|
resultData = PGPHelper.decrypt(this, inputData, outStream,
|
||||||
|
PGPHelper.getCachedPassPhrase(secretKeyId), this,
|
||||||
|
assumeSymmetricEncryption);
|
||||||
|
}
|
||||||
|
|
||||||
|
outStream.close();
|
||||||
|
|
||||||
|
/* Output */
|
||||||
|
String uri = "content://" + DataProvider.AUTHORITY + "/data/" + streamFilename;
|
||||||
|
resultData.putString(RESULT_URI, uri);
|
||||||
|
|
||||||
|
sendMessageToHandler(ApgHandler.MESSAGE_OKAY, resultData);
|
||||||
|
} catch (Exception e) {
|
||||||
|
sendErrorToHandler(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -21,12 +21,12 @@ import java.io.FileNotFoundException;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.PausableThread;
|
import org.thialfihar.android.apg.PausableThread;
|
||||||
import org.thialfihar.android.apg.Preferences;
|
import org.thialfihar.android.apg.Preferences;
|
||||||
import org.thialfihar.android.apg.ProgressDialogUpdater;
|
import org.thialfihar.android.apg.ProgressDialogUpdater;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.passphrase.AskForPassphrase;
|
import org.thialfihar.android.apg.passphrase.AskForPassphrase;
|
||||||
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
|
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ public class BaseActivity extends SherlockFragmentActivity implements Runnable,
|
|||||||
// not needed later:
|
// not needed later:
|
||||||
mPreferences = Preferences.getPreferences(this);
|
mPreferences = Preferences.getPreferences(this);
|
||||||
|
|
||||||
Apg.initialize(this);
|
PGPHelper.initialize(this);
|
||||||
|
|
||||||
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
||||||
File dir = new File(Constants.path.APP_DIR);
|
File dir = new File(Constants.path.APP_DIR);
|
||||||
@ -275,7 +275,7 @@ public class BaseActivity extends SherlockFragmentActivity implements Runnable,
|
|||||||
case Id.request.secret_keys: {
|
case Id.request.secret_keys: {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
Bundle bundle = data.getExtras();
|
Bundle bundle = data.getExtras();
|
||||||
setSecretKeyId(bundle.getLong(Apg.EXTRA_KEY_ID));
|
setSecretKeyId(bundle.getLong(PGPHelper.EXTRA_KEY_ID));
|
||||||
} else {
|
} else {
|
||||||
setSecretKeyId(Id.key.none);
|
setSecretKeyId(Id.key.none);
|
||||||
}
|
}
|
||||||
@ -378,7 +378,7 @@ public class BaseActivity extends SherlockFragmentActivity implements Runnable,
|
|||||||
|
|
||||||
public void passPhraseCallback(long keyId, String passPhrase) {
|
public void passPhraseCallback(long keyId, String passPhrase) {
|
||||||
// TODO: Not needed anymore, now implemented in AskForSecretKeyPass
|
// TODO: Not needed anymore, now implemented in AskForSecretKeyPass
|
||||||
Apg.setCachedPassPhrase(keyId, passPhrase);
|
PGPHelper.setCachedPassPhrase(keyId, passPhrase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendMessage(Message msg) {
|
public void sendMessage(Message msg) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -19,9 +19,11 @@ package org.thialfihar.android.apg.ui;
|
|||||||
|
|
||||||
import org.spongycastle.openpgp.PGPSecretKey;
|
import org.spongycastle.openpgp.PGPSecretKey;
|
||||||
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
import org.thialfihar.android.apg.helper.OtherHelper;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPConversionHelper;
|
||||||
import org.thialfihar.android.apg.service.ApgHandler;
|
import org.thialfihar.android.apg.service.ApgHandler;
|
||||||
import org.thialfihar.android.apg.service.ApgService;
|
import org.thialfihar.android.apg.service.ApgService;
|
||||||
import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
|
import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
|
||||||
@ -29,7 +31,6 @@ import org.thialfihar.android.apg.ui.widget.KeyEditor;
|
|||||||
import org.thialfihar.android.apg.ui.widget.SectionView;
|
import org.thialfihar.android.apg.ui.widget.SectionView;
|
||||||
import org.thialfihar.android.apg.ui.widget.UserIdEditor;
|
import org.thialfihar.android.apg.ui.widget.UserIdEditor;
|
||||||
import org.thialfihar.android.apg.util.IterableIterator;
|
import org.thialfihar.android.apg.util.IterableIterator;
|
||||||
import org.thialfihar.android.apg.util.Utils;
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
|
||||||
import com.actionbarsherlock.app.ActionBar;
|
import com.actionbarsherlock.app.ActionBar;
|
||||||
@ -132,7 +133,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
mActionBar.setDisplayShowTitleEnabled(true);
|
mActionBar.setDisplayShowTitleEnabled(true);
|
||||||
|
|
||||||
// set actionbar without home button if called from another app
|
// set actionbar without home button if called from another app
|
||||||
if (getCallingPackage() != null && getCallingPackage().equals(Apg.PACKAGE_NAME)) {
|
if (getCallingPackage() != null && getCallingPackage().equals(PGPHelper.PACKAGE_NAME)) {
|
||||||
mActionBar.setDisplayHomeAsUpEnabled(true);
|
mActionBar.setDisplayHomeAsUpEnabled(true);
|
||||||
mActionBar.setHomeButtonEnabled(true);
|
mActionBar.setHomeButtonEnabled(true);
|
||||||
} else {
|
} else {
|
||||||
@ -153,7 +154,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
|
|
||||||
// Handle intents
|
// Handle intents
|
||||||
Bundle extras = mIntent.getExtras();
|
Bundle extras = mIntent.getExtras();
|
||||||
if (Apg.Intent.CREATE_KEY.equals(mIntent.getAction())) {
|
if (PGPHelper.Intent.CREATE_KEY.equals(mIntent.getAction())) {
|
||||||
|
|
||||||
mActionBar.setTitle(R.string.title_createKey);
|
mActionBar.setTitle(R.string.title_createKey);
|
||||||
|
|
||||||
@ -161,14 +162,14 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
|
|
||||||
if (extras != null) {
|
if (extras != null) {
|
||||||
// if userId is given, prefill the fields
|
// if userId is given, prefill the fields
|
||||||
if (extras.containsKey(Apg.EXTRA_USER_IDS)) {
|
if (extras.containsKey(PGPHelper.EXTRA_USER_IDS)) {
|
||||||
Log.d(Constants.TAG, "UserIds are given!");
|
Log.d(Constants.TAG, "UserIds are given!");
|
||||||
mUserIds.add(extras.getString(Apg.EXTRA_USER_IDS));
|
mUserIds.add(extras.getString(PGPHelper.EXTRA_USER_IDS));
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no passphrase is given
|
// if no passphrase is given
|
||||||
if (extras.containsKey(Apg.EXTRA_NO_PASSPHRASE)) {
|
if (extras.containsKey(PGPHelper.EXTRA_NO_PASSPHRASE)) {
|
||||||
boolean noPassphrase = extras.getBoolean(Apg.EXTRA_NO_PASSPHRASE);
|
boolean noPassphrase = extras.getBoolean(PGPHelper.EXTRA_NO_PASSPHRASE);
|
||||||
if (noPassphrase) {
|
if (noPassphrase) {
|
||||||
// check "no passphrase" checkbox and remove button
|
// check "no passphrase" checkbox and remove button
|
||||||
mNoPassphrase.setChecked(true);
|
mNoPassphrase.setChecked(true);
|
||||||
@ -177,9 +178,9 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// generate key
|
// generate key
|
||||||
if (extras.containsKey(Apg.EXTRA_GENERATE_DEFAULT_KEYS)) {
|
if (extras.containsKey(PGPHelper.EXTRA_GENERATE_DEFAULT_KEYS)) {
|
||||||
boolean generateDefaultKeys = extras
|
boolean generateDefaultKeys = extras
|
||||||
.getBoolean(Apg.EXTRA_GENERATE_DEFAULT_KEYS);
|
.getBoolean(PGPHelper.EXTRA_GENERATE_DEFAULT_KEYS);
|
||||||
if (generateDefaultKeys) {
|
if (generateDefaultKeys) {
|
||||||
|
|
||||||
// build layout in handler after generating keys not directly in onCreate
|
// build layout in handler after generating keys not directly in onCreate
|
||||||
@ -209,10 +210,10 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
if (message.arg1 == ApgHandler.MESSAGE_OKAY) {
|
if (message.arg1 == ApgHandler.MESSAGE_OKAY) {
|
||||||
// get new key from data bundle returned from service
|
// get new key from data bundle returned from service
|
||||||
Bundle data = message.getData();
|
Bundle data = message.getData();
|
||||||
PGPSecretKeyRing masterKeyRing = Utils
|
PGPSecretKeyRing masterKeyRing = PGPConversionHelper
|
||||||
.BytesToPGPSecretKeyRing(data
|
.BytesToPGPSecretKeyRing(data
|
||||||
.getByteArray(ApgService.RESULT_NEW_KEY));
|
.getByteArray(ApgService.RESULT_NEW_KEY));
|
||||||
PGPSecretKeyRing subKeyRing = Utils
|
PGPSecretKeyRing subKeyRing = PGPConversionHelper
|
||||||
.BytesToPGPSecretKeyRing(data
|
.BytesToPGPSecretKeyRing(data
|
||||||
.getByteArray(ApgService.RESULT_NEW_KEY2));
|
.getByteArray(ApgService.RESULT_NEW_KEY2));
|
||||||
|
|
||||||
@ -243,11 +244,11 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (Apg.Intent.EDIT_KEY.equals(mIntent.getAction())) {
|
} else if (PGPHelper.Intent.EDIT_KEY.equals(mIntent.getAction())) {
|
||||||
|
|
||||||
mActionBar.setTitle(R.string.title_editKey);
|
mActionBar.setTitle(R.string.title_editKey);
|
||||||
|
|
||||||
mCurrentPassPhrase = Apg.getEditPassPhrase();
|
mCurrentPassPhrase = PGPHelper.getEditPassPhrase();
|
||||||
if (mCurrentPassPhrase == null) {
|
if (mCurrentPassPhrase == null) {
|
||||||
mCurrentPassPhrase = "";
|
mCurrentPassPhrase = "";
|
||||||
}
|
}
|
||||||
@ -260,14 +261,14 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
|
|
||||||
if (extras != null) {
|
if (extras != null) {
|
||||||
|
|
||||||
if (extras.containsKey(Apg.EXTRA_KEY_ID)) {
|
if (extras.containsKey(PGPHelper.EXTRA_KEY_ID)) {
|
||||||
long keyId = mIntent.getExtras().getLong(Apg.EXTRA_KEY_ID);
|
long keyId = mIntent.getExtras().getLong(PGPHelper.EXTRA_KEY_ID);
|
||||||
|
|
||||||
if (keyId != 0) {
|
if (keyId != 0) {
|
||||||
PGPSecretKey masterKey = null;
|
PGPSecretKey masterKey = null;
|
||||||
mKeyRing = Apg.getSecretKeyRing(keyId);
|
mKeyRing = PGPHelper.getSecretKeyRing(keyId);
|
||||||
if (mKeyRing != null) {
|
if (mKeyRing != null) {
|
||||||
masterKey = Apg.getMasterKey(mKeyRing);
|
masterKey = PGPHelper.getMasterKey(mKeyRing);
|
||||||
for (PGPSecretKey key : new IterableIterator<PGPSecretKey>(
|
for (PGPSecretKey key : new IterableIterator<PGPSecretKey>(
|
||||||
mKeyRing.getSecretKeys())) {
|
mKeyRing.getSecretKeys())) {
|
||||||
mKeys.add(key);
|
mKeys.add(key);
|
||||||
@ -411,7 +412,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
if (!isPassphraseSet()) {
|
if (!isPassphraseSet()) {
|
||||||
throw new Apg.GeneralException(this.getString(R.string.setAPassPhrase));
|
throw new PGPHelper.GeneralException(this.getString(R.string.setAPassPhrase));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send all information needed to service to edit key in other thread
|
// Send all information needed to service to edit key in other thread
|
||||||
@ -425,7 +426,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
data.putString(ApgService.NEW_PASSPHRASE, mNewPassPhrase);
|
data.putString(ApgService.NEW_PASSPHRASE, mNewPassPhrase);
|
||||||
data.putSerializable(ApgService.USER_IDS, getUserIds(mUserIdsView));
|
data.putSerializable(ApgService.USER_IDS, getUserIds(mUserIdsView));
|
||||||
Vector<PGPSecretKey> keys = getKeys(mKeysView);
|
Vector<PGPSecretKey> keys = getKeys(mKeysView);
|
||||||
data.putByteArray(ApgService.KEYS, Utils.PGPSecretKeyListToBytes(keys));
|
data.putByteArray(ApgService.KEYS, PGPConversionHelper.PGPSecretKeyListToBytes(keys));
|
||||||
data.putSerializable(ApgService.KEYS_USAGES, getKeysUsages(mKeysView));
|
data.putSerializable(ApgService.KEYS_USAGES, getKeysUsages(mKeysView));
|
||||||
data.putLong(ApgService.MASTER_KEY_ID, getMasterKeyId());
|
data.putLong(ApgService.MASTER_KEY_ID, getMasterKeyId());
|
||||||
|
|
||||||
@ -455,7 +456,7 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
|
|
||||||
// start service with intent
|
// start service with intent
|
||||||
startService(intent);
|
startService(intent);
|
||||||
} catch (Apg.GeneralException e) {
|
} catch (PGPHelper.GeneralException e) {
|
||||||
Toast.makeText(this, getString(R.string.errorMessage, e.getMessage()),
|
Toast.makeText(this, getString(R.string.errorMessage, e.getMessage()),
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
@ -467,7 +468,8 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
* @param userIdsView
|
* @param userIdsView
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private Vector<String> getUserIds(SectionView userIdsView) throws Apg.GeneralException {
|
private Vector<String> getUserIds(SectionView userIdsView)
|
||||||
|
throws PGPHelper.GeneralException {
|
||||||
Vector<String> userIds = new Vector<String>();
|
Vector<String> userIds = new Vector<String>();
|
||||||
|
|
||||||
ViewGroup userIdEditors = userIdsView.getEditors();
|
ViewGroup userIdEditors = userIdsView.getEditors();
|
||||||
@ -479,12 +481,13 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
try {
|
try {
|
||||||
userId = editor.getValue();
|
userId = editor.getValue();
|
||||||
} catch (UserIdEditor.NoNameException e) {
|
} catch (UserIdEditor.NoNameException e) {
|
||||||
throw new Apg.GeneralException(this.getString(R.string.error_userIdNeedsAName));
|
throw new PGPHelper.GeneralException(
|
||||||
|
this.getString(R.string.error_userIdNeedsAName));
|
||||||
} catch (UserIdEditor.NoEmailException e) {
|
} catch (UserIdEditor.NoEmailException e) {
|
||||||
throw new Apg.GeneralException(
|
throw new PGPHelper.GeneralException(
|
||||||
this.getString(R.string.error_userIdNeedsAnEmailAddress));
|
this.getString(R.string.error_userIdNeedsAnEmailAddress));
|
||||||
} catch (UserIdEditor.InvalidEmailException e) {
|
} catch (UserIdEditor.InvalidEmailException e) {
|
||||||
throw new Apg.GeneralException(e.getMessage());
|
throw new PGPHelper.GeneralException(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userId.equals("")) {
|
if (userId.equals("")) {
|
||||||
@ -500,11 +503,12 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (userIds.size() == 0) {
|
if (userIds.size() == 0) {
|
||||||
throw new Apg.GeneralException(getString(R.string.error_keyNeedsAUserId));
|
throw new PGPHelper.GeneralException(getString(R.string.error_keyNeedsAUserId));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gotMainUserId) {
|
if (!gotMainUserId) {
|
||||||
throw new Apg.GeneralException(getString(R.string.error_mainUserIdMustNotBeEmpty));
|
throw new PGPHelper.GeneralException(
|
||||||
|
getString(R.string.error_mainUserIdMustNotBeEmpty));
|
||||||
}
|
}
|
||||||
|
|
||||||
return userIds;
|
return userIds;
|
||||||
@ -516,13 +520,14 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
* @param keysView
|
* @param keysView
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private Vector<PGPSecretKey> getKeys(SectionView keysView) throws Apg.GeneralException {
|
private Vector<PGPSecretKey> getKeys(SectionView keysView)
|
||||||
|
throws PGPHelper.GeneralException {
|
||||||
Vector<PGPSecretKey> keys = new Vector<PGPSecretKey>();
|
Vector<PGPSecretKey> keys = new Vector<PGPSecretKey>();
|
||||||
|
|
||||||
ViewGroup keyEditors = keysView.getEditors();
|
ViewGroup keyEditors = keysView.getEditors();
|
||||||
|
|
||||||
if (keyEditors.getChildCount() == 0) {
|
if (keyEditors.getChildCount() == 0) {
|
||||||
throw new Apg.GeneralException(getString(R.string.error_keyNeedsMasterKey));
|
throw new PGPHelper.GeneralException(getString(R.string.error_keyNeedsMasterKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < keyEditors.getChildCount(); ++i) {
|
for (int i = 0; i < keyEditors.getChildCount(); ++i) {
|
||||||
@ -539,13 +544,14 @@ public class EditKeyActivity extends SherlockFragmentActivity {
|
|||||||
* @param keysView
|
* @param keysView
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private Vector<Integer> getKeysUsages(SectionView keysView) throws Apg.GeneralException {
|
private Vector<Integer> getKeysUsages(SectionView keysView)
|
||||||
|
throws PGPHelper.GeneralException {
|
||||||
Vector<Integer> getKeysUsages = new Vector<Integer>();
|
Vector<Integer> getKeysUsages = new Vector<Integer>();
|
||||||
|
|
||||||
ViewGroup keyEditors = keysView.getEditors();
|
ViewGroup keyEditors = keysView.getEditors();
|
||||||
|
|
||||||
if (keyEditors.getChildCount() == 0) {
|
if (keyEditors.getChildCount() == 0) {
|
||||||
throw new Apg.GeneralException(getString(R.string.error_keyNeedsMasterKey));
|
throw new PGPHelper.GeneralException(getString(R.string.error_keyNeedsMasterKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < keyEditors.getChildCount(); ++i) {
|
for (int i = 0; i < keyEditors.getChildCount(); ++i) {
|
||||||
|
@ -21,10 +21,11 @@ import org.spongycastle.openpgp.PGPPublicKey;
|
|||||||
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
||||||
import org.spongycastle.openpgp.PGPSecretKey;
|
import org.spongycastle.openpgp.PGPSecretKey;
|
||||||
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.Preferences;
|
import org.thialfihar.android.apg.Preferences;
|
||||||
|
import org.thialfihar.android.apg.helper.FileHelper;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.service.ApgHandler;
|
import org.thialfihar.android.apg.service.ApgHandler;
|
||||||
import org.thialfihar.android.apg.service.ApgService;
|
import org.thialfihar.android.apg.service.ApgService;
|
||||||
import org.thialfihar.android.apg.ui.dialog.DeleteFileDialogFragment;
|
import org.thialfihar.android.apg.ui.dialog.DeleteFileDialogFragment;
|
||||||
@ -33,7 +34,6 @@ import org.thialfihar.android.apg.ui.dialog.PassphraseDialogFragment;
|
|||||||
import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
|
import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
|
||||||
import org.thialfihar.android.apg.util.Choice;
|
import org.thialfihar.android.apg.util.Choice;
|
||||||
import org.thialfihar.android.apg.util.Compatibility;
|
import org.thialfihar.android.apg.util.Compatibility;
|
||||||
import org.thialfihar.android.apg.util.Utils;
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
|
||||||
import com.actionbarsherlock.app.ActionBar;
|
import com.actionbarsherlock.app.ActionBar;
|
||||||
@ -181,6 +181,18 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.encrypt);
|
setContentView(R.layout.encrypt);
|
||||||
|
|
||||||
|
// set actionbar without home button if called from another app
|
||||||
|
final ActionBar actionBar = getSupportActionBar();
|
||||||
|
Log.d(Constants.TAG, "calling package (only set when using startActivityForResult)="
|
||||||
|
+ getCallingPackage());
|
||||||
|
if (getCallingPackage() != null && getCallingPackage().equals(PGPHelper.PACKAGE_NAME)) {
|
||||||
|
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||||
|
actionBar.setHomeButtonEnabled(true);
|
||||||
|
} else {
|
||||||
|
actionBar.setDisplayHomeAsUpEnabled(false);
|
||||||
|
actionBar.setHomeButtonEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
mGenerateSignature = false;
|
mGenerateSignature = false;
|
||||||
|
|
||||||
mSource = (ViewFlipper) findViewById(R.id.source);
|
mSource = (ViewFlipper) findViewById(R.id.source);
|
||||||
@ -268,7 +280,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
mBrowse = (ImageButton) findViewById(R.id.btn_browse);
|
mBrowse = (ImageButton) findViewById(R.id.btn_browse);
|
||||||
mBrowse.setOnClickListener(new View.OnClickListener() {
|
mBrowse.setOnClickListener(new View.OnClickListener() {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Utils.openFile(EncryptActivity.this, mFilename.getText().toString(), "*/*",
|
FileHelper.openFile(EncryptActivity.this, mFilename.getText().toString(), "*/*",
|
||||||
Id.request.filename);
|
Id.request.filename);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -323,61 +335,49 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
});
|
});
|
||||||
|
|
||||||
mIntent = getIntent();
|
mIntent = getIntent();
|
||||||
if (Apg.Intent.ENCRYPT.equals(mIntent.getAction())
|
if (PGPHelper.Intent.ENCRYPT.equals(mIntent.getAction())
|
||||||
|| Apg.Intent.ENCRYPT_FILE.equals(mIntent.getAction())
|
|| PGPHelper.Intent.ENCRYPT_FILE.equals(mIntent.getAction())
|
||||||
|| Apg.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
|
|| PGPHelper.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
|
||||||
|| Apg.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
|
|| PGPHelper.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
|
||||||
mContentUri = mIntent.getData();
|
mContentUri = mIntent.getData();
|
||||||
Bundle extras = mIntent.getExtras();
|
Bundle extras = mIntent.getExtras();
|
||||||
if (extras == null) {
|
if (extras == null) {
|
||||||
extras = new Bundle();
|
extras = new Bundle();
|
||||||
}
|
}
|
||||||
|
|
||||||
// set actionbar without home button if called from another app
|
if (PGPHelper.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
|
||||||
final ActionBar actionBar = getSupportActionBar();
|
|| PGPHelper.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
|
||||||
Log.d(Constants.TAG, "calling package (only set when using startActivityForResult)="
|
|
||||||
+ getCallingPackage());
|
|
||||||
if (getCallingPackage() != null && getCallingPackage().equals(Apg.PACKAGE_NAME)) {
|
|
||||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
|
||||||
actionBar.setHomeButtonEnabled(true);
|
|
||||||
} else {
|
|
||||||
actionBar.setDisplayHomeAsUpEnabled(false);
|
|
||||||
actionBar.setHomeButtonEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Apg.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
|
|
||||||
|| Apg.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
|
|
||||||
mReturnResult = true;
|
mReturnResult = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Apg.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
|
if (PGPHelper.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
|
||||||
mGenerateSignature = true;
|
mGenerateSignature = true;
|
||||||
mOverrideAsciiArmour = true;
|
mOverrideAsciiArmour = true;
|
||||||
mAsciiArmourDemand = false;
|
mAsciiArmourDemand = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extras.containsKey(Apg.EXTRA_ASCII_ARMOUR)) {
|
if (extras.containsKey(PGPHelper.EXTRA_ASCII_ARMOUR)) {
|
||||||
mAsciiArmourDemand = extras.getBoolean(Apg.EXTRA_ASCII_ARMOUR, true);
|
mAsciiArmourDemand = extras.getBoolean(PGPHelper.EXTRA_ASCII_ARMOUR, true);
|
||||||
mOverrideAsciiArmour = true;
|
mOverrideAsciiArmour = true;
|
||||||
mAsciiArmour.setChecked(mAsciiArmourDemand);
|
mAsciiArmour.setChecked(mAsciiArmourDemand);
|
||||||
}
|
}
|
||||||
|
|
||||||
mData = extras.getByteArray(Apg.EXTRA_DATA);
|
mData = extras.getByteArray(PGPHelper.EXTRA_DATA);
|
||||||
String textData = null;
|
String textData = null;
|
||||||
if (mData == null) {
|
if (mData == null) {
|
||||||
textData = extras.getString(Apg.EXTRA_TEXT);
|
textData = extras.getString(PGPHelper.EXTRA_TEXT);
|
||||||
}
|
}
|
||||||
mSendTo = extras.getString(Apg.EXTRA_SEND_TO);
|
mSendTo = extras.getString(PGPHelper.EXTRA_SEND_TO);
|
||||||
mSubject = extras.getString(Apg.EXTRA_SUBJECT);
|
mSubject = extras.getString(PGPHelper.EXTRA_SUBJECT);
|
||||||
long signatureKeyId = extras.getLong(Apg.EXTRA_SIGNATURE_KEY_ID);
|
long signatureKeyId = extras.getLong(PGPHelper.EXTRA_SIGNATURE_KEY_ID);
|
||||||
long encryptionKeyIds[] = extras.getLongArray(Apg.EXTRA_ENCRYPTION_KEY_IDS);
|
long encryptionKeyIds[] = extras.getLongArray(PGPHelper.EXTRA_ENCRYPTION_KEY_IDS);
|
||||||
if (signatureKeyId != 0) {
|
if (signatureKeyId != 0) {
|
||||||
PGPSecretKeyRing keyRing = Apg.getSecretKeyRing(signatureKeyId);
|
PGPSecretKeyRing keyRing = PGPHelper.getSecretKeyRing(signatureKeyId);
|
||||||
PGPSecretKey masterKey = null;
|
PGPSecretKey masterKey = null;
|
||||||
if (keyRing != null) {
|
if (keyRing != null) {
|
||||||
masterKey = Apg.getMasterKey(keyRing);
|
masterKey = PGPHelper.getMasterKey(keyRing);
|
||||||
if (masterKey != null) {
|
if (masterKey != null) {
|
||||||
Vector<PGPSecretKey> signKeys = Apg.getUsableSigningKeys(keyRing);
|
Vector<PGPSecretKey> signKeys = PGPHelper.getUsableSigningKeys(keyRing);
|
||||||
if (signKeys.size() > 0) {
|
if (signKeys.size() > 0) {
|
||||||
setSecretKeyId(masterKey.getKeyID());
|
setSecretKeyId(masterKey.getKeyID());
|
||||||
}
|
}
|
||||||
@ -388,16 +388,16 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
if (encryptionKeyIds != null) {
|
if (encryptionKeyIds != null) {
|
||||||
Vector<Long> goodIds = new Vector<Long>();
|
Vector<Long> goodIds = new Vector<Long>();
|
||||||
for (int i = 0; i < encryptionKeyIds.length; ++i) {
|
for (int i = 0; i < encryptionKeyIds.length; ++i) {
|
||||||
PGPPublicKeyRing keyRing = Apg.getPublicKeyRing(encryptionKeyIds[i]);
|
PGPPublicKeyRing keyRing = PGPHelper.getPublicKeyRing(encryptionKeyIds[i]);
|
||||||
PGPPublicKey masterKey = null;
|
PGPPublicKey masterKey = null;
|
||||||
if (keyRing == null) {
|
if (keyRing == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
masterKey = Apg.getMasterKey(keyRing);
|
masterKey = PGPHelper.getMasterKey(keyRing);
|
||||||
if (masterKey == null) {
|
if (masterKey == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Vector<PGPPublicKey> encryptKeys = Apg.getUsableEncryptKeys(keyRing);
|
Vector<PGPPublicKey> encryptKeys = PGPHelper.getUsableEncryptKeys(keyRing);
|
||||||
if (encryptKeys.size() == 0) {
|
if (encryptKeys.size() == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -411,9 +411,9 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Apg.Intent.ENCRYPT.equals(mIntent.getAction())
|
if (PGPHelper.Intent.ENCRYPT.equals(mIntent.getAction())
|
||||||
|| Apg.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
|
|| PGPHelper.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())
|
||||||
|| Apg.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
|
|| PGPHelper.Intent.GENERATE_SIGNATURE.equals(mIntent.getAction())) {
|
||||||
if (textData != null) {
|
if (textData != null) {
|
||||||
mMessage.setText(textData);
|
mMessage.setText(textData);
|
||||||
}
|
}
|
||||||
@ -422,7 +422,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
while (mSource.getCurrentView().getId() != R.id.sourceMessage) {
|
while (mSource.getCurrentView().getId() != R.id.sourceMessage) {
|
||||||
mSource.showNext();
|
mSource.showNext();
|
||||||
}
|
}
|
||||||
} else if (Apg.Intent.ENCRYPT_FILE.equals(mIntent.getAction())) {
|
} else if (PGPHelper.Intent.ENCRYPT_FILE.equals(mIntent.getAction())) {
|
||||||
if ("file".equals(mIntent.getScheme())) {
|
if ("file".equals(mIntent.getScheme())) {
|
||||||
mInputFilename = Uri.decode(mIntent.getDataString().replace("file://", ""));
|
mInputFilename = Uri.decode(mIntent.getDataString().replace("file://", ""));
|
||||||
mFilename.setText(mInputFilename);
|
mFilename.setText(mInputFilename);
|
||||||
@ -651,7 +651,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getSecretKeyId() != 0 && Apg.getCachedPassPhrase(getSecretKeyId()) == null) {
|
if (getSecretKeyId() != 0 && PGPHelper.getCachedPassPhrase(getSecretKeyId()) == null) {
|
||||||
showPassphraseDialog();
|
showPassphraseDialog();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -659,7 +659,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mEncryptTarget == Id.target.file) {
|
if (mEncryptTarget == Id.target.file) {
|
||||||
askForOutputFilename();
|
showOutputFileDialog();
|
||||||
} else {
|
} else {
|
||||||
encryptStart();
|
encryptStart();
|
||||||
}
|
}
|
||||||
@ -676,7 +676,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
public void handleMessage(Message message) {
|
public void handleMessage(Message message) {
|
||||||
if (message.what == PassphraseDialogFragment.MESSAGE_OKAY) {
|
if (message.what == PassphraseDialogFragment.MESSAGE_OKAY) {
|
||||||
if (mEncryptTarget == Id.target.file) {
|
if (mEncryptTarget == Id.target.file) {
|
||||||
askForOutputFilename();
|
showOutputFileDialog();
|
||||||
} else {
|
} else {
|
||||||
encryptStart();
|
encryptStart();
|
||||||
}
|
}
|
||||||
@ -692,15 +692,15 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
messenger, mSecretKeyId);
|
messenger, mSecretKeyId);
|
||||||
|
|
||||||
passphraseDialog.show(getSupportFragmentManager(), "passphraseDialog");
|
passphraseDialog.show(getSupportFragmentManager(), "passphraseDialog");
|
||||||
} catch (Apg.GeneralException e) {
|
} catch (PGPHelper.GeneralException e) {
|
||||||
Log.d(Constants.TAG, "No passphrase for this secret key, encrypt directly!");
|
Log.d(Constants.TAG, "No passphrase for this secret key, encrypt directly!");
|
||||||
// send message to handler to start encryption directly
|
// send message to handler to start encryption directly
|
||||||
returnHandler.sendEmptyMessage(PassphraseDialogFragment.MESSAGE_OKAY);
|
returnHandler.sendEmptyMessage(PassphraseDialogFragment.MESSAGE_OKAY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void askForOutputFilename() {
|
private void showOutputFileDialog() {
|
||||||
// Message is received after passphrase is cached
|
// Message is received after file is selected
|
||||||
Handler returnHandler = new Handler() {
|
Handler returnHandler = new Handler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage(Message message) {
|
public void handleMessage(Message message) {
|
||||||
@ -721,7 +721,6 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
Id.request.output_filename);
|
Id.request.output_filename);
|
||||||
|
|
||||||
mFileDialog.show(getSupportFragmentManager(), "fileDialog");
|
mFileDialog.show(getSupportFragmentManager(), "fileDialog");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void encryptStart() {
|
private void encryptStart() {
|
||||||
@ -743,7 +742,6 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
if (passPhrase.length() == 0) {
|
if (passPhrase.length() == 0) {
|
||||||
passPhrase = null;
|
passPhrase = null;
|
||||||
}
|
}
|
||||||
// signatureKeyId = Id.key.symmetric;
|
|
||||||
|
|
||||||
data.putString(ApgService.SYMMETRIC_PASSPHRASE, passPhrase);
|
data.putString(ApgService.SYMMETRIC_PASSPHRASE, passPhrase);
|
||||||
} else {
|
} else {
|
||||||
@ -776,13 +774,13 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
intent.putExtra(ApgService.EXTRA_ACTION, ApgService.ACTION_ENCRYPT_SIGN_BYTES);
|
intent.putExtra(ApgService.EXTRA_ACTION, ApgService.ACTION_ENCRYPT_SIGN_BYTES);
|
||||||
|
|
||||||
if (mData != null) {
|
if (mData != null) {
|
||||||
data.putByteArray(ApgService.BYTES, mData);
|
data.putByteArray(ApgService.MESSAGE_BYTES, mData);
|
||||||
} else {
|
} else {
|
||||||
String message = mMessage.getText().toString();
|
String message = mMessage.getText().toString();
|
||||||
if (signOnly && !mReturnResult) {
|
if (signOnly && !mReturnResult) {
|
||||||
fixBadCharactersForGmail(message);
|
fixBadCharactersForGmail(message);
|
||||||
}
|
}
|
||||||
data.putByteArray(ApgService.BYTES, message.getBytes());
|
data.putByteArray(ApgService.MESSAGE_BYTES, message.getBytes());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -919,11 +917,11 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
} else {
|
} else {
|
||||||
String uid = getResources().getString(R.string.unknownUserId);
|
String uid = getResources().getString(R.string.unknownUserId);
|
||||||
String uidExtra = "";
|
String uidExtra = "";
|
||||||
PGPSecretKeyRing keyRing = Apg.getSecretKeyRing(getSecretKeyId());
|
PGPSecretKeyRing keyRing = PGPHelper.getSecretKeyRing(getSecretKeyId());
|
||||||
if (keyRing != null) {
|
if (keyRing != null) {
|
||||||
PGPSecretKey key = Apg.getMasterKey(keyRing);
|
PGPSecretKey key = PGPHelper.getMasterKey(keyRing);
|
||||||
if (key != null) {
|
if (key != null) {
|
||||||
String userId = Apg.getMainUserIdSafe(this, key);
|
String userId = PGPHelper.getMainUserIdSafe(this, key);
|
||||||
String chunks[] = userId.split(" <", 2);
|
String chunks[] = userId.split(" <", 2);
|
||||||
uid = chunks[0];
|
uid = chunks[0];
|
||||||
if (chunks.length > 1) {
|
if (chunks.length > 1) {
|
||||||
@ -957,7 +955,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
initialKeyIds[i] = keyIds.get(i);
|
initialKeyIds[i] = keyIds.get(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
intent.putExtra(Apg.EXTRA_SELECTION, initialKeyIds);
|
intent.putExtra(PGPHelper.EXTRA_SELECTION, initialKeyIds);
|
||||||
startActivityForResult(intent, Id.request.public_keys);
|
startActivityForResult(intent, Id.request.public_keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1000,7 +998,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
case Id.request.public_keys: {
|
case Id.request.public_keys: {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
Bundle bundle = data.getExtras();
|
Bundle bundle = data.getExtras();
|
||||||
mEncryptionKeyIds = bundle.getLongArray(Apg.EXTRA_SELECTION);
|
mEncryptionKeyIds = bundle.getLongArray(PGPHelper.EXTRA_SELECTION);
|
||||||
}
|
}
|
||||||
updateView();
|
updateView();
|
||||||
break;
|
break;
|
||||||
@ -1009,7 +1007,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
|
|||||||
case Id.request.secret_keys: {
|
case Id.request.secret_keys: {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
Bundle bundle = data.getExtras();
|
Bundle bundle = data.getExtras();
|
||||||
setSecretKeyId(bundle.getLong(Apg.EXTRA_KEY_ID));
|
setSecretKeyId(bundle.getLong(PGPHelper.EXTRA_KEY_ID));
|
||||||
} else {
|
} else {
|
||||||
setSecretKeyId(Id.key.none);
|
setSecretKeyId(Id.key.none);
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,8 @@ import java.io.InputStream;
|
|||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.util.Choice;
|
import org.thialfihar.android.apg.util.Choice;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -83,7 +83,7 @@ public class GeneralActivity extends BaseActivity {
|
|||||||
|
|
||||||
int contentType = Id.content.unknown;
|
int contentType = Id.content.unknown;
|
||||||
try {
|
try {
|
||||||
contentType = Apg.getStreamContent(this, inStream);
|
contentType = PGPHelper.getStreamContent(this, inStream);
|
||||||
inStream.close();
|
inStream.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// just means that there's no PGP data in there
|
// just means that there's no PGP data in there
|
||||||
@ -134,10 +134,10 @@ public class GeneralActivity extends BaseActivity {
|
|||||||
case Id.choice.action.encrypt: {
|
case Id.choice.action.encrypt: {
|
||||||
intent.setClass(this, EncryptActivity.class);
|
intent.setClass(this, EncryptActivity.class);
|
||||||
if (mDataString != null) {
|
if (mDataString != null) {
|
||||||
intent.setAction(Apg.Intent.ENCRYPT);
|
intent.setAction(PGPHelper.Intent.ENCRYPT);
|
||||||
intent.putExtra(Apg.EXTRA_TEXT, mDataString);
|
intent.putExtra(PGPHelper.EXTRA_TEXT, mDataString);
|
||||||
} else if (mDataUri != null) {
|
} else if (mDataUri != null) {
|
||||||
intent.setAction(Apg.Intent.ENCRYPT_FILE);
|
intent.setAction(PGPHelper.Intent.ENCRYPT_FILE);
|
||||||
intent.setDataAndType(mDataUri, mIntent.getType());
|
intent.setDataAndType(mDataUri, mIntent.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,10 +147,10 @@ public class GeneralActivity extends BaseActivity {
|
|||||||
case Id.choice.action.decrypt: {
|
case Id.choice.action.decrypt: {
|
||||||
intent.setClass(this, DecryptActivity.class);
|
intent.setClass(this, DecryptActivity.class);
|
||||||
if (mDataString != null) {
|
if (mDataString != null) {
|
||||||
intent.setAction(Apg.Intent.DECRYPT);
|
intent.setAction(PGPHelper.Intent.DECRYPT);
|
||||||
intent.putExtra(Apg.EXTRA_TEXT, mDataString);
|
intent.putExtra(PGPHelper.EXTRA_TEXT, mDataString);
|
||||||
} else if (mDataUri != null) {
|
} else if (mDataUri != null) {
|
||||||
intent.setAction(Apg.Intent.DECRYPT_FILE);
|
intent.setAction(PGPHelper.Intent.DECRYPT_FILE);
|
||||||
intent.setDataAndType(mDataUri, mIntent.getType());
|
intent.setDataAndType(mDataUri, mIntent.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,9 +159,9 @@ public class GeneralActivity extends BaseActivity {
|
|||||||
|
|
||||||
case Id.choice.action.import_public: {
|
case Id.choice.action.import_public: {
|
||||||
intent.setClass(this, PublicKeyListActivity.class);
|
intent.setClass(this, PublicKeyListActivity.class);
|
||||||
intent.setAction(Apg.Intent.IMPORT);
|
intent.setAction(PGPHelper.Intent.IMPORT);
|
||||||
if (mDataString != null) {
|
if (mDataString != null) {
|
||||||
intent.putExtra(Apg.EXTRA_TEXT, mDataString);
|
intent.putExtra(PGPHelper.EXTRA_TEXT, mDataString);
|
||||||
} else if (mDataUri != null) {
|
} else if (mDataUri != null) {
|
||||||
intent.setDataAndType(mDataUri, mIntent.getType());
|
intent.setDataAndType(mDataUri, mIntent.getType());
|
||||||
}
|
}
|
||||||
@ -170,9 +170,9 @@ public class GeneralActivity extends BaseActivity {
|
|||||||
|
|
||||||
case Id.choice.action.import_secret: {
|
case Id.choice.action.import_secret: {
|
||||||
intent.setClass(this, SecretKeyListActivity.class);
|
intent.setClass(this, SecretKeyListActivity.class);
|
||||||
intent.setAction(Apg.Intent.IMPORT);
|
intent.setAction(PGPHelper.Intent.IMPORT);
|
||||||
if (mDataString != null) {
|
if (mDataString != null) {
|
||||||
intent.putExtra(Apg.EXTRA_TEXT, mDataString);
|
intent.putExtra(PGPHelper.EXTRA_TEXT, mDataString);
|
||||||
} else if (mDataUri != null) {
|
} else if (mDataUri != null) {
|
||||||
intent.setDataAndType(mDataUri, mIntent.getType());
|
intent.setDataAndType(mDataUri, mIntent.getType());
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ package org.thialfihar.android.apg.ui;
|
|||||||
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.util.Utils;
|
import org.thialfihar.android.apg.helper.OtherHelper;
|
||||||
|
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@ -52,7 +52,7 @@ public class HelpFragmentAbout extends SherlockFragment {
|
|||||||
View view = inflater.inflate(R.layout.help_fragment_about, container, false);
|
View view = inflater.inflate(R.layout.help_fragment_about, container, false);
|
||||||
|
|
||||||
// load html from html file from /res/raw
|
// load html from html file from /res/raw
|
||||||
String aboutText = Utils.readContentFromResource(this.getActivity(), R.raw.help_about);
|
String aboutText = OtherHelper.readContentFromResource(this.getActivity(), R.raw.help_about);
|
||||||
|
|
||||||
TextView versionText = (TextView) view.findViewById(R.id.help_about_version);
|
TextView versionText = (TextView) view.findViewById(R.id.help_about_version);
|
||||||
versionText.setText(getString(R.string.help_about_version) + " " + getVersion());
|
versionText.setText(getString(R.string.help_about_version) + " " + getVersion());
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.thialfihar.android.apg.ui;
|
package org.thialfihar.android.apg.ui;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.util.Utils;
|
import org.thialfihar.android.apg.helper.OtherHelper;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -68,7 +68,7 @@ public class HelpFragmentHtml extends SherlockFragment {
|
|||||||
htmlFile = getArguments().getInt(ARG_HTML_FILE);
|
htmlFile = getArguments().getInt(ARG_HTML_FILE);
|
||||||
|
|
||||||
// load html from html file from /res/raw
|
// load html from html file from /res/raw
|
||||||
String helpText = Utils.readContentFromResource(this.getActivity(), htmlFile);
|
String helpText = OtherHelper.readContentFromResource(this.getActivity(), htmlFile);
|
||||||
|
|
||||||
mActivity = getActivity();
|
mActivity = getActivity();
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2011 Senecaso
|
||||||
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
@ -19,11 +21,11 @@ import java.io.IOException;
|
|||||||
|
|
||||||
import org.spongycastle.openpgp.PGPKeyRing;
|
import org.spongycastle.openpgp.PGPKeyRing;
|
||||||
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.HkpKeyServer;
|
import org.thialfihar.android.apg.HkpKeyServer;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.KeyServer.QueryException;
|
import org.thialfihar.android.apg.KeyServer.QueryException;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -60,33 +62,33 @@ public class ImportFromQRCodeActivity extends BaseActivity {
|
|||||||
HkpKeyServer server = new HkpKeyServer(mPreferences.getKeyServers()[0]); // TODO: there should be only 1
|
HkpKeyServer server = new HkpKeyServer(mPreferences.getKeyServers()[0]); // TODO: there should be only 1
|
||||||
String encodedKey = server.get(keyId);
|
String encodedKey = server.get(keyId);
|
||||||
|
|
||||||
PGPKeyRing keyring = Apg.decodeKeyRing(new ByteArrayInputStream(encodedKey.getBytes()));
|
PGPKeyRing keyring = PGPHelper.decodeKeyRing(new ByteArrayInputStream(encodedKey.getBytes()));
|
||||||
if (keyring != null && keyring instanceof PGPPublicKeyRing) {
|
if (keyring != null && keyring instanceof PGPPublicKeyRing) {
|
||||||
PGPPublicKeyRing publicKeyRing = (PGPPublicKeyRing) keyring;
|
PGPPublicKeyRing publicKeyRing = (PGPPublicKeyRing) keyring;
|
||||||
|
|
||||||
// make sure the fingerprints match before we cache this thing
|
// make sure the fingerprints match before we cache this thing
|
||||||
String actualFingerprint = Apg.convertToHex(publicKeyRing.getPublicKey().getFingerprint());
|
String actualFingerprint = PGPHelper.convertToHex(publicKeyRing.getPublicKey().getFingerprint());
|
||||||
if (expectedFingerprint.equals(actualFingerprint)) {
|
if (expectedFingerprint.equals(actualFingerprint)) {
|
||||||
// store the signed key in our local cache
|
// store the signed key in our local cache
|
||||||
int retval = Apg.storeKeyRingInCache(publicKeyRing);
|
int retval = PGPHelper.storeKeyRingInCache(publicKeyRing);
|
||||||
if (retval != Id.return_value.ok && retval != Id.return_value.updated) {
|
if (retval != Id.return_value.ok && retval != Id.return_value.updated) {
|
||||||
status.putString(Apg.EXTRA_ERROR, "Failed to store signed key in local cache");
|
status.putString(PGPHelper.EXTRA_ERROR, "Failed to store signed key in local cache");
|
||||||
} else {
|
} else {
|
||||||
Intent intent = new Intent(ImportFromQRCodeActivity.this, SignKeyActivity.class);
|
Intent intent = new Intent(ImportFromQRCodeActivity.this, SignKeyActivity.class);
|
||||||
intent.putExtra(Apg.EXTRA_KEY_ID, keyId);
|
intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyId);
|
||||||
startActivityForResult(intent, Id.request.sign_key);
|
startActivityForResult(intent, Id.request.sign_key);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
status.putString(Apg.EXTRA_ERROR, "Scanned fingerprint does NOT match the fingerprint of the received key. You shouldnt trust this key.");
|
status.putString(PGPHelper.EXTRA_ERROR, "Scanned fingerprint does NOT match the fingerprint of the received key. You shouldnt trust this key.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (QueryException e) {
|
} catch (QueryException e) {
|
||||||
Log.e(TAG, "Failed to query KeyServer", e);
|
Log.e(TAG, "Failed to query KeyServer", e);
|
||||||
status.putString(Apg.EXTRA_ERROR, "Failed to query KeyServer");
|
status.putString(PGPHelper.EXTRA_ERROR, "Failed to query KeyServer");
|
||||||
status.putInt(Constants.extras.STATUS, Id.message.done);
|
status.putInt(Constants.extras.STATUS, Id.message.done);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "Failed to query KeyServer", e);
|
Log.e(TAG, "Failed to query KeyServer", e);
|
||||||
status.putString(Apg.EXTRA_ERROR, "Failed to query KeyServer");
|
status.putString(PGPHelper.EXTRA_ERROR, "Failed to query KeyServer");
|
||||||
status.putInt(Constants.extras.STATUS, Id.message.done);
|
status.putInt(Constants.extras.STATUS, Id.message.done);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -140,7 +142,7 @@ public class ImportFromQRCodeActivity extends BaseActivity {
|
|||||||
super.doneCallback(msg);
|
super.doneCallback(msg);
|
||||||
|
|
||||||
Bundle data = msg.getData();
|
Bundle data = msg.getData();
|
||||||
String error = data.getString(Apg.EXTRA_ERROR);
|
String error = data.getString(PGPHelper.EXTRA_ERROR);
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
|
@ -19,14 +19,14 @@ package org.thialfihar.android.apg.ui;
|
|||||||
import org.spongycastle.openpgp.PGPException;
|
import org.spongycastle.openpgp.PGPException;
|
||||||
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
||||||
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.FileDialog;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.InputData;
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.provider.KeyRings;
|
import org.thialfihar.android.apg.provider.KeyRings;
|
||||||
import org.thialfihar.android.apg.provider.Keys;
|
import org.thialfihar.android.apg.provider.Keys;
|
||||||
import org.thialfihar.android.apg.provider.UserIds;
|
import org.thialfihar.android.apg.provider.UserIds;
|
||||||
|
import org.thialfihar.android.apg.ui.dialog.FileDialogFragment;
|
||||||
|
import org.thialfihar.android.apg.util.InputData;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
|
||||||
import com.actionbarsherlock.view.MenuItem;
|
import com.actionbarsherlock.view.MenuItem;
|
||||||
@ -42,7 +42,10 @@ import android.database.sqlite.SQLiteDatabase;
|
|||||||
import android.database.sqlite.SQLiteQueryBuilder;
|
import android.database.sqlite.SQLiteQueryBuilder;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
import android.os.Messenger;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
@ -83,6 +86,8 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
|
|
||||||
protected int mKeyType = Id.type.public_key;
|
protected int mKeyType = Id.type.public_key;
|
||||||
|
|
||||||
|
FileDialogFragment mFileDialog;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -134,11 +139,11 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
mListAdapter = new KeyListAdapter(this, searchString);
|
mListAdapter = new KeyListAdapter(this, searchString);
|
||||||
mList.setAdapter(mListAdapter);
|
mList.setAdapter(mListAdapter);
|
||||||
|
|
||||||
if (Apg.Intent.IMPORT.equals(intent.getAction())) {
|
if (PGPHelper.Intent.IMPORT.equals(intent.getAction())) {
|
||||||
if ("file".equals(intent.getScheme()) && intent.getDataString() != null) {
|
if ("file".equals(intent.getScheme()) && intent.getDataString() != null) {
|
||||||
mImportFilename = Uri.decode(intent.getDataString().replace("file://", ""));
|
mImportFilename = Uri.decode(intent.getDataString().replace("file://", ""));
|
||||||
} else {
|
} else {
|
||||||
mImportData = intent.getStringExtra(Apg.EXTRA_TEXT);
|
mImportData = intent.getStringExtra(PGPHelper.EXTRA_TEXT);
|
||||||
}
|
}
|
||||||
importKeys();
|
importKeys();
|
||||||
}
|
}
|
||||||
@ -148,12 +153,14 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case Id.menu.option.import_keys: {
|
case Id.menu.option.import_keys: {
|
||||||
showDialog(Id.dialog.import_keys);
|
// showDialog(Id.dialog.import_keys);
|
||||||
|
showImportKeysDialog();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
case Id.menu.option.export_keys: {
|
case Id.menu.option.export_keys: {
|
||||||
showDialog(Id.dialog.export_keys);
|
// showDialog(Id.dialog.export_keys);
|
||||||
|
showExportKeysDialog(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,6 +170,59 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showImportKeysDialog() {
|
||||||
|
// Message is received after file is selected
|
||||||
|
Handler returnHandler = new Handler() {
|
||||||
|
@Override
|
||||||
|
public void handleMessage(Message message) {
|
||||||
|
if (message.what == FileDialogFragment.MESSAGE_OKAY) {
|
||||||
|
Bundle data = message.getData();
|
||||||
|
mImportFilename = data.getString(FileDialogFragment.MESSAGE_DATA_FILENAME);
|
||||||
|
|
||||||
|
mDeleteAfterImport = data.getBoolean(FileDialogFragment.MESSAGE_DATA_CHECKED);
|
||||||
|
importKeys();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create a new Messenger for the communication back
|
||||||
|
Messenger messenger = new Messenger(returnHandler);
|
||||||
|
|
||||||
|
mFileDialog = FileDialogFragment.newInstance(messenger,
|
||||||
|
getString(R.string.title_importKeys), getString(R.string.specifyFileToImportFrom),
|
||||||
|
mImportFilename, null, Id.request.filename);
|
||||||
|
|
||||||
|
mFileDialog.show(getSupportFragmentManager(), "fileDialog");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showExportKeysDialog(boolean singleKeyExport) {
|
||||||
|
String title = (singleKeyExport ? getString(R.string.title_exportKey)
|
||||||
|
: getString(R.string.title_exportKeys));
|
||||||
|
String message = getString(mKeyType == Id.type.public_key ? R.string.specifyFileToExportTo
|
||||||
|
: R.string.specifyFileToExportSecretKeysTo);
|
||||||
|
|
||||||
|
// Message is received after file is selected
|
||||||
|
Handler returnHandler = new Handler() {
|
||||||
|
@Override
|
||||||
|
public void handleMessage(Message message) {
|
||||||
|
if (message.what == FileDialogFragment.MESSAGE_OKAY) {
|
||||||
|
Bundle data = message.getData();
|
||||||
|
mExportFilename = data.getString(FileDialogFragment.MESSAGE_DATA_FILENAME);
|
||||||
|
|
||||||
|
exportKeys();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create a new Messenger for the communication back
|
||||||
|
Messenger messenger = new Messenger(returnHandler);
|
||||||
|
|
||||||
|
mFileDialog = FileDialogFragment.newInstance(messenger, title, message, mExportFilename,
|
||||||
|
null, Id.request.filename);
|
||||||
|
|
||||||
|
mFileDialog.show(getSupportFragmentManager(), "fileDialog");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onContextItemSelected(android.view.MenuItem menuItem) {
|
public boolean onContextItemSelected(android.view.MenuItem menuItem) {
|
||||||
ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo();
|
ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo();
|
||||||
@ -176,7 +236,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
switch (menuItem.getItemId()) {
|
switch (menuItem.getItemId()) {
|
||||||
case Id.menu.export: {
|
case Id.menu.export: {
|
||||||
mSelectedItem = groupPosition;
|
mSelectedItem = groupPosition;
|
||||||
showDialog(Id.dialog.export_key);
|
showExportKeysDialog(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,7 +254,6 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Dialog onCreateDialog(int id) {
|
protected Dialog onCreateDialog(int id) {
|
||||||
boolean singleKeyExport = false;
|
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case Id.dialog.delete_key: {
|
case Id.dialog.delete_key: {
|
||||||
@ -202,14 +261,14 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
mSelectedItem = -1;
|
mSelectedItem = -1;
|
||||||
// TODO: better way to do this?
|
// TODO: better way to do this?
|
||||||
String userId = "<unknown>";
|
String userId = "<unknown>";
|
||||||
Object keyRing = Apg.getKeyRing(keyRingId);
|
Object keyRing = PGPHelper.getKeyRing(keyRingId);
|
||||||
if (keyRing != null) {
|
if (keyRing != null) {
|
||||||
if (keyRing instanceof PGPPublicKeyRing) {
|
if (keyRing instanceof PGPPublicKeyRing) {
|
||||||
userId = Apg.getMainUserIdSafe(this,
|
userId = PGPHelper.getMainUserIdSafe(this,
|
||||||
Apg.getMasterKey((PGPPublicKeyRing) keyRing));
|
PGPHelper.getMasterKey((PGPPublicKeyRing) keyRing));
|
||||||
} else {
|
} else {
|
||||||
userId = Apg.getMainUserIdSafe(this,
|
userId = PGPHelper.getMainUserIdSafe(this,
|
||||||
Apg.getMasterKey((PGPSecretKeyRing) keyRing));
|
PGPHelper.getMasterKey((PGPSecretKeyRing) keyRing));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,54 +293,6 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
return builder.create();
|
return builder.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
case Id.dialog.import_keys: {
|
|
||||||
return FileDialog.build(this, getString(R.string.title_importKeys),
|
|
||||||
getString(R.string.specifyFileToImportFrom), mImportFilename,
|
|
||||||
new FileDialog.OnClickListener() {
|
|
||||||
public void onOkClick(String filename, boolean checked) {
|
|
||||||
removeDialog(Id.dialog.import_keys);
|
|
||||||
mDeleteAfterImport = checked;
|
|
||||||
mImportFilename = filename;
|
|
||||||
importKeys();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCancelClick() {
|
|
||||||
removeDialog(Id.dialog.import_keys);
|
|
||||||
}
|
|
||||||
}, getString(R.string.filemanager_titleOpen),
|
|
||||||
getString(R.string.filemanager_btnOpen),
|
|
||||||
getString(R.string.label_deleteAfterImport), Id.request.filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
case Id.dialog.export_key: {
|
|
||||||
singleKeyExport = true;
|
|
||||||
// break intentionally omitted, to use the Id.dialog.export_keys dialog
|
|
||||||
}
|
|
||||||
|
|
||||||
case Id.dialog.export_keys: {
|
|
||||||
String title = (singleKeyExport ? getString(R.string.title_exportKey)
|
|
||||||
: getString(R.string.title_exportKeys));
|
|
||||||
|
|
||||||
final int thisDialogId = (singleKeyExport ? Id.dialog.export_key
|
|
||||||
: Id.dialog.export_keys);
|
|
||||||
|
|
||||||
return FileDialog.build(this, title,
|
|
||||||
getString(mKeyType == Id.type.public_key ? R.string.specifyFileToExportTo
|
|
||||||
: R.string.specifyFileToExportSecretKeysTo), mExportFilename,
|
|
||||||
new FileDialog.OnClickListener() {
|
|
||||||
public void onOkClick(String filename, boolean checked) {
|
|
||||||
removeDialog(thisDialogId);
|
|
||||||
mExportFilename = filename;
|
|
||||||
exportKeys();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCancelClick() {
|
|
||||||
removeDialog(thisDialogId);
|
|
||||||
}
|
|
||||||
}, getString(R.string.filemanager_titleSave),
|
|
||||||
getString(R.string.filemanager_btnSave), null, Id.request.filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
return super.onCreateDialog(id);
|
return super.onCreateDialog(id);
|
||||||
}
|
}
|
||||||
@ -325,12 +336,12 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mTask == Id.task.import_keys) {
|
if (mTask == Id.task.import_keys) {
|
||||||
data = Apg.importKeyRings(this, mKeyType, new InputData(importInputStream, size),
|
data = PGPHelper.importKeyRings(this, mKeyType, new InputData(importInputStream,
|
||||||
this);
|
size), this);
|
||||||
} else {
|
} else {
|
||||||
Vector<Integer> keyRingIds = new Vector<Integer>();
|
Vector<Integer> keyRingIds = new Vector<Integer>();
|
||||||
if (mSelectedItem == -1) {
|
if (mSelectedItem == -1) {
|
||||||
keyRingIds = Apg
|
keyRingIds = PGPHelper
|
||||||
.getKeyRingIds(mKeyType == Id.type.public_key ? Id.database.type_public
|
.getKeyRingIds(mKeyType == Id.type.public_key ? Id.database.type_public
|
||||||
: Id.database.type_secret);
|
: Id.database.type_secret);
|
||||||
} else {
|
} else {
|
||||||
@ -338,7 +349,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
keyRingIds.add(keyRingId);
|
keyRingIds.add(keyRingId);
|
||||||
mSelectedItem = -1;
|
mSelectedItem = -1;
|
||||||
}
|
}
|
||||||
data = Apg.exportKeyRings(this, keyRingIds, exportOutputStream, this);
|
data = PGPHelper.exportKeyRings(this, keyRingIds, exportOutputStream, this);
|
||||||
}
|
}
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
error = getString(R.string.error_fileNotFound);
|
error = getString(R.string.error_fileNotFound);
|
||||||
@ -346,7 +357,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
error = "" + e;
|
error = "" + e;
|
||||||
} catch (PGPException e) {
|
} catch (PGPException e) {
|
||||||
error = "" + e;
|
error = "" + e;
|
||||||
} catch (Apg.GeneralException e) {
|
} catch (PGPHelper.GeneralException e) {
|
||||||
error = "" + e;
|
error = "" + e;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,7 +370,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
data.putString(Apg.EXTRA_ERROR, error);
|
data.putString(PGPHelper.EXTRA_ERROR, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.setData(data);
|
msg.setData(data);
|
||||||
@ -367,7 +378,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void deleteKey(int keyRingId) {
|
protected void deleteKey(int keyRingId) {
|
||||||
Apg.deleteKey(keyRingId);
|
PGPHelper.deleteKey(keyRingId);
|
||||||
refreshList();
|
refreshList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -387,7 +398,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
case Id.message.import_done: {
|
case Id.message.import_done: {
|
||||||
removeDialog(Id.dialog.importing);
|
removeDialog(Id.dialog.importing);
|
||||||
|
|
||||||
String error = data.getString(Apg.EXTRA_ERROR);
|
String error = data.getString(PGPHelper.EXTRA_ERROR);
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
Toast.makeText(KeyListActivity.this, getString(R.string.errorMessage, error),
|
Toast.makeText(KeyListActivity.this, getString(R.string.errorMessage, error),
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
@ -434,7 +445,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
case Id.message.export_done: {
|
case Id.message.export_done: {
|
||||||
removeDialog(Id.dialog.exporting);
|
removeDialog(Id.dialog.exporting);
|
||||||
|
|
||||||
String error = data.getString(Apg.EXTRA_ERROR);
|
String error = data.getString(PGPHelper.EXTRA_ERROR);
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
Toast.makeText(KeyListActivity.this, getString(R.string.errorMessage, error),
|
Toast.makeText(KeyListActivity.this, getString(R.string.errorMessage, error),
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
@ -508,7 +519,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
mSearchString = searchString;
|
mSearchString = searchString;
|
||||||
|
|
||||||
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
mDatabase = Apg.getDatabase().db();
|
mDatabase = PGPHelper.getDatabase().db();
|
||||||
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
|
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
|
||||||
qb.setTables(KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " + "("
|
qb.setTables(KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " + "("
|
||||||
+ KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + Keys.TABLE_NAME + "."
|
+ KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + Keys.TABLE_NAME + "."
|
||||||
@ -600,7 +611,8 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
c.close();
|
c.close();
|
||||||
|
|
||||||
if (masterKeyId != -1) {
|
if (masterKeyId != -1) {
|
||||||
children.insertElementAt(new KeyChild(Apg.getFingerPrint(fingerPrintId), true), 0);
|
children.insertElementAt(
|
||||||
|
new KeyChild(PGPHelper.getFingerPrint(fingerPrintId), true), 0);
|
||||||
c = mDatabase.query(UserIds.TABLE_NAME, new String[] { UserIds.USER_ID, // 0
|
c = mDatabase.query(UserIds.TABLE_NAME, new String[] { UserIds.USER_ID, // 0
|
||||||
}, UserIds.KEY_ID + " = ? AND " + UserIds.RANK + " > 0", new String[] { ""
|
}, UserIds.KEY_ID + " = ? AND " + UserIds.RANK + " > 0", new String[] { ""
|
||||||
+ masterKeyId }, null, null, UserIds.RANK + " ASC");
|
+ masterKeyId }, null, null, UserIds.RANK + " ASC");
|
||||||
@ -703,10 +715,10 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TextView keyId = (TextView) view.findViewById(R.id.keyId);
|
TextView keyId = (TextView) view.findViewById(R.id.keyId);
|
||||||
String keyIdStr = Apg.getSmallFingerPrint(child.keyId);
|
String keyIdStr = PGPHelper.getSmallFingerPrint(child.keyId);
|
||||||
keyId.setText(keyIdStr);
|
keyId.setText(keyIdStr);
|
||||||
TextView keyDetails = (TextView) view.findViewById(R.id.keyDetails);
|
TextView keyDetails = (TextView) view.findViewById(R.id.keyDetails);
|
||||||
String algorithmStr = Apg.getAlgorithmInfo(child.algorithm, child.keySize);
|
String algorithmStr = PGPHelper.getAlgorithmInfo(child.algorithm, child.keySize);
|
||||||
keyDetails.setText("(" + algorithmStr + ")");
|
keyDetails.setText("(" + algorithmStr + ")");
|
||||||
|
|
||||||
ImageView encryptIcon = (ImageView) view.findViewById(R.id.ic_encryptKey);
|
ImageView encryptIcon = (ImageView) view.findViewById(R.id.ic_encryptKey);
|
||||||
@ -745,16 +757,13 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
case Id.request.filename: {
|
case Id.request.filename: {
|
||||||
if (resultCode == RESULT_OK && data != null) {
|
if (resultCode == RESULT_OK && data != null) {
|
||||||
String filename = data.getDataString();
|
try {
|
||||||
if (filename != null) {
|
String path = data.getData().getPath();
|
||||||
// Get rid of URI prefix:
|
Log.d(Constants.TAG, "path=" + path);
|
||||||
if (filename.startsWith("file://")) {
|
|
||||||
filename = filename.substring(7);
|
|
||||||
}
|
|
||||||
// replace %20 and so on
|
|
||||||
filename = Uri.decode(filename);
|
|
||||||
|
|
||||||
FileDialog.setFilename(filename);
|
mFileDialog.setFilename(path);
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
Log.e(Constants.TAG, "Nullpointer while retrieving path!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2011 Senecaso
|
||||||
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
@ -16,11 +18,11 @@ package org.thialfihar.android.apg.ui;
|
|||||||
|
|
||||||
import org.spongycastle.openpgp.PGPKeyRing;
|
import org.spongycastle.openpgp.PGPKeyRing;
|
||||||
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.HkpKeyServer;
|
import org.thialfihar.android.apg.HkpKeyServer;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
|
||||||
import com.actionbarsherlock.view.MenuItem;
|
import com.actionbarsherlock.view.MenuItem;
|
||||||
|
|
||||||
@ -49,7 +51,10 @@ public class KeyServerExportActivity extends BaseActivity {
|
|||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
|
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
startActivity(new Intent(this, PublicKeyListActivity.class));
|
// app icon in Action Bar clicked; go home
|
||||||
|
Intent intent = new Intent(this, PublicKeyListActivity.class);
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -94,11 +99,11 @@ public class KeyServerExportActivity extends BaseActivity {
|
|||||||
|
|
||||||
HkpKeyServer server = new HkpKeyServer((String) keyServer.getSelectedItem());
|
HkpKeyServer server = new HkpKeyServer((String) keyServer.getSelectedItem());
|
||||||
|
|
||||||
int keyRingId = getIntent().getIntExtra(Apg.EXTRA_KEY_ID, -1);
|
int keyRingId = getIntent().getIntExtra(PGPHelper.EXTRA_KEY_ID, -1);
|
||||||
|
|
||||||
PGPKeyRing keyring = Apg.getKeyRing(keyRingId);
|
PGPKeyRing keyring = PGPHelper.getKeyRing(keyRingId);
|
||||||
if (keyring != null && keyring instanceof PGPPublicKeyRing) {
|
if (keyring != null && keyring instanceof PGPPublicKeyRing) {
|
||||||
boolean uploaded = Apg.uploadKeyRingToServer(server, (PGPPublicKeyRing) keyring);
|
boolean uploaded = PGPHelper.uploadKeyRingToServer(server, (PGPPublicKeyRing) keyring);
|
||||||
if (!uploaded) {
|
if (!uploaded) {
|
||||||
error = "Unable to export key to selected server";
|
error = "Unable to export key to selected server";
|
||||||
}
|
}
|
||||||
@ -107,7 +112,7 @@ public class KeyServerExportActivity extends BaseActivity {
|
|||||||
data.putInt(Constants.extras.STATUS, Id.message.export_done);
|
data.putInt(Constants.extras.STATUS, Id.message.export_done);
|
||||||
|
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
data.putString(Apg.EXTRA_ERROR, error);
|
data.putString(PGPHelper.EXTRA_ERROR, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.setData(data);
|
msg.setData(data);
|
||||||
@ -119,7 +124,7 @@ public class KeyServerExportActivity extends BaseActivity {
|
|||||||
super.doneCallback(msg);
|
super.doneCallback(msg);
|
||||||
|
|
||||||
Bundle data = msg.getData();
|
Bundle data = msg.getData();
|
||||||
String error = data.getString(Apg.EXTRA_ERROR);
|
String error = data.getString(PGPHelper.EXTRA_ERROR);
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
|
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
|
||||||
.show();
|
.show();
|
||||||
|
@ -18,7 +18,6 @@ import java.util.List;
|
|||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.HkpKeyServer;
|
import org.thialfihar.android.apg.HkpKeyServer;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
@ -26,6 +25,7 @@ import org.thialfihar.android.apg.KeyServer.InsufficientQuery;
|
|||||||
import org.thialfihar.android.apg.KeyServer.KeyInfo;
|
import org.thialfihar.android.apg.KeyServer.KeyInfo;
|
||||||
import org.thialfihar.android.apg.KeyServer.QueryException;
|
import org.thialfihar.android.apg.KeyServer.QueryException;
|
||||||
import org.thialfihar.android.apg.KeyServer.TooManyResponses;
|
import org.thialfihar.android.apg.KeyServer.TooManyResponses;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
|
||||||
import com.actionbarsherlock.view.MenuItem;
|
import com.actionbarsherlock.view.MenuItem;
|
||||||
|
|
||||||
@ -71,7 +71,10 @@ public class KeyServerQueryActivity extends BaseActivity {
|
|||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
|
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
startActivity(new Intent(this, PublicKeyListActivity.class));
|
// app icon in Action Bar clicked; go home
|
||||||
|
Intent intent = new Intent(this, PublicKeyListActivity.class);
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -118,11 +121,11 @@ public class KeyServerQueryActivity extends BaseActivity {
|
|||||||
});
|
});
|
||||||
|
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
if (Apg.Intent.LOOK_UP_KEY_ID.equals(intent.getAction())
|
if (PGPHelper.Intent.LOOK_UP_KEY_ID.equals(intent.getAction())
|
||||||
|| Apg.Intent.LOOK_UP_KEY_ID_AND_RETURN.equals(intent.getAction())) {
|
|| PGPHelper.Intent.LOOK_UP_KEY_ID_AND_RETURN.equals(intent.getAction())) {
|
||||||
long keyId = intent.getLongExtra(Apg.EXTRA_KEY_ID, 0);
|
long keyId = intent.getLongExtra(PGPHelper.EXTRA_KEY_ID, 0);
|
||||||
if (keyId != 0) {
|
if (keyId != 0) {
|
||||||
String query = "0x" + Apg.keyToHex(keyId);
|
String query = "0x" + PGPHelper.keyToHex(keyId);
|
||||||
mQuery.setText(query);
|
mQuery.setText(query);
|
||||||
search(query);
|
search(query);
|
||||||
}
|
}
|
||||||
@ -176,7 +179,7 @@ public class KeyServerQueryActivity extends BaseActivity {
|
|||||||
data.putInt(Constants.extras.STATUS, Id.message.done);
|
data.putInt(Constants.extras.STATUS, Id.message.done);
|
||||||
|
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
data.putString(Apg.EXTRA_ERROR, error);
|
data.putString(PGPHelper.EXTRA_ERROR, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.setData(data);
|
msg.setData(data);
|
||||||
@ -190,7 +193,7 @@ public class KeyServerQueryActivity extends BaseActivity {
|
|||||||
removeDialog(Id.dialog.querying);
|
removeDialog(Id.dialog.querying);
|
||||||
|
|
||||||
Bundle data = msg.getData();
|
Bundle data = msg.getData();
|
||||||
String error = data.getString(Apg.EXTRA_ERROR);
|
String error = data.getString(PGPHelper.EXTRA_ERROR);
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
|
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
|
||||||
.show();
|
.show();
|
||||||
@ -205,10 +208,10 @@ public class KeyServerQueryActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
} else if (mQueryType == Id.keyserver.get) {
|
} else if (mQueryType == Id.keyserver.get) {
|
||||||
Intent orgIntent = getIntent();
|
Intent orgIntent = getIntent();
|
||||||
if (Apg.Intent.LOOK_UP_KEY_ID_AND_RETURN.equals(orgIntent.getAction())) {
|
if (PGPHelper.Intent.LOOK_UP_KEY_ID_AND_RETURN.equals(orgIntent.getAction())) {
|
||||||
if (mKeyData != null) {
|
if (mKeyData != null) {
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
intent.putExtra(Apg.EXTRA_TEXT, mKeyData);
|
intent.putExtra(PGPHelper.EXTRA_TEXT, mKeyData);
|
||||||
setResult(RESULT_OK, intent);
|
setResult(RESULT_OK, intent);
|
||||||
} else {
|
} else {
|
||||||
setResult(RESULT_CANCELED);
|
setResult(RESULT_CANCELED);
|
||||||
@ -217,8 +220,8 @@ public class KeyServerQueryActivity extends BaseActivity {
|
|||||||
} else {
|
} else {
|
||||||
if (mKeyData != null) {
|
if (mKeyData != null) {
|
||||||
Intent intent = new Intent(this, PublicKeyListActivity.class);
|
Intent intent = new Intent(this, PublicKeyListActivity.class);
|
||||||
intent.setAction(Apg.Intent.IMPORT);
|
intent.setAction(PGPHelper.Intent.IMPORT);
|
||||||
intent.putExtra(Apg.EXTRA_TEXT, mKeyData);
|
intent.putExtra(PGPHelper.EXTRA_TEXT, mKeyData);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -284,7 +287,7 @@ public class KeyServerQueryActivity extends BaseActivity {
|
|||||||
mainUserId.setText(userId);
|
mainUserId.setText(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
keyId.setText(Apg.getSmallFingerPrint(keyInfo.keyId));
|
keyId.setText(PGPHelper.getSmallFingerPrint(keyInfo.keyId));
|
||||||
|
|
||||||
if (mainUserIdRest.getText().length() == 0) {
|
if (mainUserIdRest.getText().length() == 0) {
|
||||||
mainUserIdRest.setVisibility(View.GONE);
|
mainUserIdRest.setVisibility(View.GONE);
|
||||||
|
@ -20,8 +20,8 @@ import java.util.Vector;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Preferences;
|
import org.thialfihar.android.apg.Preferences;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
|
||||||
import android.app.ListActivity;
|
import android.app.ListActivity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -121,11 +121,11 @@ public class MailListActivity extends ListActivity {
|
|||||||
String data = messageCursor.getString(bodyIndex);
|
String data = messageCursor.getString(bodyIndex);
|
||||||
data = Html.fromHtml(data).toString();
|
data = Html.fromHtml(data).toString();
|
||||||
boolean signedOnly = false;
|
boolean signedOnly = false;
|
||||||
Matcher matcher = Apg.PGP_MESSAGE.matcher(data);
|
Matcher matcher = PGPHelper.PGP_MESSAGE.matcher(data);
|
||||||
if (matcher.matches()) {
|
if (matcher.matches()) {
|
||||||
data = matcher.group(1);
|
data = matcher.group(1);
|
||||||
} else {
|
} else {
|
||||||
matcher = Apg.PGP_SIGNED_MESSAGE.matcher(data);
|
matcher = PGPHelper.PGP_SIGNED_MESSAGE.matcher(data);
|
||||||
if (matcher.matches()) {
|
if (matcher.matches()) {
|
||||||
data = matcher.group(1);
|
data = matcher.group(1);
|
||||||
signedOnly = true;
|
signedOnly = true;
|
||||||
@ -149,11 +149,11 @@ public class MailListActivity extends ListActivity {
|
|||||||
getListView().setOnItemClickListener(new OnItemClickListener() {
|
getListView().setOnItemClickListener(new OnItemClickListener() {
|
||||||
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
|
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
|
||||||
Intent intent = new Intent(MailListActivity.this, DecryptActivity.class);
|
Intent intent = new Intent(MailListActivity.this, DecryptActivity.class);
|
||||||
intent.setAction(Apg.Intent.DECRYPT);
|
intent.setAction(PGPHelper.Intent.DECRYPT);
|
||||||
Message message = (Message) ((MailboxAdapter) getListAdapter()).getItem(position);
|
Message message = (Message) ((MailboxAdapter) getListAdapter()).getItem(position);
|
||||||
intent.putExtra(Apg.EXTRA_TEXT, message.data);
|
intent.putExtra(PGPHelper.EXTRA_TEXT, message.data);
|
||||||
intent.putExtra(Apg.EXTRA_SUBJECT, message.subject);
|
intent.putExtra(PGPHelper.EXTRA_SUBJECT, message.subject);
|
||||||
intent.putExtra(Apg.EXTRA_REPLY_TO, message.replyTo);
|
intent.putExtra(PGPHelper.EXTRA_REPLY_TO, message.replyTo);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -20,9 +20,9 @@ package org.thialfihar.android.apg.ui;
|
|||||||
import java.security.Security;
|
import java.security.Security;
|
||||||
|
|
||||||
import org.spongycastle.jce.provider.BouncyCastleProvider;
|
import org.spongycastle.jce.provider.BouncyCastleProvider;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
|
||||||
import com.actionbarsherlock.app.ActionBar;
|
import com.actionbarsherlock.app.ActionBar;
|
||||||
import com.actionbarsherlock.app.SherlockActivity;
|
import com.actionbarsherlock.app.SherlockActivity;
|
||||||
@ -48,19 +48,19 @@ public class MainActivity extends SherlockActivity {
|
|||||||
|
|
||||||
public void encryptOnClick(View view) {
|
public void encryptOnClick(View view) {
|
||||||
Intent intent = new Intent(MainActivity.this, EncryptActivity.class);
|
Intent intent = new Intent(MainActivity.this, EncryptActivity.class);
|
||||||
intent.setAction(Apg.Intent.ENCRYPT);
|
intent.setAction(PGPHelper.Intent.ENCRYPT);
|
||||||
startActivityForResult(intent, 0); // used instead of startActivity to get callingPackage
|
startActivityForResult(intent, 0); // used instead of startActivity to get callingPackage
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decryptOnClick(View view) {
|
public void decryptOnClick(View view) {
|
||||||
Intent intent = new Intent(MainActivity.this, DecryptActivity.class);
|
Intent intent = new Intent(MainActivity.this, DecryptActivity.class);
|
||||||
intent.setAction(Apg.Intent.DECRYPT);
|
intent.setAction(PGPHelper.Intent.DECRYPT);
|
||||||
startActivityForResult(intent, 0); // used instead of startActivity to get callingPackage
|
startActivityForResult(intent, 0); // used instead of startActivity to get callingPackage
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scanQrcodeOnClick(View view) {
|
public void scanQrcodeOnClick(View view) {
|
||||||
Intent intent = new Intent(this, ImportFromQRCodeActivity.class);
|
Intent intent = new Intent(this, ImportFromQRCodeActivity.class);
|
||||||
intent.setAction(Apg.Intent.IMPORT_FROM_QR_CODE);
|
intent.setAction(PGPHelper.Intent.IMPORT_FROM_QR_CODE);
|
||||||
startActivityForResult(intent, Id.request.import_from_qr_code);
|
startActivityForResult(intent, Id.request.import_from_qr_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,10 +18,10 @@ package org.thialfihar.android.apg.ui;
|
|||||||
|
|
||||||
import org.spongycastle.bcpg.HashAlgorithmTags;
|
import org.spongycastle.bcpg.HashAlgorithmTags;
|
||||||
import org.spongycastle.openpgp.PGPEncryptedData;
|
import org.spongycastle.openpgp.PGPEncryptedData;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.Preferences;
|
import org.thialfihar.android.apg.Preferences;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
|
import org.thialfihar.android.apg.passphrase.PassphraseCacheService;
|
||||||
import org.thialfihar.android.apg.ui.widget.IntegerListPreference;
|
import org.thialfihar.android.apg.ui.widget.IntegerListPreference;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
@ -36,7 +36,6 @@ import android.preference.CheckBoxPreference;
|
|||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.PreferenceScreen;
|
import android.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
|
||||||
public class PreferencesActivity extends SherlockPreferenceActivity {
|
public class PreferencesActivity extends SherlockPreferenceActivity {
|
||||||
private IntegerListPreference mPassPhraseCacheTtl = null;
|
private IntegerListPreference mPassPhraseCacheTtl = null;
|
||||||
private IntegerListPreference mEncryptionAlgorithm = null;
|
private IntegerListPreference mEncryptionAlgorithm = null;
|
||||||
@ -56,6 +55,7 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
|
|||||||
final ActionBar actionBar = getSupportActionBar();
|
final ActionBar actionBar = getSupportActionBar();
|
||||||
actionBar.setDisplayShowTitleEnabled(true);
|
actionBar.setDisplayShowTitleEnabled(true);
|
||||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||||
|
actionBar.setHomeButtonEnabled(true);
|
||||||
|
|
||||||
addPreferencesFromResource(R.xml.apg_preferences);
|
addPreferencesFromResource(R.xml.apg_preferences);
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
|
|||||||
mPassPhraseCacheTtl.setValue(newValue.toString());
|
mPassPhraseCacheTtl.setValue(newValue.toString());
|
||||||
mPassPhraseCacheTtl.setSummary(mPassPhraseCacheTtl.getEntry());
|
mPassPhraseCacheTtl.setSummary(mPassPhraseCacheTtl.getEntry());
|
||||||
mPreferences.setPassPhraseCacheTtl(Integer.parseInt(newValue.toString()));
|
mPreferences.setPassPhraseCacheTtl(Integer.parseInt(newValue.toString()));
|
||||||
|
|
||||||
// restart cache service with new ttl
|
// restart cache service with new ttl
|
||||||
PassphraseCacheService.startCacheService(PreferencesActivity.this);
|
PassphraseCacheService.startCacheService(PreferencesActivity.this);
|
||||||
return false;
|
return false;
|
||||||
@ -194,8 +194,8 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
|
|||||||
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
Intent intent = new Intent(PreferencesActivity.this,
|
Intent intent = new Intent(PreferencesActivity.this,
|
||||||
KeyServerPreferenceActivity.class);
|
PreferencesKeyServerActivity.class);
|
||||||
intent.putExtra(Apg.EXTRA_KEY_SERVERS, mPreferences.getKeyServers());
|
intent.putExtra(PGPHelper.EXTRA_KEY_SERVERS, mPreferences.getKeyServers());
|
||||||
startActivityForResult(intent, Id.request.key_server_preference);
|
startActivityForResult(intent, Id.request.key_server_preference);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
|
|||||||
if (resultCode == RESULT_CANCELED || data == null) {
|
if (resultCode == RESULT_CANCELED || data == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String servers[] = data.getStringArrayExtra(Apg.EXTRA_KEY_SERVERS);
|
String servers[] = data.getStringArrayExtra(PGPHelper.EXTRA_KEY_SERVERS);
|
||||||
mPreferences.setKeyServers(servers);
|
mPreferences.setKeyServers(servers);
|
||||||
mKeyServerPreference.setSummary(getResources().getString(R.string.nKeyServers,
|
mKeyServerPreference.setSummary(getResources().getString(R.string.nKeyServers,
|
||||||
servers.length));
|
servers.length));
|
||||||
@ -228,7 +228,10 @@ public class PreferencesActivity extends SherlockPreferenceActivity {
|
|||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
|
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
startActivity(new Intent(this, MainActivity.class));
|
// app icon in Action Bar clicked; go home
|
||||||
|
Intent intent = new Intent(this, MainActivity.class);
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -18,13 +18,17 @@ package org.thialfihar.android.apg.ui;
|
|||||||
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.ui.widget.Editor;
|
import org.thialfihar.android.apg.ui.widget.Editor;
|
||||||
import org.thialfihar.android.apg.ui.widget.KeyServerEditor;
|
import org.thialfihar.android.apg.ui.widget.KeyServerEditor;
|
||||||
import org.thialfihar.android.apg.ui.widget.Editor.EditorListener;
|
import org.thialfihar.android.apg.ui.widget.Editor.EditorListener;
|
||||||
|
|
||||||
|
import com.actionbarsherlock.app.ActionBar;
|
||||||
|
import com.actionbarsherlock.app.SherlockActivity;
|
||||||
import com.actionbarsherlock.view.Menu;
|
import com.actionbarsherlock.view.Menu;
|
||||||
|
import com.actionbarsherlock.view.MenuItem;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -33,10 +37,9 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
public class KeyServerPreferenceActivity extends BaseActivity implements OnClickListener,
|
public class PreferencesKeyServerActivity extends SherlockActivity implements OnClickListener,
|
||||||
EditorListener {
|
EditorListener {
|
||||||
private LayoutInflater mInflater;
|
private LayoutInflater mInflater;
|
||||||
private ViewGroup mEditors;
|
private ViewGroup mEditors;
|
||||||
@ -44,11 +47,61 @@ public class KeyServerPreferenceActivity extends BaseActivity implements OnClick
|
|||||||
private TextView mTitle;
|
private TextView mTitle;
|
||||||
private TextView mSummary;
|
private TextView mSummary;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
|
||||||
|
case android.R.id.home:
|
||||||
|
// app icon in Action Bar clicked; go home
|
||||||
|
Intent intent = new Intent(this, PreferencesActivity.class);
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
|
startActivity(intent);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case Id.menu.option.okay:
|
||||||
|
okClicked();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case Id.menu.option.cancel:
|
||||||
|
cancelClicked();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ActionBar menu is created based on class variables to change it at runtime
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
|
||||||
|
menu.add(1, Id.menu.option.cancel, 0, android.R.string.cancel).setShowAsAction(
|
||||||
|
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
|
||||||
|
|
||||||
|
menu.add(1, Id.menu.option.okay, 1, android.R.string.ok).setShowAsAction(
|
||||||
|
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.key_server_preference);
|
setContentView(R.layout.key_server_preference);
|
||||||
|
|
||||||
|
final ActionBar actionBar = getSupportActionBar();
|
||||||
|
actionBar.setDisplayShowTitleEnabled(true);
|
||||||
|
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||||
|
actionBar.setHomeButtonEnabled(true);
|
||||||
|
|
||||||
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
|
||||||
mTitle = (TextView) findViewById(R.id.title);
|
mTitle = (TextView) findViewById(R.id.title);
|
||||||
@ -61,7 +114,7 @@ public class KeyServerPreferenceActivity extends BaseActivity implements OnClick
|
|||||||
mAdd.setOnClickListener(this);
|
mAdd.setOnClickListener(this);
|
||||||
|
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
String servers[] = intent.getStringArrayExtra(Apg.EXTRA_KEY_SERVERS);
|
String servers[] = intent.getStringArrayExtra(PGPHelper.EXTRA_KEY_SERVERS);
|
||||||
if (servers != null) {
|
if (servers != null) {
|
||||||
for (int i = 0; i < servers.length; ++i) {
|
for (int i = 0; i < servers.length; ++i) {
|
||||||
KeyServerEditor view = (KeyServerEditor) mInflater.inflate(
|
KeyServerEditor view = (KeyServerEditor) mInflater.inflate(
|
||||||
@ -71,20 +124,6 @@ public class KeyServerPreferenceActivity extends BaseActivity implements OnClick
|
|||||||
mEditors.addView(view);
|
mEditors.addView(view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Button okButton = (Button) findViewById(R.id.btn_ok);
|
|
||||||
okButton.setOnClickListener(new OnClickListener() {
|
|
||||||
public void onClick(View v) {
|
|
||||||
okClicked();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Button cancelButton = (Button) findViewById(R.id.btn_cancel);
|
|
||||||
cancelButton.setOnClickListener(new OnClickListener() {
|
|
||||||
public void onClick(View v) {
|
|
||||||
cancelClicked();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDeleted(Editor editor) {
|
public void onDeleted(Editor editor) {
|
||||||
@ -114,15 +153,8 @@ public class KeyServerPreferenceActivity extends BaseActivity implements OnClick
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
String[] dummy = new String[0];
|
String[] dummy = new String[0];
|
||||||
data.putExtra(Apg.EXTRA_KEY_SERVERS, servers.toArray(dummy));
|
data.putExtra(PGPHelper.EXTRA_KEY_SERVERS, servers.toArray(dummy));
|
||||||
setResult(RESULT_OK, data);
|
setResult(RESULT_OK, data);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
// override this, so no option menu is added (as would be in BaseActivity), since
|
|
||||||
// we're still in preferences
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -17,10 +17,10 @@
|
|||||||
package org.thialfihar.android.apg.ui;
|
package org.thialfihar.android.apg.ui;
|
||||||
|
|
||||||
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
|
||||||
import com.actionbarsherlock.view.Menu;
|
import com.actionbarsherlock.view.Menu;
|
||||||
import com.actionbarsherlock.view.MenuItem;
|
import com.actionbarsherlock.view.MenuItem;
|
||||||
@ -71,7 +71,7 @@ public class PublicKeyListActivity extends KeyListActivity {
|
|||||||
}
|
}
|
||||||
case Id.menu.option.scanQRCode: {
|
case Id.menu.option.scanQRCode: {
|
||||||
Intent intent = new Intent(this, ImportFromQRCodeActivity.class);
|
Intent intent = new Intent(this, ImportFromQRCodeActivity.class);
|
||||||
intent.setAction(Apg.Intent.IMPORT_FROM_QR_CODE);
|
intent.setAction(PGPHelper.Intent.IMPORT_FROM_QR_CODE);
|
||||||
startActivityForResult(intent, Id.request.import_from_qr_code);
|
startActivityForResult(intent, Id.request.import_from_qr_code);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -114,9 +114,9 @@ public class PublicKeyListActivity extends KeyListActivity {
|
|||||||
mSelectedItem = groupPosition;
|
mSelectedItem = groupPosition;
|
||||||
final int keyRingId = mListAdapter.getKeyRingId(groupPosition);
|
final int keyRingId = mListAdapter.getKeyRingId(groupPosition);
|
||||||
long keyId = 0;
|
long keyId = 0;
|
||||||
Object keyRing = Apg.getKeyRing(keyRingId);
|
Object keyRing = PGPHelper.getKeyRing(keyRingId);
|
||||||
if (keyRing != null && keyRing instanceof PGPPublicKeyRing) {
|
if (keyRing != null && keyRing instanceof PGPPublicKeyRing) {
|
||||||
keyId = Apg.getMasterKey((PGPPublicKeyRing) keyRing).getKeyID();
|
keyId = PGPHelper.getMasterKey((PGPPublicKeyRing) keyRing).getKeyID();
|
||||||
}
|
}
|
||||||
if (keyId == 0) {
|
if (keyId == 0) {
|
||||||
// this shouldn't happen
|
// this shouldn't happen
|
||||||
@ -124,8 +124,8 @@ public class PublicKeyListActivity extends KeyListActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Intent intent = new Intent(this, KeyServerQueryActivity.class);
|
Intent intent = new Intent(this, KeyServerQueryActivity.class);
|
||||||
intent.setAction(Apg.Intent.LOOK_UP_KEY_ID_AND_RETURN);
|
intent.setAction(PGPHelper.Intent.LOOK_UP_KEY_ID_AND_RETURN);
|
||||||
intent.putExtra(Apg.EXTRA_KEY_ID, keyId);
|
intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyId);
|
||||||
startActivityForResult(intent, Id.request.look_up_key_id);
|
startActivityForResult(intent, Id.request.look_up_key_id);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -136,8 +136,8 @@ public class PublicKeyListActivity extends KeyListActivity {
|
|||||||
final int keyRingId = mListAdapter.getKeyRingId(groupPosition);
|
final int keyRingId = mListAdapter.getKeyRingId(groupPosition);
|
||||||
|
|
||||||
Intent intent = new Intent(this, KeyServerExportActivity.class);
|
Intent intent = new Intent(this, KeyServerExportActivity.class);
|
||||||
intent.setAction(Apg.Intent.EXPORT_KEY_TO_SERVER);
|
intent.setAction(PGPHelper.Intent.EXPORT_KEY_TO_SERVER);
|
||||||
intent.putExtra(Apg.EXTRA_KEY_ID, keyRingId);
|
intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyRingId);
|
||||||
startActivityForResult(intent, Id.request.export_to_server);
|
startActivityForResult(intent, Id.request.export_to_server);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -147,9 +147,9 @@ public class PublicKeyListActivity extends KeyListActivity {
|
|||||||
mSelectedItem = groupPosition;
|
mSelectedItem = groupPosition;
|
||||||
final int keyRingId = mListAdapter.getKeyRingId(groupPosition);
|
final int keyRingId = mListAdapter.getKeyRingId(groupPosition);
|
||||||
long keyId = 0;
|
long keyId = 0;
|
||||||
Object keyRing = Apg.getKeyRing(keyRingId);
|
Object keyRing = PGPHelper.getKeyRing(keyRingId);
|
||||||
if (keyRing != null && keyRing instanceof PGPPublicKeyRing) {
|
if (keyRing != null && keyRing instanceof PGPPublicKeyRing) {
|
||||||
keyId = Apg.getMasterKey((PGPPublicKeyRing) keyRing).getKeyID();
|
keyId = PGPHelper.getMasterKey((PGPPublicKeyRing) keyRing).getKeyID();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyId == 0) {
|
if (keyId == 0) {
|
||||||
@ -158,7 +158,7 @@ public class PublicKeyListActivity extends KeyListActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Intent intent = new Intent(this, SignKeyActivity.class);
|
Intent intent = new Intent(this, SignKeyActivity.class);
|
||||||
intent.putExtra(Apg.EXTRA_KEY_ID, keyId);
|
intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyId);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -175,13 +175,13 @@ public class PublicKeyListActivity extends KeyListActivity {
|
|||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
case Id.request.look_up_key_id: {
|
case Id.request.look_up_key_id: {
|
||||||
if (resultCode == RESULT_CANCELED || data == null
|
if (resultCode == RESULT_CANCELED || data == null
|
||||||
|| data.getStringExtra(Apg.EXTRA_TEXT) == null) {
|
|| data.getStringExtra(PGPHelper.EXTRA_TEXT) == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Intent intent = new Intent(this, PublicKeyListActivity.class);
|
Intent intent = new Intent(this, PublicKeyListActivity.class);
|
||||||
intent.setAction(Apg.Intent.IMPORT);
|
intent.setAction(PGPHelper.Intent.IMPORT);
|
||||||
intent.putExtra(Apg.EXTRA_TEXT, data.getStringExtra(Apg.EXTRA_TEXT));
|
intent.putExtra(PGPHelper.EXTRA_TEXT, data.getStringExtra(PGPHelper.EXTRA_TEXT));
|
||||||
handleIntent(intent);
|
handleIntent(intent);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.thialfihar.android.apg.ui;
|
package org.thialfihar.android.apg.ui;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.passphrase.AskForPassphrase;
|
import org.thialfihar.android.apg.passphrase.AskForPassphrase;
|
||||||
|
|
||||||
import com.actionbarsherlock.view.Menu;
|
import com.actionbarsherlock.view.Menu;
|
||||||
@ -111,7 +111,7 @@ public class SecretKeyListActivity extends KeyListActivity implements OnChildCli
|
|||||||
|
|
||||||
long keyId = ((KeyListAdapter) mList.getExpandableListAdapter())
|
long keyId = ((KeyListAdapter) mList.getExpandableListAdapter())
|
||||||
.getGroupId(mSelectedItem);
|
.getGroupId(mSelectedItem);
|
||||||
String msg = keyId + "," + Apg.getFingerPrint(keyId);
|
String msg = keyId + "," + PGPHelper.getFingerPrint(keyId);
|
||||||
|
|
||||||
new IntentIntegrator(this).shareText(msg);
|
new IntentIntegrator(this).shareText(msg);
|
||||||
}
|
}
|
||||||
@ -146,11 +146,11 @@ public class SecretKeyListActivity extends KeyListActivity implements OnChildCli
|
|||||||
|
|
||||||
public void checkPassPhraseAndEdit() {
|
public void checkPassPhraseAndEdit() {
|
||||||
long keyId = ((KeyListAdapter) mList.getExpandableListAdapter()).getGroupId(mSelectedItem);
|
long keyId = ((KeyListAdapter) mList.getExpandableListAdapter()).getGroupId(mSelectedItem);
|
||||||
String passPhrase = Apg.getCachedPassPhrase(keyId);
|
String passPhrase = PGPHelper.getCachedPassPhrase(keyId);
|
||||||
if (passPhrase == null) {
|
if (passPhrase == null) {
|
||||||
showDialog(Id.dialog.pass_phrase);
|
showDialog(Id.dialog.pass_phrase);
|
||||||
} else {
|
} else {
|
||||||
Apg.setEditPassPhrase(passPhrase);
|
PGPHelper.setEditPassPhrase(passPhrase);
|
||||||
editKey();
|
editKey();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,20 +158,20 @@ public class SecretKeyListActivity extends KeyListActivity implements OnChildCli
|
|||||||
@Override
|
@Override
|
||||||
public void passPhraseCallback(long keyId, String passPhrase) {
|
public void passPhraseCallback(long keyId, String passPhrase) {
|
||||||
super.passPhraseCallback(keyId, passPhrase);
|
super.passPhraseCallback(keyId, passPhrase);
|
||||||
Apg.setEditPassPhrase(passPhrase);
|
PGPHelper.setEditPassPhrase(passPhrase);
|
||||||
editKey();
|
editKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createKey() {
|
private void createKey() {
|
||||||
Apg.setEditPassPhrase("");
|
PGPHelper.setEditPassPhrase("");
|
||||||
Intent intent = new Intent(Apg.Intent.CREATE_KEY);
|
Intent intent = new Intent(PGPHelper.Intent.CREATE_KEY);
|
||||||
startActivityForResult(intent, Id.message.create_key);
|
startActivityForResult(intent, Id.message.create_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void editKey() {
|
private void editKey() {
|
||||||
long keyId = ((KeyListAdapter) mList.getExpandableListAdapter()).getGroupId(mSelectedItem);
|
long keyId = ((KeyListAdapter) mList.getExpandableListAdapter()).getGroupId(mSelectedItem);
|
||||||
Intent intent = new Intent(Apg.Intent.EDIT_KEY);
|
Intent intent = new Intent(PGPHelper.Intent.EDIT_KEY);
|
||||||
intent.putExtra(Apg.EXTRA_KEY_ID, keyId);
|
intent.putExtra(PGPHelper.EXTRA_KEY_ID, keyId);
|
||||||
startActivityForResult(intent, Id.message.edit_key);
|
startActivityForResult(intent, Id.message.edit_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,8 +19,8 @@ package org.thialfihar.android.apg.ui;
|
|||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.ui.widget.SelectPublicKeyListAdapter;
|
import org.thialfihar.android.apg.ui.widget.SelectPublicKeyListAdapter;
|
||||||
|
|
||||||
import com.actionbarsherlock.app.ActionBar;
|
import com.actionbarsherlock.app.ActionBar;
|
||||||
@ -89,7 +89,7 @@ public class SelectPublicKeyListActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
long selectedKeyIds[] = null;
|
long selectedKeyIds[] = null;
|
||||||
selectedKeyIds = intent.getLongArrayExtra(Apg.EXTRA_SELECTION);
|
selectedKeyIds = intent.getLongArrayExtra(PGPHelper.EXTRA_SELECTION);
|
||||||
|
|
||||||
if (selectedKeyIds == null) {
|
if (selectedKeyIds == null) {
|
||||||
Vector<Long> vector = new Vector<Long>();
|
Vector<Long> vector = new Vector<Long>();
|
||||||
@ -151,8 +151,8 @@ public class SelectPublicKeyListActivity extends BaseActivity {
|
|||||||
selectedKeyIds[i] = keys.get(i);
|
selectedKeyIds[i] = keys.get(i);
|
||||||
}
|
}
|
||||||
String userIdArray[] = new String[0];
|
String userIdArray[] = new String[0];
|
||||||
data.putExtra(Apg.EXTRA_SELECTION, selectedKeyIds);
|
data.putExtra(PGPHelper.EXTRA_SELECTION, selectedKeyIds);
|
||||||
data.putExtra(Apg.EXTRA_USER_IDS, userIds.toArray(userIdArray));
|
data.putExtra(PGPHelper.EXTRA_USER_IDS, userIds.toArray(userIdArray));
|
||||||
setResult(RESULT_OK, data);
|
setResult(RESULT_OK, data);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
package org.thialfihar.android.apg.ui;
|
package org.thialfihar.android.apg.ui;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.ui.widget.SelectSecretKeyListAdapter;
|
import org.thialfihar.android.apg.ui.widget.SelectSecretKeyListAdapter;
|
||||||
|
|
||||||
import com.actionbarsherlock.app.ActionBar;
|
import com.actionbarsherlock.app.ActionBar;
|
||||||
@ -62,8 +62,8 @@ public class SelectSecretKeyListActivity extends BaseActivity {
|
|||||||
mList.setOnItemClickListener(new OnItemClickListener() {
|
mList.setOnItemClickListener(new OnItemClickListener() {
|
||||||
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
|
||||||
Intent data = new Intent();
|
Intent data = new Intent();
|
||||||
data.putExtra(Apg.EXTRA_KEY_ID, id);
|
data.putExtra(PGPHelper.EXTRA_KEY_ID, id);
|
||||||
data.putExtra(Apg.EXTRA_USER_ID, (String) mList.getItemAtPosition(position));
|
data.putExtra(PGPHelper.EXTRA_USER_ID, (String) mList.getItemAtPosition(position));
|
||||||
setResult(RESULT_OK, data);
|
setResult(RESULT_OK, data);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2011 Senecaso
|
||||||
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
@ -30,11 +32,11 @@ import org.spongycastle.openpgp.PGPSignatureGenerator;
|
|||||||
import org.spongycastle.openpgp.PGPSignatureSubpacketGenerator;
|
import org.spongycastle.openpgp.PGPSignatureSubpacketGenerator;
|
||||||
import org.spongycastle.openpgp.PGPSignatureSubpacketVector;
|
import org.spongycastle.openpgp.PGPSignatureSubpacketVector;
|
||||||
import org.spongycastle.openpgp.PGPUtil;
|
import org.spongycastle.openpgp.PGPUtil;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.HkpKeyServer;
|
import org.thialfihar.android.apg.HkpKeyServer;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
|
||||||
import com.actionbarsherlock.view.MenuItem;
|
import com.actionbarsherlock.view.MenuItem;
|
||||||
|
|
||||||
@ -122,7 +124,7 @@ public class SignKeyActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
pubKeyId = getIntent().getLongExtra(Apg.EXTRA_KEY_ID, 0);
|
pubKeyId = getIntent().getLongExtra(PGPHelper.EXTRA_KEY_ID, 0);
|
||||||
if (pubKeyId == 0) {
|
if (pubKeyId == 0) {
|
||||||
finish(); // nothing to do if we dont know what key to sign
|
finish(); // nothing to do if we dont know what key to sign
|
||||||
} else {
|
} else {
|
||||||
@ -137,7 +139,7 @@ public class SignKeyActivity extends BaseActivity {
|
|||||||
* handles the UI bits of the signing process on the UI thread
|
* handles the UI bits of the signing process on the UI thread
|
||||||
*/
|
*/
|
||||||
private void initiateSigning() {
|
private void initiateSigning() {
|
||||||
PGPPublicKeyRing pubring = Apg.getPublicKeyRing(pubKeyId);
|
PGPPublicKeyRing pubring = PGPHelper.getPublicKeyRing(pubKeyId);
|
||||||
if (pubring != null) {
|
if (pubring != null) {
|
||||||
// if we have already signed this key, dont bother doing it again
|
// if we have already signed this key, dont bother doing it again
|
||||||
boolean alreadySigned = false;
|
boolean alreadySigned = false;
|
||||||
@ -156,7 +158,7 @@ public class SignKeyActivity extends BaseActivity {
|
|||||||
/*
|
/*
|
||||||
* get the user's passphrase for this key (if required)
|
* get the user's passphrase for this key (if required)
|
||||||
*/
|
*/
|
||||||
String passphrase = Apg.getCachedPassPhrase(masterKeyId);
|
String passphrase = PGPHelper.getCachedPassPhrase(masterKeyId);
|
||||||
if (passphrase == null) {
|
if (passphrase == null) {
|
||||||
showDialog(Id.dialog.pass_phrase);
|
showDialog(Id.dialog.pass_phrase);
|
||||||
return; // bail out; need to wait until the user has entered the passphrase
|
return; // bail out; need to wait until the user has entered the passphrase
|
||||||
@ -168,7 +170,7 @@ public class SignKeyActivity extends BaseActivity {
|
|||||||
final Bundle status = new Bundle();
|
final Bundle status = new Bundle();
|
||||||
Message msg = new Message();
|
Message msg = new Message();
|
||||||
|
|
||||||
status.putString(Apg.EXTRA_ERROR, "Key has already been signed");
|
status.putString(PGPHelper.EXTRA_ERROR, "Key has already been signed");
|
||||||
|
|
||||||
status.putInt(Constants.extras.STATUS, Id.message.done);
|
status.putInt(Constants.extras.STATUS, Id.message.done);
|
||||||
|
|
||||||
@ -206,16 +208,16 @@ public class SignKeyActivity extends BaseActivity {
|
|||||||
Message msg = new Message();
|
Message msg = new Message();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String passphrase = Apg.getCachedPassPhrase(masterKeyId);
|
String passphrase = PGPHelper.getCachedPassPhrase(masterKeyId);
|
||||||
if (passphrase == null || passphrase.length() <= 0) {
|
if (passphrase == null || passphrase.length() <= 0) {
|
||||||
status.putString(Apg.EXTRA_ERROR, "Unable to obtain passphrase");
|
status.putString(PGPHelper.EXTRA_ERROR, "Unable to obtain passphrase");
|
||||||
} else {
|
} else {
|
||||||
PGPPublicKeyRing pubring = Apg.getPublicKeyRing(pubKeyId);
|
PGPPublicKeyRing pubring = PGPHelper.getPublicKeyRing(pubKeyId);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sign the incoming key
|
* sign the incoming key
|
||||||
*/
|
*/
|
||||||
PGPSecretKey secretKey = Apg.getSecretKey(masterKeyId);
|
PGPSecretKey secretKey = PGPHelper.getSecretKey(masterKeyId);
|
||||||
PGPPrivateKey signingKey = secretKey.extractPrivateKey(passphrase.toCharArray(),
|
PGPPrivateKey signingKey = secretKey.extractPrivateKey(passphrase.toCharArray(),
|
||||||
BouncyCastleProvider.PROVIDER_NAME);
|
BouncyCastleProvider.PROVIDER_NAME);
|
||||||
PGPSignatureGenerator sGen = new PGPSignatureGenerator(secretKey.getPublicKey()
|
PGPSignatureGenerator sGen = new PGPSignatureGenerator(secretKey.getPublicKey()
|
||||||
@ -241,33 +243,33 @@ public class SignKeyActivity extends BaseActivity {
|
|||||||
* upload the newly signed key to the key server
|
* upload the newly signed key to the key server
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Apg.uploadKeyRingToServer(server, pubring);
|
PGPHelper.uploadKeyRingToServer(server, pubring);
|
||||||
}
|
}
|
||||||
|
|
||||||
// store the signed key in our local cache
|
// store the signed key in our local cache
|
||||||
int retval = Apg.storeKeyRingInCache(pubring);
|
int retval = PGPHelper.storeKeyRingInCache(pubring);
|
||||||
if (retval != Id.return_value.ok && retval != Id.return_value.updated) {
|
if (retval != Id.return_value.ok && retval != Id.return_value.updated) {
|
||||||
status.putString(Apg.EXTRA_ERROR, "Failed to store signed key in local cache");
|
status.putString(PGPHelper.EXTRA_ERROR, "Failed to store signed key in local cache");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (PGPException e) {
|
} catch (PGPException e) {
|
||||||
Log.e(TAG, "Failed to sign key", e);
|
Log.e(TAG, "Failed to sign key", e);
|
||||||
status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
|
status.putString(PGPHelper.EXTRA_ERROR, "Failed to sign key");
|
||||||
status.putInt(Constants.extras.STATUS, Id.message.done);
|
status.putInt(Constants.extras.STATUS, Id.message.done);
|
||||||
return;
|
return;
|
||||||
} catch (NoSuchAlgorithmException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
Log.e(TAG, "Failed to sign key", e);
|
Log.e(TAG, "Failed to sign key", e);
|
||||||
status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
|
status.putString(PGPHelper.EXTRA_ERROR, "Failed to sign key");
|
||||||
status.putInt(Constants.extras.STATUS, Id.message.done);
|
status.putInt(Constants.extras.STATUS, Id.message.done);
|
||||||
return;
|
return;
|
||||||
} catch (NoSuchProviderException e) {
|
} catch (NoSuchProviderException e) {
|
||||||
Log.e(TAG, "Failed to sign key", e);
|
Log.e(TAG, "Failed to sign key", e);
|
||||||
status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
|
status.putString(PGPHelper.EXTRA_ERROR, "Failed to sign key");
|
||||||
status.putInt(Constants.extras.STATUS, Id.message.done);
|
status.putInt(Constants.extras.STATUS, Id.message.done);
|
||||||
return;
|
return;
|
||||||
} catch (SignatureException e) {
|
} catch (SignatureException e) {
|
||||||
Log.e(TAG, "Failed to sign key", e);
|
Log.e(TAG, "Failed to sign key", e);
|
||||||
status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
|
status.putString(PGPHelper.EXTRA_ERROR, "Failed to sign key");
|
||||||
status.putInt(Constants.extras.STATUS, Id.message.done);
|
status.putInt(Constants.extras.STATUS, Id.message.done);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -277,7 +279,7 @@ public class SignKeyActivity extends BaseActivity {
|
|||||||
msg.setData(status);
|
msg.setData(status);
|
||||||
sendMessage(msg);
|
sendMessage(msg);
|
||||||
|
|
||||||
if (status.containsKey(Apg.EXTRA_ERROR)) {
|
if (status.containsKey(PGPHelper.EXTRA_ERROR)) {
|
||||||
setResult(Id.return_value.error);
|
setResult(Id.return_value.error);
|
||||||
} else {
|
} else {
|
||||||
setResult(Id.return_value.ok);
|
setResult(Id.return_value.ok);
|
||||||
@ -291,7 +293,7 @@ public class SignKeyActivity extends BaseActivity {
|
|||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
case Id.request.secret_keys: {
|
case Id.request.secret_keys: {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
masterKeyId = data.getLongExtra(Apg.EXTRA_KEY_ID, 0);
|
masterKeyId = data.getLongExtra(PGPHelper.EXTRA_KEY_ID, 0);
|
||||||
|
|
||||||
// re-enable the sign button so the user can initiate the sign process
|
// re-enable the sign button so the user can initiate the sign process
|
||||||
Button sign = (Button) findViewById(R.id.sign);
|
Button sign = (Button) findViewById(R.id.sign);
|
||||||
@ -314,7 +316,7 @@ public class SignKeyActivity extends BaseActivity {
|
|||||||
removeDialog(Id.dialog.signing);
|
removeDialog(Id.dialog.signing);
|
||||||
|
|
||||||
Bundle data = msg.getData();
|
Bundle data = msg.getData();
|
||||||
String error = data.getString(Apg.EXTRA_ERROR);
|
String error = data.getString(PGPHelper.EXTRA_ERROR);
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
|
Toast.makeText(this, getString(R.string.errorMessage, error), Toast.LENGTH_SHORT)
|
||||||
.show();
|
.show();
|
||||||
|
@ -18,7 +18,8 @@ package org.thialfihar.android.apg.ui.dialog;
|
|||||||
|
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.util.Utils;
|
import org.thialfihar.android.apg.helper.FileHelper;
|
||||||
|
import org.thialfihar.android.apg.helper.OtherHelper;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
@ -51,7 +52,7 @@ public class FileDialogFragment extends DialogFragment {
|
|||||||
public static final int MESSAGE_OKAY = 1;
|
public static final int MESSAGE_OKAY = 1;
|
||||||
|
|
||||||
public static final String MESSAGE_DATA_FILENAME = "filename";
|
public static final String MESSAGE_DATA_FILENAME = "filename";
|
||||||
public static final String MESSAGE_CHECKED = "checked";
|
public static final String MESSAGE_DATA_CHECKED = "checked";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new instance of this file dialog fragment
|
* Creates new instance of this file dialog fragment
|
||||||
@ -107,7 +108,7 @@ public class FileDialogFragment extends DialogFragment {
|
|||||||
mBrowse.setOnClickListener(new View.OnClickListener() {
|
mBrowse.setOnClickListener(new View.OnClickListener() {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
// only .asc or .gpg files
|
// only .asc or .gpg files
|
||||||
Utils.openFile(activity, mFilename.getText().toString(), "text/plain", requestCode);
|
FileHelper.openFile(activity, mFilename.getText().toString(), "text/plain", requestCode);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -135,7 +136,7 @@ public class FileDialogFragment extends DialogFragment {
|
|||||||
// return resulting data back to activity
|
// return resulting data back to activity
|
||||||
Bundle data = new Bundle();
|
Bundle data = new Bundle();
|
||||||
data.putString(MESSAGE_DATA_FILENAME, mFilename.getText().toString());
|
data.putString(MESSAGE_DATA_FILENAME, mFilename.getText().toString());
|
||||||
data.putBoolean(MESSAGE_CHECKED, checked);
|
data.putBoolean(MESSAGE_DATA_CHECKED, checked);
|
||||||
|
|
||||||
sendMessageToHandler(MESSAGE_OKAY, data);
|
sendMessageToHandler(MESSAGE_OKAY, data);
|
||||||
|
|
||||||
|
@ -21,8 +21,8 @@ import org.spongycastle.openpgp.PGPPrivateKey;
|
|||||||
import org.spongycastle.openpgp.PGPSecretKey;
|
import org.spongycastle.openpgp.PGPSecretKey;
|
||||||
import org.spongycastle.openpgp.operator.PBESecretKeyDecryptor;
|
import org.spongycastle.openpgp.operator.PBESecretKeyDecryptor;
|
||||||
import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder;
|
import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder;
|
||||||
import org.thialfihar.android.apg.Apg;
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.Apg.GeneralException;
|
import org.thialfihar.android.apg.helper.PGPHelper.GeneralException;
|
||||||
import org.thialfihar.android.apg.Constants;
|
import org.thialfihar.android.apg.Constants;
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
@ -68,7 +68,7 @@ public class PassphraseDialogFragment extends DialogFragment {
|
|||||||
// check if secret key has a passphrase
|
// check if secret key has a passphrase
|
||||||
if (!(secretKeyId == Id.key.symmetric || secretKeyId == Id.key.none)) {
|
if (!(secretKeyId == Id.key.symmetric || secretKeyId == Id.key.none)) {
|
||||||
if (!hasPassphrase(secretKeyId)) {
|
if (!hasPassphrase(secretKeyId)) {
|
||||||
throw new Apg.GeneralException("No passphrase! No passphrase dialog needed!");
|
throw new PGPHelper.GeneralException("No passphrase! No passphrase dialog needed!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ public class PassphraseDialogFragment extends DialogFragment {
|
|||||||
private static boolean hasPassphrase(long secretKeyId) {
|
private static boolean hasPassphrase(long secretKeyId) {
|
||||||
// check if the key has no passphrase
|
// check if the key has no passphrase
|
||||||
try {
|
try {
|
||||||
PGPSecretKey secretKey = Apg.getMasterKey(Apg.getSecretKeyRing(secretKeyId));
|
PGPSecretKey secretKey = PGPHelper.getMasterKey(PGPHelper.getSecretKeyRing(secretKeyId));
|
||||||
|
|
||||||
Log.d(Constants.TAG, "Check if key has no passphrase...");
|
Log.d(Constants.TAG, "Check if key has no passphrase...");
|
||||||
PBESecretKeyDecryptor keyDecryptor = new JcePBESecretKeyDecryptorBuilder().setProvider(
|
PBESecretKeyDecryptor keyDecryptor = new JcePBESecretKeyDecryptorBuilder().setProvider(
|
||||||
@ -101,7 +101,7 @@ public class PassphraseDialogFragment extends DialogFragment {
|
|||||||
Log.d(Constants.TAG, "Key has no passphrase! Caches empty passphrase!");
|
Log.d(Constants.TAG, "Key has no passphrase! Caches empty passphrase!");
|
||||||
|
|
||||||
// cache empty passphrase
|
// cache empty passphrase
|
||||||
Apg.setCachedPassPhrase(secretKey.getKeyID(), "");
|
PGPHelper.setCachedPassPhrase(secretKey.getKeyID(), "");
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -132,7 +132,7 @@ public class PassphraseDialogFragment extends DialogFragment {
|
|||||||
secretKey = null;
|
secretKey = null;
|
||||||
alert.setMessage(getString(R.string.passPhraseForSymmetricEncryption));
|
alert.setMessage(getString(R.string.passPhraseForSymmetricEncryption));
|
||||||
} else {
|
} else {
|
||||||
secretKey = Apg.getMasterKey(Apg.getSecretKeyRing(secretKeyId));
|
secretKey = PGPHelper.getMasterKey(PGPHelper.getSecretKeyRing(secretKeyId));
|
||||||
if (secretKey == null) {
|
if (secretKey == null) {
|
||||||
alert.setTitle(R.string.title_keyNotFound);
|
alert.setTitle(R.string.title_keyNotFound);
|
||||||
alert.setMessage(getString(R.string.keyNotFound, secretKeyId));
|
alert.setMessage(getString(R.string.keyNotFound, secretKeyId));
|
||||||
@ -144,7 +144,7 @@ public class PassphraseDialogFragment extends DialogFragment {
|
|||||||
alert.setCancelable(false);
|
alert.setCancelable(false);
|
||||||
return alert.create();
|
return alert.create();
|
||||||
}
|
}
|
||||||
String userId = Apg.getMainUserIdSafe(activity, secretKey);
|
String userId = PGPHelper.getMainUserIdSafe(activity, secretKey);
|
||||||
alert.setMessage(getString(R.string.passPhraseFor, userId));
|
alert.setMessage(getString(R.string.passPhraseFor, userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ public class PassphraseDialogFragment extends DialogFragment {
|
|||||||
|
|
||||||
// cache the new passphrase
|
// cache the new passphrase
|
||||||
Log.d(Constants.TAG, "Everything okay! Caching entered passphrase");
|
Log.d(Constants.TAG, "Everything okay! Caching entered passphrase");
|
||||||
Apg.setCachedPassPhrase(keyId, passPhrase);
|
PGPHelper.setCachedPassPhrase(keyId, passPhrase);
|
||||||
|
|
||||||
sendMessageToHandler(MESSAGE_OKAY);
|
sendMessageToHandler(MESSAGE_OKAY);
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,8 @@ package org.thialfihar.android.apg.ui.widget;
|
|||||||
|
|
||||||
import org.spongycastle.openpgp.PGPPublicKey;
|
import org.spongycastle.openpgp.PGPPublicKey;
|
||||||
import org.spongycastle.openpgp.PGPSecretKey;
|
import org.spongycastle.openpgp.PGPSecretKey;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.util.Choice;
|
import org.thialfihar.android.apg.util.Choice;
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
|
||||||
@ -133,9 +133,9 @@ public class KeyEditor extends LinearLayout implements Editor, OnClickListener {
|
|||||||
mDeleteButton.setVisibility(View.INVISIBLE);
|
mDeleteButton.setVisibility(View.INVISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
mAlgorithm.setText(Apg.getAlgorithmInfo(key));
|
mAlgorithm.setText(PGPHelper.getAlgorithmInfo(key));
|
||||||
String keyId1Str = Apg.getSmallFingerPrint(key.getKeyID());
|
String keyId1Str = PGPHelper.getSmallFingerPrint(key.getKeyID());
|
||||||
String keyId2Str = Apg.getSmallFingerPrint(key.getKeyID() >> 32);
|
String keyId2Str = PGPHelper.getSmallFingerPrint(key.getKeyID() >> 32);
|
||||||
mKeyId.setText(keyId1Str + " " + keyId2Str);
|
mKeyId.setText(keyId1Str + " " + keyId2Str);
|
||||||
|
|
||||||
Vector<Choice> choices = new Vector<Choice>();
|
Vector<Choice> choices = new Vector<Choice>();
|
||||||
@ -160,8 +160,8 @@ public class KeyEditor extends LinearLayout implements Editor, OnClickListener {
|
|||||||
|
|
||||||
// Set value in choice dropdown to key
|
// Set value in choice dropdown to key
|
||||||
int selectId = 0;
|
int selectId = 0;
|
||||||
if (Apg.isEncryptionKey(key)) {
|
if (PGPHelper.isEncryptionKey(key)) {
|
||||||
if (Apg.isSigningKey(key)) {
|
if (PGPHelper.isSigningKey(key)) {
|
||||||
selectId = Id.choice.usage.sign_and_encrypt;
|
selectId = Id.choice.usage.sign_and_encrypt;
|
||||||
} else {
|
} else {
|
||||||
selectId = Id.choice.usage.encrypt_only;
|
selectId = Id.choice.usage.encrypt_only;
|
||||||
@ -184,14 +184,14 @@ public class KeyEditor extends LinearLayout implements Editor, OnClickListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
GregorianCalendar cal = new GregorianCalendar();
|
GregorianCalendar cal = new GregorianCalendar();
|
||||||
cal.setTime(Apg.getCreationDate(key));
|
cal.setTime(PGPHelper.getCreationDate(key));
|
||||||
mCreationDate.setText(DateFormat.getDateInstance().format(cal.getTime()));
|
mCreationDate.setText(DateFormat.getDateInstance().format(cal.getTime()));
|
||||||
cal = new GregorianCalendar();
|
cal = new GregorianCalendar();
|
||||||
Date date = Apg.getExpiryDate(key);
|
Date date = PGPHelper.getExpiryDate(key);
|
||||||
if (date == null) {
|
if (date == null) {
|
||||||
setExpiryDate(null);
|
setExpiryDate(null);
|
||||||
} else {
|
} else {
|
||||||
cal.setTime(Apg.getExpiryDate(key));
|
cal.setTime(PGPHelper.getExpiryDate(key));
|
||||||
setExpiryDate(cal);
|
setExpiryDate(cal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,14 +18,14 @@ package org.thialfihar.android.apg.ui.widget;
|
|||||||
|
|
||||||
import org.spongycastle.openpgp.PGPSecretKey;
|
import org.spongycastle.openpgp.PGPSecretKey;
|
||||||
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
import org.spongycastle.openpgp.PGPSecretKeyRing;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPConversionHelper;
|
||||||
import org.thialfihar.android.apg.service.ApgHandler;
|
import org.thialfihar.android.apg.service.ApgHandler;
|
||||||
import org.thialfihar.android.apg.service.ApgService;
|
import org.thialfihar.android.apg.service.ApgService;
|
||||||
import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
|
import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment;
|
||||||
import org.thialfihar.android.apg.ui.widget.Editor.EditorListener;
|
import org.thialfihar.android.apg.ui.widget.Editor.EditorListener;
|
||||||
import org.thialfihar.android.apg.util.Choice;
|
import org.thialfihar.android.apg.util.Choice;
|
||||||
import org.thialfihar.android.apg.util.Utils;
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
|
|
||||||
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||||
@ -259,9 +259,10 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
|
|||||||
String passPhrase;
|
String passPhrase;
|
||||||
if (mEditors.getChildCount() > 0) {
|
if (mEditors.getChildCount() > 0) {
|
||||||
PGPSecretKey masterKey = ((KeyEditor) mEditors.getChildAt(0)).getValue();
|
PGPSecretKey masterKey = ((KeyEditor) mEditors.getChildAt(0)).getValue();
|
||||||
passPhrase = Apg.getCachedPassPhrase(masterKey.getKeyID());
|
passPhrase = PGPHelper.getCachedPassPhrase(masterKey.getKeyID());
|
||||||
|
|
||||||
data.putByteArray(ApgService.MASTER_KEY, Utils.PGPSecretKeyToBytes(masterKey));
|
data.putByteArray(ApgService.MASTER_KEY,
|
||||||
|
PGPConversionHelper.PGPSecretKeyToBytes(masterKey));
|
||||||
} else {
|
} else {
|
||||||
passPhrase = "";
|
passPhrase = "";
|
||||||
}
|
}
|
||||||
@ -284,7 +285,7 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
|
|||||||
if (message.arg1 == ApgHandler.MESSAGE_OKAY) {
|
if (message.arg1 == ApgHandler.MESSAGE_OKAY) {
|
||||||
// get new key from data bundle returned from service
|
// get new key from data bundle returned from service
|
||||||
Bundle data = message.getData();
|
Bundle data = message.getData();
|
||||||
PGPSecretKeyRing newKeyRing = Utils.BytesToPGPSecretKeyRing(data
|
PGPSecretKeyRing newKeyRing = PGPConversionHelper.BytesToPGPSecretKeyRing(data
|
||||||
.getByteArray(ApgService.RESULT_NEW_KEY));
|
.getByteArray(ApgService.RESULT_NEW_KEY));
|
||||||
|
|
||||||
boolean isMasterKey = (mEditors.getChildCount() == 0);
|
boolean isMasterKey = (mEditors.getChildCount() == 0);
|
||||||
|
@ -19,8 +19,8 @@ package org.thialfihar.android.apg.ui.widget;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.provider.KeyRings;
|
import org.thialfihar.android.apg.provider.KeyRings;
|
||||||
import org.thialfihar.android.apg.provider.Keys;
|
import org.thialfihar.android.apg.provider.Keys;
|
||||||
import org.thialfihar.android.apg.provider.UserIds;
|
import org.thialfihar.android.apg.provider.UserIds;
|
||||||
@ -53,7 +53,7 @@ public class SelectPublicKeyListAdapter extends BaseAdapter {
|
|||||||
|
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
mParent = parent;
|
mParent = parent;
|
||||||
mDatabase = Apg.getDatabase().db();
|
mDatabase = PGPHelper.getDatabase().db();
|
||||||
mInflater = (LayoutInflater) parent.getContext().getSystemService(
|
mInflater = (LayoutInflater) parent.getContext().getSystemService(
|
||||||
Context.LAYOUT_INFLATER_SERVICE);
|
Context.LAYOUT_INFLATER_SERVICE);
|
||||||
long now = new Date().getTime() / 1000;
|
long now = new Date().getTime() / 1000;
|
||||||
@ -177,7 +177,7 @@ public class SelectPublicKeyListAdapter extends BaseAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
long masterKeyId = mCursor.getLong(1); // MASTER_KEY_ID
|
long masterKeyId = mCursor.getLong(1); // MASTER_KEY_ID
|
||||||
keyId.setText(Apg.getSmallFingerPrint(masterKeyId));
|
keyId.setText(PGPHelper.getSmallFingerPrint(masterKeyId));
|
||||||
|
|
||||||
if (mainUserIdRest.getText().length() == 0) {
|
if (mainUserIdRest.getText().length() == 0) {
|
||||||
mainUserIdRest.setVisibility(View.GONE);
|
mainUserIdRest.setVisibility(View.GONE);
|
||||||
|
@ -17,8 +17,8 @@ package org.thialfihar.android.apg.ui.widget;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.R;
|
import org.thialfihar.android.apg.R;
|
||||||
import org.thialfihar.android.apg.Apg;
|
|
||||||
import org.thialfihar.android.apg.Id;
|
import org.thialfihar.android.apg.Id;
|
||||||
|
import org.thialfihar.android.apg.helper.PGPHelper;
|
||||||
import org.thialfihar.android.apg.provider.KeyRings;
|
import org.thialfihar.android.apg.provider.KeyRings;
|
||||||
import org.thialfihar.android.apg.provider.Keys;
|
import org.thialfihar.android.apg.provider.Keys;
|
||||||
import org.thialfihar.android.apg.provider.UserIds;
|
import org.thialfihar.android.apg.provider.UserIds;
|
||||||
@ -48,7 +48,7 @@ public class SelectSecretKeyListAdapter extends BaseAdapter {
|
|||||||
|
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
mParent = parent;
|
mParent = parent;
|
||||||
mDatabase = Apg.getDatabase().db();
|
mDatabase = PGPHelper.getDatabase().db();
|
||||||
mInflater = (LayoutInflater) parent.getContext().getSystemService(
|
mInflater = (LayoutInflater) parent.getContext().getSystemService(
|
||||||
Context.LAYOUT_INFLATER_SERVICE);
|
Context.LAYOUT_INFLATER_SERVICE);
|
||||||
long now = new Date().getTime() / 1000;
|
long now = new Date().getTime() / 1000;
|
||||||
@ -151,7 +151,7 @@ public class SelectSecretKeyListAdapter extends BaseAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
long masterKeyId = mCursor.getLong(1); // MASTER_KEY_ID
|
long masterKeyId = mCursor.getLong(1); // MASTER_KEY_ID
|
||||||
keyId.setText(Apg.getSmallFingerPrint(masterKeyId));
|
keyId.setText(PGPHelper.getSmallFingerPrint(masterKeyId));
|
||||||
|
|
||||||
if (mainUserIdRest.getText().length() == 0) {
|
if (mainUserIdRest.getText().length() == 0) {
|
||||||
mainUserIdRest.setVisibility(View.GONE);
|
mainUserIdRest.setVisibility(View.GONE);
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
package org.thialfihar.android.apg.util;
|
|
||||||
|
|
||||||
public class Constants {
|
|
||||||
public static final String TAG = "APG";
|
|
||||||
|
|
||||||
}
|
|
@ -12,10 +12,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg;
|
package org.thialfihar.android.apg.util;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
|
||||||
public class InputData {
|
public class InputData {
|
||||||
private PositionAwareInputStream mInputStream;
|
private PositionAwareInputStream mInputStream;
|
||||||
private long mSize;
|
private long mSize;
|
@ -12,7 +12,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg;
|
package org.thialfihar.android.apg.util;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.thialfihar.android.apg;
|
package org.thialfihar.android.apg.util;
|
||||||
|
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user