Merge "Changes to add new parameter for Sim Authenticate" into lmp-dev
diff --git a/src/java/com/android/internal/telephony/CommandsInterface.java b/src/java/com/android/internal/telephony/CommandsInterface.java
index e75de0b..3d14b86 100644
--- a/src/java/com/android/internal/telephony/CommandsInterface.java
+++ b/src/java/com/android/internal/telephony/CommandsInterface.java
@@ -1655,10 +1655,14 @@
* Base64 encoded Strings.
* Can support EAP-SIM, EAP-AKA with results encoded per 3GPP TS 31.102.
*
+ * @param authContext is the P2 parameter that specifies the authentication context per 3GPP TS
+ * 31.102 (Section 7.1.2)
* @param data authentication challenge data
+ * @param aid used to determine which application/slot to send the auth command to. See ETSI
+ * 102.221 8.1 and 101.220 4
* @param response a callback message with the String response in the obj field
*/
- public void requestIccSimAuthentication(String data, Message response);
+ public void requestIccSimAuthentication(int authContext, String data, String aid, Message response);
/**
* Get the current Voice Radio Technology.
diff --git a/src/java/com/android/internal/telephony/PhoneSubInfo.java b/src/java/com/android/internal/telephony/PhoneSubInfo.java
index 4da8e9e..0e5dffd 100755
--- a/src/java/com/android/internal/telephony/PhoneSubInfo.java
+++ b/src/java/com/android/internal/telephony/PhoneSubInfo.java
@@ -279,7 +279,15 @@
return null;
}
- return uiccApp.getIccRecords().getIccSimChallengeResponse(data);
+ int authContext = uiccApp.getAuthContext();
+
+ if(authContext == UiccCardApplication.AUTH_CONTEXT_UNDEFINED) {
+ Rlog.e(LOG_TAG, "getIccSimChallengeResponse() authContext undefined for app type " +
+ appType);
+ return null;
+ }
+
+ return uiccApp.getIccRecords().getIccSimChallengeResponse(authContext, data);
}
private void log(String s) {
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index 3b3c245..6089690 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -2496,7 +2496,7 @@
case RIL_REQUEST_SET_UICC_SUBSCRIPTION: ret = responseVoid(p); break;
case RIL_REQUEST_ALLOW_DATA: ret = responseVoid(p); break;
case RIL_REQUEST_GET_HARDWARE_CONFIG: ret = responseHardwareConfig(p); break;
- case RIL_REQUEST_SIM_AUTHENTICATION: ret = responseString(p); break;
+ case RIL_REQUEST_SIM_AUTHENTICATION: ret = responseICC_IO(p); break;
default:
throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
//break;
@@ -4198,10 +4198,13 @@
}
@Override
- public void requestIccSimAuthentication(String data, Message response) {
+ public void requestIccSimAuthentication(int authContext, String data, String aid,
+ Message response) {
RILRequest rr = RILRequest.obtain(RIL_REQUEST_SIM_AUTHENTICATION, response);
+ rr.mParcel.writeInt(authContext);
rr.mParcel.writeString(data);
+ rr.mParcel.writeString(aid);
if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java
index d59d4a1..b804075 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java
@@ -538,7 +538,7 @@
}
@Override
- public void requestIccSimAuthentication(String data, Message response) {
+ public void requestIccSimAuthentication(int authContext, String data, String aid, Message response) {
}
@Override
diff --git a/src/java/com/android/internal/telephony/sip/SipCommandInterface.java b/src/java/com/android/internal/telephony/sip/SipCommandInterface.java
index 6223e48..83f95fb 100644
--- a/src/java/com/android/internal/telephony/sip/SipCommandInterface.java
+++ b/src/java/com/android/internal/telephony/sip/SipCommandInterface.java
@@ -540,7 +540,7 @@
}
@Override
- public void requestIccSimAuthentication(String data, Message response) {
+ public void requestIccSimAuthentication(int authContext, String data, String aid, Message response) {
}
@Override
diff --git a/src/java/com/android/internal/telephony/test/SimulatedCommands.java b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
index 250e507..0aef631 100644
--- a/src/java/com/android/internal/telephony/test/SimulatedCommands.java
+++ b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
@@ -1643,7 +1643,7 @@
}
@Override
- public void requestIccSimAuthentication(String data, Message response) {
+ public void requestIccSimAuthentication(int authContext, String data, String aid, Message response) {
unimplemented(response);
}
diff --git a/src/java/com/android/internal/telephony/uicc/IccRecords.java b/src/java/com/android/internal/telephony/uicc/IccRecords.java
index 2e9bea3..57860ac 100644
--- a/src/java/com/android/internal/telephony/uicc/IccRecords.java
+++ b/src/java/com/android/internal/telephony/uicc/IccRecords.java
@@ -67,7 +67,7 @@
protected boolean mIsVoiceMailFixed = false;
protected int mCountVoiceMessages = 0;
protected String mImsi;
- private String auth_rsp;
+ private IccIoResult auth_rsp;
protected int mMncLength = UNINITIALIZED;
protected int mMailboxIndex = 0; // 0 is no mailbox dailing number associated
@@ -426,7 +426,7 @@
loge("Exception ICC SIM AKA: " + ar.exception);
} else {
try {
- auth_rsp = (String)ar.result;
+ auth_rsp = (IccIoResult)ar.result;
if (DBG) log("ICC SIM AKA: auth_rsp = " + auth_rsp);
} catch (Exception e) {
loge("Failed to parse ICC SIM AKA contents: " + e);
@@ -537,19 +537,17 @@
* Base64 encoded Strings.
* Can support EAP-SIM, EAP-AKA with results encoded per 3GPP TS 31.102.
*
+ * @param authContext parameter P2 that specifies the authentication context per 3GPP TS 31.102 (Section 7.1.2)
* @param data authentication challenge data
* @return challenge response
*/
- public String getIccSimChallengeResponse(String data) {
- if (DBG) log("getIccSimChallengeResponse-data: (original) " + data);
-
- data = data + mParentApp.getAid();
-
- if (DBG) log("getIccSimChallengeResponse-data: (with AID) " + data);
+ public String getIccSimChallengeResponse(int authContext, String data) {
+ if (DBG) log("getIccSimChallengeResponse-data: " + data);
try {
synchronized(mLock) {
- mCi.requestIccSimAuthentication(data, obtainMessage(EVENT_AKA_AUTHENTICATE_DONE));
+ mCi.requestIccSimAuthentication(authContext, data, mParentApp.getAid(),
+ obtainMessage(EVENT_AKA_AUTHENTICATE_DONE));
try {
mLock.wait();
} catch (InterruptedException e) {
@@ -563,7 +561,7 @@
if (DBG) log("getIccSimChallengeResponse-auth_rsp" + auth_rsp);
- return auth_rsp;
+ return IccUtils.bytesToHexString(auth_rsp.payload);
}
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
diff --git a/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java b/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java
index 647ef09..34cdf62 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java
@@ -25,6 +25,7 @@
import android.telephony.Rlog;
import com.android.internal.telephony.CommandsInterface;
+import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.PersoSubState;
@@ -49,10 +50,18 @@
private static final int EVENT_CHANGE_FACILITY_LOCK_DONE = 7;
private static final int EVENT_PIN2_PUK2_DONE = 8;
+ /**
+ * These values are for authContext (parameter P2) per 3GPP TS 31.102 (Section 7.1.2)
+ */
+ public static final int AUTH_CONTEXT_EAP_SIM = 128;
+ public static final int AUTH_CONTEXT_EAP_AKA = 129;
+ public static final int AUTH_CONTEXT_UNDEFINED = -1;
+
private final Object mLock = new Object();
private UiccCard mUiccCard; //parent
private AppState mAppState;
private AppType mAppType;
+ private int mAuthContext;
private PersoSubState mPersoSubState;
private String mAid;
private String mAppLabel;
@@ -84,6 +93,7 @@
mUiccCard = uiccCard;
mAppState = as.app_state;
mAppType = as.app_type;
+ mAuthContext = getAuthContext(mAppType);
mPersoSubState = as.perso_substate;
mAid = as.aid;
mAppLabel = as.app_label;
@@ -116,6 +126,7 @@
AppState oldAppState = mAppState;
PersoSubState oldPersoSubState = mPersoSubState;
mAppType = as.app_type;
+ mAuthContext = getAuthContext(mAppType);
mAppState = as.app_state;
mPersoSubState = as.perso_substate;
mAid = as.aid;
@@ -536,6 +547,39 @@
}
}
+ public int getAuthContext() {
+ synchronized (mLock) {
+ return mAuthContext;
+ }
+ }
+
+ /**
+ * Returns the authContext based on the type of UiccCard.
+ *
+ * @param appType the app type
+ * @return authContext corresponding to the type or AUTH_CONTEXT_UNDEFINED if appType not
+ * supported
+ */
+ private static int getAuthContext(AppType appType) {
+ int authContext;
+
+ switch (appType) {
+ case APPTYPE_SIM:
+ authContext = AUTH_CONTEXT_EAP_SIM;
+ break;
+
+ case APPTYPE_USIM:
+ authContext = AUTH_CONTEXT_EAP_AKA;
+ break;
+
+ default:
+ authContext = AUTH_CONTEXT_UNDEFINED;
+ break;
+ }
+
+ return authContext;
+ }
+
public PersoSubState getPersoSubState() {
synchronized (mLock) {
return mPersoSubState;