aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-01-12 20:04:15 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2015-01-12 20:04:15 +0100
commit9fe701c866673d80cabc418ac675718447f76145 (patch)
tree910d866b75cc71e10d2cc30bc6c100f0975011d5 /OpenKeychain/src/main/java/org/sufficientlysecure
parent8408113322242b8811b4a0fa874c172c274b9f0e (diff)
downloadopen-keychain-9fe701c866673d80cabc418ac675718447f76145.tar.gz
open-keychain-9fe701c866673d80cabc418ac675718447f76145.tar.bz2
open-keychain-9fe701c866673d80cabc418ac675718447f76145.zip
work on affirmations (begin rename to LinkedIdentity
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/Affirmation.java163
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java3
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/resources/GenericHttpsResource.java9
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java7
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java4
5 files changed, 10 insertions, 176 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/Affirmation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/Affirmation.java
deleted file mode 100644
index 892231cbe..000000000
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/Affirmation.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package org.sufficientlysecure.keychain.pgp.affirmation;
-
-import org.spongycastle.bcpg.UserAttributeSubpacket;
-import org.spongycastle.util.BigIntegers;
-import org.spongycastle.util.Strings;
-import org.spongycastle.util.encoders.Hex;
-import org.sufficientlysecure.keychain.Constants;
-import org.sufficientlysecure.keychain.util.Log;
-
-import java.math.BigInteger;
-import java.net.URI;
-import java.security.SecureRandom;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map.Entry;
-import java.util.Set;
-
-public class Affirmation {
-
- protected byte[] mData;
- public final String mNonce;
- public final URI mSubUri;
- final Set<String> mFlags;
- final HashMap<String,String> mParams;
-
- protected Affirmation(byte[] data, String nonce, Set<String> flags,
- HashMap<String,String> params, URI subUri) {
- if ( ! nonce.matches("[0-9a-zA-Z]+")) {
- throw new AssertionError("bug: nonce must be hexstring!");
- }
-
- mData = data;
- mNonce = nonce;
- mFlags = flags;
- mParams = params;
- mSubUri = subUri;
- }
-
- Affirmation(String nonce, Set<String> flags,
- HashMap<String,String> params, URI subUri) {
- this(null, nonce, flags, params, subUri);
- }
-
- public byte[] encode() {
- if (mData != null) {
- return mData;
- }
-
- StringBuilder b = new StringBuilder();
- b.append("pgpid:");
-
- // add flags
- if (mFlags != null) {
- boolean first = true;
- for (String flag : mFlags) {
- if (!first) {
- b.append(";");
- }
- first = false;
- b.append(flag);
- }
- }
-
- // add parameters
- if (mParams != null) {
- boolean first = true;
- Iterator<Entry<String, String>> it = mParams.entrySet().iterator();
- while (it.hasNext()) {
- if (!first) {
- b.append(";");
- }
- first = false;
- Entry<String, String> entry = it.next();
- b.append(entry.getKey()).append("=").append(entry.getValue());
- }
- }
-
- b.append("@");
- b.append(mSubUri);
-
- byte[] nonceBytes = Hex.decode(mNonce);
- byte[] data = Strings.toUTF8ByteArray(b.toString());
-
- byte[] result = new byte[data.length+12];
- System.arraycopy(nonceBytes, 0, result, 0, 12);
- System.arraycopy(data, 0, result, 12, result.length);
-
- return result;
- }
-
- /** This method parses an affirmation from a UserAttributeSubpacket, or returns null if the
- * subpacket can not be parsed as a valid affirmation.
- */
- public static Affirmation parseAffirmation(UserAttributeSubpacket subpacket) {
- if (subpacket.getType() != 100) {
- return null;
- }
-
- byte[] data = subpacket.getData();
- String nonce = Hex.toHexString(data, 0, 12);
-
- try {
- return parseUri(nonce, Strings.fromUTF8ByteArray(Arrays.copyOfRange(data, 12, data.length)));
-
- } catch (IllegalArgumentException e) {
- Log.e(Constants.TAG, "error parsing uri in (suspected) affirmation packet");
- return null;
- }
- }
-
- protected static Affirmation parseUri (String nonce, String uriString) {
- URI uri = URI.create(uriString);
-
- if ("pgpid".equals(uri.getScheme())) {
- Log.e(Constants.TAG, "unknown uri scheme in (suspected) affirmation packet");
- return null;
- }
-
- if (!uri.isOpaque()) {
- Log.e(Constants.TAG, "non-opaque uri in (suspected) affirmation packet");
- return null;
- }
-
- String specific = uri.getSchemeSpecificPart();
- if (!specific.contains("@")) {
- Log.e(Constants.TAG, "unknown uri scheme in affirmation packet");
- return null;
- }
-
- String[] pieces = specific.split("@", 2);
- URI subUri = URI.create(pieces[1]);
-
- Set<String> flags = new HashSet<String>();
- HashMap<String,String> params = new HashMap<String,String>();
- {
- String[] rawParams = pieces[0].split(";");
- for (String param : rawParams) {
- String[] p = param.split("=", 2);
- if (p.length == 1) {
- flags.add(param);
- } else {
- params.put(p[0], p[1]);
- }
- }
- }
-
- return new Affirmation(nonce, flags, params, subUri);
-
- }
-
- public static String generateNonce() {
- // TODO make this actually random
- // byte[] data = new byte[96];
- // new SecureRandom().nextBytes(data);
- // return Hex.toHexString(data);
-
- // debug for now
- return "0123456789ABCDEF01234567";
- }
-
-}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java
index dcbaa1c1c..1e27b2c64 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java
@@ -6,6 +6,7 @@ import org.spongycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log;
+import java.io.Serializable;
import java.net.URI;
import java.util.Arrays;
import java.util.HashMap;
@@ -14,7 +15,7 @@ import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
-public class LinkedIdentity {
+public class LinkedIdentity implements Serializable {
protected byte[] mData;
public final String mNonce;
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/resources/GenericHttpsResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/resources/GenericHttpsResource.java
index c8c3cbb4d..8f4d0c41b 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/resources/GenericHttpsResource.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/resources/GenericHttpsResource.java
@@ -6,21 +6,12 @@ import com.textuality.keybase.lib.Search;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult;
-import org.sufficientlysecure.keychain.operations.results.LinkedVerifyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
-import org.sufficientlysecure.keychain.pgp.PgpDecryptVerify;
-import org.sufficientlysecure.keychain.pgp.Progressable;
-import org.sufficientlysecure.keychain.pgp.affirmation.Affirmation;
import org.sufficientlysecure.keychain.pgp.affirmation.AffirmationResource;
-import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
-import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java
index 5e953ec1e..b914f4619 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java
@@ -21,7 +21,7 @@ package org.sufficientlysecure.keychain.service;
import android.os.Parcel;
import android.os.Parcelable;
-import org.sufficientlysecure.keychain.pgp.affirmation.Affi;
+import org.sufficientlysecure.keychain.pgp.affirmation.LinkedIdentity;
import java.io.Serializable;
import java.util.ArrayList;
@@ -51,6 +51,7 @@ public class SaveKeyringParcel implements Parcelable {
public ChangeUnlockParcel mNewUnlock;
public ArrayList<String> mAddUserIds;
+ public ArrayList<LinkedIdentity> mAddLinkedIdentity;
public ArrayList<SubkeyAdd> mAddSubKeys;
public ArrayList<SubkeyChange> mChangeSubKeys;
@@ -73,6 +74,7 @@ public class SaveKeyringParcel implements Parcelable {
public void reset() {
mNewUnlock = null;
mAddUserIds = new ArrayList<String>();
+ mAddLinkedIdentity = new ArrayList<LinkedIdentity>();
mAddSubKeys = new ArrayList<SubkeyAdd>();
mChangePrimaryUserId = null;
mChangeSubKeys = new ArrayList<SubkeyChange>();
@@ -164,6 +166,7 @@ public class SaveKeyringParcel implements Parcelable {
mNewUnlock = source.readParcelable(getClass().getClassLoader());
mAddUserIds = source.createStringArrayList();
+ mAddLinkedIdentity = (ArrayList<LinkedIdentity>) source.readSerializable();
mAddSubKeys = (ArrayList<SubkeyAdd>) source.readSerializable();
mChangeSubKeys = (ArrayList<SubkeyChange>) source.readSerializable();
@@ -186,6 +189,7 @@ public class SaveKeyringParcel implements Parcelable {
destination.writeParcelable(mNewUnlock, 0);
destination.writeStringList(mAddUserIds);
+ destination.writeSerializable(mAddLinkedIdentity);
destination.writeSerializable(mAddSubKeys);
destination.writeSerializable(mChangeSubKeys);
@@ -216,6 +220,7 @@ public class SaveKeyringParcel implements Parcelable {
String out = "mMasterKeyId: " + mMasterKeyId + "\n";
out += "mNewUnlock: " + mNewUnlock + "\n";
out += "mAddUserIds: " + mAddUserIds + "\n";
+ out += "mAddLinkedIdentity: " + mAddLinkedIdentity + "\n";
out += "mAddSubKeys: " + mAddSubKeys + "\n";
out += "mChangeSubKeys: " + mChangeSubKeys + "\n";
out += "mChangePrimaryUserId: " + mChangePrimaryUserId + "\n";
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java
index 818008bb0..7d0ba8937 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/affirmations/AffirmationCreateHttpsStep1Fragment.java
@@ -29,7 +29,7 @@ import android.view.ViewGroup;
import android.widget.EditText;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.pgp.affirmation.Affirmation;
+import org.sufficientlysecure.keychain.pgp.affirmation.LinkedIdentity;
import org.sufficientlysecure.keychain.pgp.affirmation.resources.GenericHttpsResource;
public class AffirmationCreateHttpsStep1Fragment extends Fragment {
@@ -72,7 +72,7 @@ public class AffirmationCreateHttpsStep1Fragment extends Fragment {
return;
}
- String proofNonce = Affirmation.generateNonce();
+ String proofNonce = LinkedIdentity.generateNonce();
String proofText = GenericHttpsResource.generateText(getActivity(),
mAffirmationWizard.mFingerprint, proofNonce);