From 93d002ca5f94facfec75359999c910f914d7b7c4 Mon Sep 17 00:00:00 2001 From: Robert Berry Date: Wed, 21 Mar 2018 21:57:07 +0000 Subject: [PATCH] Unhide RecoveryController#getRootCertificates() This is so we can add a GTS test to affirm that GMS devices include the Google Cloud Key Vault root certificate. Test: runtest frameworks-core -p android.security.keystore.recovery Bug: 74621045 Change-Id: Ib6431f5739f3dff066832e6aa300dd9da5bc0727 --- api/system-current.txt | 1 + .../security/keystore/recovery/RecoveryController.java | 6 ++++++ .../keystore/recovery/TrustedRootCertificates.java | 7 +++++-- .../keystore/recovery/TrustedRootCertificatesTest.java | 6 +++--- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index 4c03142db0d86..7963475d7fd81 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4371,6 +4371,7 @@ package android.security.keystore.recovery { method public int[] getRecoverySecretTypes() throws android.security.keystore.recovery.InternalRecoveryServiceException; method public deprecated int getRecoveryStatus(java.lang.String, java.lang.String) throws android.security.keystore.recovery.InternalRecoveryServiceException; method public int getRecoveryStatus(java.lang.String) throws android.security.keystore.recovery.InternalRecoveryServiceException; + method public java.util.Map getRootCertificates(); method public java.security.Key importKey(java.lang.String, byte[]) throws android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.LockScreenRequiredException; method public deprecated void initRecoveryService(java.lang.String, byte[]) throws java.security.cert.CertificateException, android.security.keystore.recovery.InternalRecoveryServiceException; method public void initRecoveryService(java.lang.String, byte[], byte[]) throws java.security.cert.CertificateException, android.security.keystore.recovery.InternalRecoveryServiceException; diff --git a/core/java/android/security/keystore/recovery/RecoveryController.java b/core/java/android/security/keystore/recovery/RecoveryController.java index 10c1c9ee1b908..c9a74bf69bb9b 100644 --- a/core/java/android/security/keystore/recovery/RecoveryController.java +++ b/core/java/android/security/keystore/recovery/RecoveryController.java @@ -35,6 +35,7 @@ import java.security.Key; import java.security.UnrecoverableKeyException; import java.security.cert.CertPath; import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -654,6 +655,11 @@ public class RecoveryController { return RecoverySession.newInstance(this); } + @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) + public Map getRootCertificates() { + return TrustedRootCertificates.getRootCertificates(); + } + InternalRecoveryServiceException wrapUnexpectedServiceSpecificException( ServiceSpecificException e) { if (e.errorCode == ERROR_SERVICE_INTERNAL_ERROR) { diff --git a/core/java/android/security/keystore/recovery/TrustedRootCertificates.java b/core/java/android/security/keystore/recovery/TrustedRootCertificates.java index 4bdde8a2f5b24..a65b40f7b10c1 100644 --- a/core/java/android/security/keystore/recovery/TrustedRootCertificates.java +++ b/core/java/android/security/keystore/recovery/TrustedRootCertificates.java @@ -32,7 +32,7 @@ import java.util.Map; * * @hide */ -public class TrustedRootCertificates { +public final class TrustedRootCertificates { public static final String GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_ALIAS = "GoogleCloudKeyVaultServiceV1"; @@ -83,7 +83,7 @@ public class TrustedRootCertificates { /** * Returns all available root certificates, keyed by alias. */ - public static Map listRootCertificates() { + public static Map getRootCertificates() { return new ArrayMap(ALL_ROOT_CERTIFICATES); } @@ -114,4 +114,7 @@ public class TrustedRootCertificates { throw new RuntimeException(e); } } + + // Statics only + private TrustedRootCertificates() {} } diff --git a/core/tests/coretests/src/android/security/keystore/recovery/TrustedRootCertificatesTest.java b/core/tests/coretests/src/android/security/keystore/recovery/TrustedRootCertificatesTest.java index 3b4ad38011358..a5a3ca90d9acb 100644 --- a/core/tests/coretests/src/android/security/keystore/recovery/TrustedRootCertificatesTest.java +++ b/core/tests/coretests/src/android/security/keystore/recovery/TrustedRootCertificatesTest.java @@ -16,7 +16,7 @@ package android.security.keystore.recovery; -import static android.security.keystore.recovery.TrustedRootCertificates.listRootCertificates; +import static android.security.keystore.recovery.TrustedRootCertificates.getRootCertificates; import static org.junit.Assert.assertTrue; @@ -36,8 +36,8 @@ public class TrustedRootCertificatesTest { "GoogleCloudKeyVaultServiceV1"; @Test - public void listRootCertificates_listsGoogleCloudVaultV1Certificate() { - Map certificates = listRootCertificates(); + public void getRootCertificates_listsGoogleCloudVaultV1Certificate() { + Map certificates = getRootCertificates(); assertTrue(certificates.containsKey(GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_ALIAS)); }