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

Commit 61b0874b authored by Dmitry Dementyev's avatar Dmitry Dementyev Committed by Android (Google) Code Review
Browse files

Merge "Reset BadRemoteGuess counter after LSKF change." into main

parents fefe3adb 3579b505
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -168,6 +168,9 @@ public class KeySyncTask implements Runnable {
    }

    private void syncKeys() throws RemoteException {
        if (mCredentialUpdated && mRecoverableKeyStoreDb.getBadRemoteGuessCounter(mUserId) != 0) {
            mRecoverableKeyStoreDb.setBadRemoteGuessCounter(mUserId, 0);
        }
        int generation = mPlatformKeyManager.getGenerationId(mUserId);
        if (mCredentialType == LockPatternUtils.CREDENTIAL_TYPE_NONE) {
            // Application keys for the user will not be available for sync.
+43 −0
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ public class KeySyncTaskTest {
    private static final String WRAPPING_KEY_ALIAS = "KeySyncTaskTest/WrappingKey";
    private static final String DATABASE_FILE_NAME = "recoverablekeystore.db";
    private static final int TEST_USER_ID = 1000;
    private static final int TEST_USER_ID_2 = 1002;
    private static final int TEST_RECOVERY_AGENT_UID = 10009;
    private static final int TEST_RECOVERY_AGENT_UID2 = 10010;
    private static final byte[] TEST_VAULT_HANDLE =
@@ -823,6 +824,48 @@ public class KeySyncTaskTest {
        verify(mSnapshotListenersStorage).recoverySnapshotAvailable(TEST_RECOVERY_AGENT_UID2);
    }

    @Test
    public void run_unlock_keepsRemoteLskfVerificationCounter() throws Exception {
        mRecoverableKeyStoreDb.setBadRemoteGuessCounter(TEST_USER_ID, 5);
        mRecoverableKeyStoreDb.setBadRemoteGuessCounter(TEST_USER_ID_2, 4);
        mKeySyncTask = new KeySyncTask(
          mRecoverableKeyStoreDb,
          mRecoverySnapshotStorage,
          mSnapshotListenersStorage,
          TEST_USER_ID,
          CREDENTIAL_TYPE_PIN,
          "12345".getBytes(),
          /*credentialUpdated=*/ false,
          mPlatformKeyManager,
          mTestOnlyInsecureCertificateHelper,
          mMockScrypt);
        mKeySyncTask.run();

        assertThat(mRecoverableKeyStoreDb.getBadRemoteGuessCounter(TEST_USER_ID)).isEqualTo(5);
        assertThat(mRecoverableKeyStoreDb.getBadRemoteGuessCounter(TEST_USER_ID_2)).isEqualTo(4);
    }

    @Test
    public void run_secretChange_resetsRemoteLskfVerificationCounter() throws Exception {
        mRecoverableKeyStoreDb.setBadRemoteGuessCounter(TEST_USER_ID, 5);
        mRecoverableKeyStoreDb.setBadRemoteGuessCounter(TEST_USER_ID_2, 4);
        mKeySyncTask = new KeySyncTask(
          mRecoverableKeyStoreDb,
          mRecoverySnapshotStorage,
          mSnapshotListenersStorage,
          TEST_USER_ID,
          CREDENTIAL_TYPE_PIN,
          "12345".getBytes(),
          /*credentialUpdated=*/ true,
          mPlatformKeyManager,
          mTestOnlyInsecureCertificateHelper,
          mMockScrypt);
        mKeySyncTask.run();

        assertThat(mRecoverableKeyStoreDb.getBadRemoteGuessCounter(TEST_USER_ID)).isEqualTo(0);
        assertThat(mRecoverableKeyStoreDb.getBadRemoteGuessCounter(TEST_USER_ID_2)).isEqualTo(4);
    }

    @Test
    public void run_customLockScreen_RecoveryStatusFailure() throws Exception {
      mKeySyncTask = new KeySyncTask(