aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain
diff options
context:
space:
mode:
authorJoey Castillo <jose.castillo@gmail.com>2015-04-14 16:19:28 -0400
committerJoey Castillo <jose.castillo@gmail.com>2015-04-14 16:19:28 -0400
commitf85befd98284663bf58cf9eb42238e2f0f4b2459 (patch)
treebd09a2464596a8c5c39428fe5e2f7d91b9931d9d /OpenKeychain
parentf981c36bf4124f892c5b4c75f89437f320772fbd (diff)
downloadopen-keychain-f85befd98284663bf58cf9eb42238e2f0f4b2459.tar.gz
open-keychain-f85befd98284663bf58cf9eb42238e2f0f4b2459.tar.bz2
open-keychain-f85befd98284663bf58cf9eb42238e2f0f4b2459.zip
Consolidate PIN verify operation in nfcVerifyPIN method.
Diffstat (limited to 'OpenKeychain')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java72
1 files changed, 28 insertions, 44 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java
index 1faa5f6b5..b36b9b89e 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseNfcActivity.java
@@ -301,28 +301,7 @@ public abstract class BaseNfcActivity extends BaseActivity {
* @return a big integer representing the MPI for the given hash
*/
public byte[] nfcCalculateSignature(byte[] hash, int hashAlgo) throws IOException {
-
- if (mPin != null) {
-
- byte[] pin = new String(mPin.getCharArray()).getBytes();
- // SW1/2 0x9000 is the generic "ok" response, which we expect most of the time.
- // See specification, page 51
- String accepted = "9000";
-
- // Command APDU for VERIFY command (page 32)
- String login =
- "00" // CLA
- + "20" // INS
- + "00" // P1
- + "81" // P2 (PW1 with mode 81 for signing)
- + String.format("%02x", pin.length) // Lc
- + Hex.toHexString(pin);
- if (!nfcCommunicate(login).equals(accepted)) { // login
- handlePinError();
- throw new IOException("Bad PIN!");
- }
-
- }
+ nfcVerifyPIN(0x81); // (Verify PW1 with mode 81 for signing)
// dsi, including Lc
String dsi;
@@ -416,28 +395,7 @@ public abstract class BaseNfcActivity extends BaseActivity {
* @return the decoded session key
*/
public byte[] nfcDecryptSessionKey(byte[] encryptedSessionKey) throws IOException {
-
- if (mPin != null) {
-
- byte[] pin = new String(mPin.getCharArray()).getBytes();
- // SW1/2 0x9000 is the generic "ok" response, which we expect most of the time.
- // See specification, page 51
- String accepted = "9000";
-
- // Command APDU for VERIFY command (page 32)
- String login =
- "00" // CLA
- + "20" // INS
- + "00" // P1
- + "82" // P2 (PW1 with mode 82 for decryption)
- + String.format("%02x", pin.length) // Lc
- + Hex.toHexString(pin);
- if (!nfcCommunicate(login).equals(accepted)) { // login
- handlePinError();
- throw new IOException("Bad PIN!");
- }
-
- }
+ nfcVerifyPIN(0x82); // (Verify PW1 with mode 82 for decryption)
String firstApdu = "102a8086fe";
String secondApdu = "002a808603";
@@ -462,6 +420,32 @@ public abstract class BaseNfcActivity extends BaseActivity {
return Hex.decode(decryptedSessionKey);
}
+ /** Verifies the user's PW1 with the appropriate mode.
+ *
+ * @param mode This is 0x81 for signing, 0x82 for everything else
+ */
+ public void nfcVerifyPIN(int mode) throws IOException {
+ if (mPin != null) {
+ byte[] pin = new String(mPin.getCharArray()).getBytes();
+ // SW1/2 0x9000 is the generic "ok" response, which we expect most of the time.
+ // See specification, page 51
+ String accepted = "9000";
+
+ // Command APDU for VERIFY command (page 32)
+ String login =
+ "00" // CLA
+ + "20" // INS
+ + "00" // P1
+ + String.format("%02x", mode) // P2
+ + String.format("%02x", pin.length) // Lc
+ + Hex.toHexString(pin);
+ if (!nfcCommunicate(login).equals(accepted)) { // login
+ handlePinError();
+ throw new IOException("Bad PIN!");
+ }
+ }
+ }
+
/**
* Prints a message to the screen
*