Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8f26a2c authored by Nazanin Bakhshi's avatar Nazanin Bakhshi Committed by Android (Google) Code Review
Browse files

Merge "Fix how certificate is parsed from CarrierConfig as ByteArray" into qt-qpr1-dev

parents 28f319dd 67f33b48
Loading
Loading
Loading
Loading
+33 −38
Original line number Diff line number Diff line
@@ -66,8 +66,6 @@ import com.android.internal.telephony.uicc.UiccSlot;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;

@@ -967,39 +965,35 @@ public class SubscriptionInfoUpdater extends Handler {
            return;
        }

        if (!isCarrierServicePackage(phoneId, configPackageName)) {
            loge("Cannot manage subId=" + currentSubId + ", carrierPackage=" + configPackageName);
            return;
        }

        ContentValues cv = new ContentValues();
        boolean isOpportunistic = config.getBoolean(
                CarrierConfigManager.KEY_IS_OPPORTUNISTIC_SUBSCRIPTION_BOOL, false);
        if (currentSubInfo.isOpportunistic() != isOpportunistic) {
            if (DBG) logd("Set SubId=" + currentSubId + " isOpportunistic=" + isOpportunistic);
            cv.put(SubscriptionManager.IS_OPPORTUNISTIC, isOpportunistic ? "1" : "0");
        }
        ParcelUuid groupUuid = null;

        // carrier certificates are not subscription-specific, so we want to load them even if
        // this current package is not a CarrierServicePackage
        String[] certs = config.getStringArray(
            CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY);
        if (certs != null) {
            UiccAccessRule[] carrierConfigAccessRules = new UiccAccessRule[certs.length];
            try {
            for (int i = 0; i < certs.length; i++) {
                    carrierConfigAccessRules[i] = new UiccAccessRule(
                        MessageDigest.getInstance("SHA-256").digest(certs[i].getBytes()), null, 0);
                }
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException("for setCarrierConfigAccessRules, SHA-256 must exist",
                    e);
                carrierConfigAccessRules[i] = new UiccAccessRule(IccUtils.hexStringToBytes(
                    certs[i]), null, 0);
            }
            cv.put(SubscriptionManager.ACCESS_RULES_FROM_CARRIER_CONFIGS,
                    UiccAccessRule.encodeRules(carrierConfigAccessRules));
        }

        if (!isCarrierServicePackage(phoneId, configPackageName)) {
            loge("Cannot manage subId=" + currentSubId + ", carrierPackage=" + configPackageName);
        } else {
            boolean isOpportunistic = config.getBoolean(
                    CarrierConfigManager.KEY_IS_OPPORTUNISTIC_SUBSCRIPTION_BOOL, false);
            if (currentSubInfo.isOpportunistic() != isOpportunistic) {
                if (DBG) logd("Set SubId=" + currentSubId + " isOpportunistic=" + isOpportunistic);
                cv.put(SubscriptionManager.IS_OPPORTUNISTIC, isOpportunistic ? "1" : "0");
            }

            String groupUuidString =
                config.getString(CarrierConfigManager.KEY_SUBSCRIPTION_GROUP_UUID_STRING, "");
        ParcelUuid groupUuid = null;
            if (!TextUtils.isEmpty(groupUuidString)) {
                try {
                    // Update via a UUID Structure to ensure consistent formatting
@@ -1021,6 +1015,7 @@ public class SubscriptionInfoUpdater extends Handler {
                    loge("Invalid Group UUID=" + groupUuidString);
                }
            }
        }
        if (cv.size() > 0 && mContext.getContentResolver().update(SubscriptionManager
                    .getUriForSubscriptionId(currentSubId), cv, null, null) > 0) {
            sc.refreshCachedActiveSubscriptionInfoList();
+6 −11
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import android.test.suitebuilder.annotation.SmallTest;
import com.android.internal.telephony.euicc.EuiccController;
import com.android.internal.telephony.uicc.IccFileHandler;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.UiccSlot;

import org.junit.After;
@@ -66,8 +67,6 @@ import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -764,17 +763,13 @@ public class SubscriptionInfoUpdaterTest extends TelephonyTest {
    @SmallTest
    public void testUpdateFromCarrierConfigCarrierCertificates() {
        String[] certs = new String[2];
        certs[0] = "testCertificate";
        certs[1] = "testCertificate2";
        certs[0] = "d1f1";
        certs[1] = "b5d6";

        UiccAccessRule[] carrierConfigAccessRules = new UiccAccessRule[certs.length];
        try {
        for (int i = 0; i < certs.length; i++) {
            carrierConfigAccessRules[i] = new UiccAccessRule(
                    MessageDigest.getInstance("SHA-256").digest(certs[i].getBytes()), null, 0);
            }
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("for setCarrierConfigAccessRules, SHA-256 must exist", e);
                IccUtils.hexStringToBytes(certs[i]), null, 0);
        }

        final int phoneId = mPhone.getPhoneId();