Merge "Keystore 2.0: Integrate onLockScreenEvent." am: 01460b0bd8 am: 2670006095 am: 396957acad

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1546381

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I801c764ca7c4927ff7ac57e6a9b130e803fa8ebd
This commit is contained in:
Treehugger Robot
2021-01-20 23:25:35 +00:00
committed by Automerger Merge Worker
3 changed files with 38 additions and 0 deletions

View File

@@ -17,11 +17,13 @@
package android.security;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.hardware.security.keymint.HardwareAuthToken;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceSpecificException;
import android.security.authorization.IKeystoreAuthorization;
import android.security.authorization.LockScreenEvent;
import android.system.keystore2.ResponseCode;
import android.util.Log;
@@ -75,4 +77,31 @@ public class Authorization {
return addAuthToken(AuthTokenUtils.toHardwareAuthToken(authToken));
}
/**
* Informs keystore2 about lock screen event.
*
* @param locked - whether it is a lock (true) or unlock (false) event
* @param syntheticPassword - if it is an unlock event with the password, pass the synthetic
* password provided by the LockSettingService
*
* @return 0 if successful or a {@code ResponseCode}.
*/
public int onLockScreenEvent(@NonNull boolean locked, @NonNull int userId,
@Nullable byte[] syntheticPassword) {
if (!android.security.keystore2.AndroidKeyStoreProvider.isInstalled()) return 0;
try {
if (locked) {
getService().onLockScreenEvent(LockScreenEvent.LOCK, userId, null);
} else {
getService().onLockScreenEvent(LockScreenEvent.UNLOCK, userId, syntheticPassword);
}
return 0;
} catch (RemoteException e) {
Log.w(TAG, "Can not connect to keystore", e);
return SYSTEM_ERROR;
} catch (ServiceSpecificException e) {
return e.errorCode;
}
}
}

View File

@@ -88,6 +88,7 @@ import android.os.storage.StorageManager;
import android.provider.Settings;
import android.provider.Settings.Secure;
import android.provider.Settings.SettingNotFoundException;
import android.security.Authorization;
import android.security.KeyStore;
import android.security.keystore.AndroidKeyStoreProvider;
import android.security.keystore.KeyProperties;
@@ -1268,6 +1269,7 @@ public class LockSettingsService extends ILockSettings.Stub {
private void unlockKeystore(byte[] password, int userHandle) {
if (DEBUG) Slog.v(TAG, "Unlock keystore for user: " + userHandle);
new Authorization().onLockScreenEvent(false, userHandle, password);
// TODO(b/120484642): Update keystore to accept byte[] passwords
String passwordString = password == null ? null : new String(password);
final KeyStore ks = KeyStore.getInstance();

View File

@@ -55,6 +55,7 @@ import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.security.Authorization;
import android.security.KeyStore;
import android.service.trust.TrustAgentService;
import android.text.TextUtils;
@@ -188,6 +189,8 @@ public class TrustManagerService extends SystemService {
private boolean mTrustAgentsCanRun = false;
private int mCurrentUser = UserHandle.USER_SYSTEM;
private Authorization mAuthorizationService;
public TrustManagerService(Context context) {
super(context);
mContext = context;
@@ -197,6 +200,7 @@ public class TrustManagerService extends SystemService {
mStrongAuthTracker = new StrongAuthTracker(context);
mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
mSettingsObserver = new SettingsObserver(mHandler);
mAuthorizationService = new Authorization();
}
@Override
@@ -699,11 +703,13 @@ public class TrustManagerService extends SystemService {
if (changed) {
dispatchDeviceLocked(userId, locked);
mAuthorizationService.onLockScreenEvent(locked, userId, null);
KeyStore.getInstance().onUserLockedStateChanged(userId, locked);
// Also update the user's profiles who have unified challenge, since they
// share the same unlocked state (see {@link #isDeviceLocked(int)})
for (int profileHandle : mUserManager.getEnabledProfileIds(userId)) {
if (mLockPatternUtils.isManagedProfileWithUnifiedChallenge(profileHandle)) {
mAuthorizationService.onLockScreenEvent(locked, profileHandle, null);
KeyStore.getInstance().onUserLockedStateChanged(profileHandle, locked);
}
}
@@ -1255,6 +1261,7 @@ public class TrustManagerService extends SystemService {
mDeviceLockedForUser.put(userId, locked);
}
mAuthorizationService.onLockScreenEvent(locked, userId, null);
KeyStore.getInstance().onUserLockedStateChanged(userId, locked);
if (locked) {