浏览代码

Display supported certificates (GSMA Test or Prod) in EuiccInfoActivity

Peter Cai 1 年之前
父节点
当前提交
ce7fb29c14

+ 27 - 0
app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt

@@ -16,6 +16,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
 import im.angry.openeuicc.common.R
 import im.angry.openeuicc.util.*
 import kotlinx.coroutines.launch
+import net.typeblog.lpac_jni.impl.DEFAULT_PKID_GSMA_RSP2_ROOT_CI1
+import net.typeblog.lpac_jni.impl.PKID_GSMA_TEST_CI
 
 class EuiccInfoActivity : BaseEuiccAccessActivity() {
     private lateinit var swipeRefresh: SwipeRefreshLayout
@@ -105,6 +107,31 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() {
                 euiccInfo2?.freeNvram?.let { formatFreeSpace(it) } ?: unknownStr
             ))
 
+            euiccInfoItems.add(
+                Pair(
+                    getString(R.string.euicc_info_gsma_prod),
+                    if (euiccInfo2?.euiccCiPKIdListForSigning?.contains(
+                            DEFAULT_PKID_GSMA_RSP2_ROOT_CI1
+                        ) == true
+                    ) {
+                        getString(R.string.supported)
+                    } else {
+                        getString(R.string.unsupported)
+                    }
+                )
+            )
+
+            euiccInfoItems.add(
+                Pair(
+                    getString(R.string.euicc_info_gsma_test),
+                    if (PKID_GSMA_TEST_CI.any { euiccInfo2?.euiccCiPKIdListForSigning?.contains(it) == true }) {
+                        getString(R.string.supported)
+                    } else {
+                        getString(R.string.unsupported)
+                    }
+                )
+            )
+
             infoList.adapter!!.notifyDataSetChanged()
 
             swipeRefresh.isRefreshing = false

+ 5 - 0
app-common/src/main/res/values/strings.xml

@@ -78,6 +78,11 @@
     <string name="euicc_info_sas_accreditation_number">SAS Accreditation Number</string>
     <string name="euicc_info_pp_version">Protected Profile Version</string>
     <string name="euicc_info_free_nvram">Free NVRAM (eSIM profile storage)</string>
+    <string name="euicc_info_gsma_prod">GSMA Production Certificate</string>
+    <string name="euicc_info_gsma_test">GSMA Test Certificate</string>
+
+    <string name="supported">Supported</string>
+    <string name="unsupported">Unsupported</string>
 
     <string name="logs_save">Save</string>
     <string name="logs_filename_template">Logs at %s</string>

+ 3 - 0
libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/impl/RootCertificates.kt

@@ -7,6 +7,9 @@ import java.security.cert.CertificateFactory
 
 const val DEFAULT_PKID_GSMA_RSP2_ROOT_CI1 = "81370f5125d0b1d408d4c3b232e6d25e795bebfb"
 
+val PKID_GSMA_TEST_CI =
+    arrayOf("34eecf13156518d48d30bdf06853404d115f955d", "2209f61cd9ec5c9c854e787341ff83ecf9776a5b")
+
 private fun getCertificate(keyId: String): Certificate? =
     KNOWN_CI_CERTS[keyId]?.toByteArray()?.let { cert ->
         ByteArrayInputStream(cert).use { stream ->