aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-01-13 20:36:37 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2015-01-13 20:36:37 +0100
commit4b5de13e4297d688901e8070f627a9a213097bb5 (patch)
tree641f2844c4467d928791e55559601456d2403e84 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp
parent08ea4e1b7e0547bdc3049125817710f226550a55 (diff)
downloadopen-keychain-4b5de13e4297d688901e8070f627a9a213097bb5.tar.gz
open-keychain-4b5de13e4297d688901e8070f627a9a213097bb5.tar.bz2
open-keychain-4b5de13e4297d688901e8070f627a9a213097bb5.zip
certification of the first linked identity packet!
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/AffirmationResource.java17
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java22
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/resources/GenericHttpsResource.java5
3 files changed, 35 insertions, 9 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/AffirmationResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/AffirmationResource.java
index 45919a89a..ffe89931a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/AffirmationResource.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/AffirmationResource.java
@@ -13,13 +13,14 @@ import org.sufficientlysecure.keychain.util.Log;
import java.net.URI;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public abstract class AffirmationResource {
- protected final URI mUri;
+ protected final URI mSubUri;
protected final Set<String> mFlags;
protected final HashMap<String,String> mParams;
@@ -29,7 +30,19 @@ public abstract class AffirmationResource {
protected AffirmationResource(Set<String> flags, HashMap<String,String> params, URI uri) {
mFlags = flags;
mParams = params;
- mUri = uri;
+ mSubUri = uri;
+ }
+
+ public Set<String> getFlags () {
+ return new HashSet<String>(mFlags);
+ }
+
+ public HashMap<String,String> getParams () {
+ return new HashMap<String,String>(mParams);
+ }
+
+ public URI getSubUri () {
+ return mSubUri;
}
public static String generate (Context context, byte[] fingerprint, String nonce) {
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 1e27b2c64..ee9933da3 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
@@ -1,12 +1,13 @@
package org.sufficientlysecure.keychain.pgp.affirmation;
import org.spongycastle.bcpg.UserAttributeSubpacket;
+import org.spongycastle.openpgp.PGPUserAttributeSubpacketVector;
import org.spongycastle.util.Strings;
import org.spongycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
+import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute;
import org.sufficientlysecure.keychain.util.Log;
-import java.io.Serializable;
import java.net.URI;
import java.util.Arrays;
import java.util.HashMap;
@@ -15,7 +16,7 @@ import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
-public class LinkedIdentity implements Serializable {
+public class LinkedIdentity {
protected byte[] mData;
public final String mNonce;
@@ -41,7 +42,7 @@ public class LinkedIdentity implements Serializable {
this(null, nonce, flags, params, subUri);
}
- public byte[] encode() {
+ public byte[] getEncoded() {
if (mData != null) {
return mData;
}
@@ -79,11 +80,14 @@ public class LinkedIdentity implements Serializable {
b.append(mSubUri);
byte[] nonceBytes = Hex.decode(mNonce);
+ if (nonceBytes.length != 12) {
+ throw new AssertionError("nonce must be 12 bytes");
+ }
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);
+ System.arraycopy(data, 0, result, 12, data.length);
return result;
}
@@ -91,7 +95,7 @@ public class LinkedIdentity implements Serializable {
/** This method parses an affirmation from a UserAttributeSubpacket, or returns null if the
* subpacket can not be parsed as a valid affirmation.
*/
- public static LinkedIdentity parseAffirmation(UserAttributeSubpacket subpacket) {
+ static LinkedIdentity parseAffirmation(UserAttributeSubpacket subpacket) {
if (subpacket.getType() != 100) {
return null;
}
@@ -148,6 +152,14 @@ public class LinkedIdentity implements Serializable {
}
+ public static LinkedIdentity fromResource (AffirmationResource res, String nonce) {
+ return new LinkedIdentity(nonce, res.getFlags(), res.getParams(), res.getSubUri());
+ }
+
+ public WrappedUserAttribute toUserAttribute () {
+ return WrappedUserAttribute.fromSubpacket(WrappedUserAttribute.UAT_LINKED_ID, getEncoded());
+ }
+
public static String generateNonce() {
// TODO make this actually random
// byte[] data = new byte[96];
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 8f4d0c41b..74c0689b5 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
@@ -9,6 +9,7 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.pgp.affirmation.AffirmationResource;
+import org.sufficientlysecure.keychain.pgp.affirmation.LinkedIdentity;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
@@ -38,13 +39,13 @@ public class GenericHttpsResource extends AffirmationResource {
@Override
protected String fetchResource (OperationLog log, int indent) {
- log.add(LogType.MSG_LV_FETCH, indent, mUri.toString());
+ log.add(LogType.MSG_LV_FETCH, indent, mSubUri.toString());
indent += 1;
try {
HttpsURLConnection conn = null;
- URL url = mUri.toURL();
+ URL url = mSubUri.toURL();
int status = 0;
int redirects = 0;