aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java100
1 files changed, 15 insertions, 85 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java
index 6228b29ec..fb3f2433a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java
@@ -19,27 +19,10 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-public abstract class LinkedCookieResource {
-
- protected final URI mSubUri;
- protected final Set<String> mFlags;
- protected final HashMap<String,String> mParams;
-
- static Pattern magicPattern =
- Pattern.compile("\\[Verifying my PGP key: openpgp4fpr:([a-zA-Z0-9]+)#([a-zA-Z0-9]+)\\]");
+public abstract class LinkedCookieResource extends LinkedResource {
protected LinkedCookieResource(Set<String> flags, HashMap<String, String> params, URI uri) {
- mFlags = flags;
- mParams = params;
- mSubUri = uri;
- }
-
- public Set<String> getFlags () {
- return new HashSet<String>(mFlags);
- }
-
- public HashMap<String,String> getParams () {
- return new HashMap<String,String>(mParams);
+ super(flags, params, uri);
}
public URI toUri () {
@@ -82,10 +65,10 @@ public abstract class LinkedCookieResource {
return mSubUri;
}
- public static String generate (Context context, byte[] fingerprint, String nonce) {
+ public static String generate (Context context, byte[] fingerprint, int nonce) {
return "[Verifying my PGP key: openpgp4fpr:"
- + KeyFormattingUtils.convertFingerprintToHex(fingerprint) + "#" + nonce + "]";
+ + KeyFormattingUtils.convertFingerprintToHex(fingerprint) + "#" + Integer.toHexString(nonce) + "]";
}
@@ -129,7 +112,17 @@ public abstract class LinkedCookieResource {
}
String candidateFp = match.group(1).toLowerCase();
- int nonceCandidate = Integer.parseInt(match.group(2).toLowerCase(), 16);
+ try {
+ int nonceCandidate = Integer.parseInt(match.group(2).toLowerCase(), 16);
+
+ if (nonce != nonceCandidate) {
+ log.add(LogType.MSG_LV_NONCE_ERROR, indent);
+ return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log);
+ }
+ } catch (NumberFormatException e) {
+ log.add(LogType.MSG_LV_NONCE_ERROR, indent);
+ return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log);
+ }
String fp = KeyFormattingUtils.convertFingerprintToHex(fingerprint);
@@ -139,72 +132,9 @@ public abstract class LinkedCookieResource {
}
log.add(LogType.MSG_LV_FP_OK, indent);
- if (nonce != nonceCandidate) {
- log.add(LogType.MSG_LV_NONCE_ERROR, indent);
- return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log);
- }
-
log.add(LogType.MSG_LV_NONCE_OK, indent);
return new LinkedVerifyResult(LinkedVerifyResult.RESULT_OK, log);
}
- protected static LinkedCookieResource fromRawLinkedId (RawLinkedIdentity id) {
- return fromUri(id.mNonce, id.mUri);
- }
-
- protected static LinkedCookieResource fromUri (int nonce, URI uri) {
-
- if ("pgpid".equals(uri.getScheme())) {
- Log.e(Constants.TAG, "unknown uri scheme in (suspected) linked id packet");
- return null;
- }
-
- if (!uri.isOpaque()) {
- Log.e(Constants.TAG, "non-opaque uri in (suspected) linked id packet");
- return null;
- }
-
- String specific = uri.getSchemeSpecificPart();
- if (!specific.contains("@")) {
- Log.e(Constants.TAG, "unknown uri scheme in linked id 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 findResourceType(nonce, flags, params, subUri);
-
- }
-
- protected static LinkedCookieResource findResourceType (int nonce, Set<String> flags,
- HashMap<String,String> params,
- URI subUri) {
-
- LinkedCookieResource res;
-
- res = GenericHttpsResource.create(flags, params, subUri);
- if (res != null) {
- return res;
- }
-
- return new UnknownResource(flags, params, subUri);
-
- }
-
}