aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/NfcTransport.java
diff options
context:
space:
mode:
authorNikita Mikhailov <nikita.s.mikhailov@gmail.com>2016-04-09 13:13:02 +0600
committerNikita Mikhailov <nikita.s.mikhailov@gmail.com>2016-04-14 22:48:01 +0600
commit4d9ce8e95b4604f753aa5f49fe2c243dc73a13a9 (patch)
tree7ae338e2452f3d624e01a9b345fae44dca53d958 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/NfcTransport.java
parentb5eb6468fecfc16ea041eb0f4bf48c37ec2e81f2 (diff)
downloadopen-keychain-4d9ce8e95b4604f753aa5f49fe2c243dc73a13a9.tar.gz
open-keychain-4d9ce8e95b4604f753aa5f49fe2c243dc73a13a9.tar.bz2
open-keychain-4d9ce8e95b4604f753aa5f49fe2c243dc73a13a9.zip
OTG: Refactor persistent connections, naming
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/NfcTransport.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/NfcTransport.java57
1 files changed, 51 insertions, 6 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/NfcTransport.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/NfcTransport.java
index d56f5b5bf..e47ba5360 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/NfcTransport.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/NfcTransport.java
@@ -1,18 +1,22 @@
package org.sufficientlysecure.keychain.smartcard;
+import android.nfc.Tag;
+
+import org.sufficientlysecure.keychain.ui.base.BaseSecurityTokenNfcActivity;
+
import java.io.IOException;
import nordpol.IsoCard;
+import nordpol.android.AndroidCard;
public class NfcTransport implements Transport {
// timeout is set to 100 seconds to avoid cancellation during calculation
private static final int TIMEOUT = 100 * 1000;
- private final IsoCard mIsoCard;
+ private final Tag mTag;
+ private IsoCard mIsoCard;
- public NfcTransport(final IsoCard isoDep) throws IOException {
- this.mIsoCard = isoDep;
- mIsoCard.setTimeout(TIMEOUT);
- mIsoCard.connect();
+ public NfcTransport(Tag tag) {
+ this.mTag = tag;
}
@Override
@@ -26,11 +30,52 @@ public class NfcTransport implements Transport {
@Override
public boolean isConnected() {
- return mIsoCard.isConnected();
+ return mIsoCard != null && mIsoCard.isConnected();
}
@Override
public boolean allowPersistentConnection() {
return false;
}
+
+ /**
+ * Handle NFC communication and return a result.
+ * <p/>
+ * On general communication, see also
+ * http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_annex-a.aspx
+ * <p/>
+ * References to pages are generally related to the OpenPGP Application
+ * on ISO SmartCard Systems specification.
+ */
+ @Override
+ public void connect() throws IOException {
+ mIsoCard = AndroidCard.get(mTag);
+ if (mIsoCard == null) {
+ throw new BaseSecurityTokenNfcActivity.IsoDepNotSupportedException("Tag does not support ISO-DEP (ISO 14443-4)");
+ }
+
+ mIsoCard.setTimeout(TIMEOUT);
+ mIsoCard.connect();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final NfcTransport that = (NfcTransport) o;
+
+ if (mTag != null ? !mTag.equals(that.mTag) : that.mTag != null) return false;
+ if (mIsoCard != null ? !mIsoCard.equals(that.mIsoCard) : that.mIsoCard != null)
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = mTag != null ? mTag.hashCode() : 0;
+ result = 31 * result + (mIsoCard != null ? mIsoCard.hashCode() : 0);
+ return result;
+ }
}