Merge "hasKeyPair callable by the cred mng app" into sc-dev

This commit is contained in:
Alex Johnston
2021-03-18 20:06:17 +00:00
committed by Android (Google) Code Review
2 changed files with 15 additions and 5 deletions

View File

@@ -6169,13 +6169,22 @@ public class DevicePolicyManager {
// STOPSHIP(b/174298501): clarify the expected return value following generateKeyPair call.
/**
* Called by a device or profile owner, or delegated certificate installer, to query whether a
* certificate and private key are installed under a given alias.
* This API can be called by the following to query whether a certificate and private key are
* installed under a given alias:
* <ul>
* <li>Device owner</li>
* <li>Profile owner</li>
* <li>Delegated certificate installer</li>
* <li>Credential management app</li>
* </ul>
*
* If called by the credential management app, the alias must exist in the credential
* management app's {@link android.security.AppUriAuthenticationPolicy}.
*
* @param alias The alias under which the key pair is installed.
* @return {@code true} if a key pair with this alias exists, {@code false} otherwise.
* @throws SecurityException if the caller is not a device or profile owner or a delegated
* certificate installer.
* @throws SecurityException if the caller is not a device or profile owner, a delegated
* certificate installer or the credential management app.
* @see #setDelegatedScopes
* @see #DELEGATION_CERT_INSTALL
*/

View File

@@ -5482,7 +5482,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
@Override
public boolean hasKeyPair(String callerPackage, String alias) {
final CallerIdentity caller = getCallerIdentity(callerPackage);
Preconditions.checkCallAuthorization(canManageCertificates(caller));
Preconditions.checkCallAuthorization(canManageCertificates(caller)
|| isCredentialManagementApp(caller, alias));
return mInjector.binderWithCleanCallingIdentity(() -> {
try (KeyChainConnection keyChainConnection =