Loading services/core/java/com/android/server/locksettings/recoverablekeystore/PlatformKeyManager.java +1 −4 Original line number Diff line number Diff line Loading @@ -400,10 +400,7 @@ public class PlatformKeyManager { * @throws IOException if there was an issue with local database update. */ private void setGenerationId(int userId, int generationId) throws IOException { long updatedRows = mDatabase.setPlatformKeyGenerationId(userId, generationId); if (updatedRows < 0) { throw new IOException("Failed to set the platform key in the local DB."); } mDatabase.setPlatformKeyGenerationId(userId, generationId); } /** Loading services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java +25 −11 Original line number Diff line number Diff line Loading @@ -322,19 +322,18 @@ public class RecoverableKeyStoreDb { /** * Sets the {@code generationId} of the platform key for user {@code userId}. * * @return The primary key ID of the relation. * @return The number of updated rows. */ public long setPlatformKeyGenerationId(int userId, int generationId) { SQLiteDatabase db = mKeyStoreDbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(UserMetadataEntry.COLUMN_NAME_USER_ID, userId); values.put(UserMetadataEntry.COLUMN_NAME_PLATFORM_KEY_GENERATION_ID, generationId); long result = db.replace( UserMetadataEntry.TABLE_NAME, /*nullColumnHack=*/ null, values); if (result != -1) { invalidateKeysWithOldGenerationId(userId, generationId); } return result; String selection = UserMetadataEntry.COLUMN_NAME_USER_ID + " = ?"; String[] selectionArguments = new String[] {String.valueOf(userId)}; ensureUserMetadataEntryExists(userId); return db.update(UserMetadataEntry.TABLE_NAME, values, selection, selectionArguments); } /** Loading Loading @@ -377,16 +376,19 @@ public class RecoverableKeyStoreDb { /** * Sets the {@code serialNumber} for the user {@code userId}. * * @return The primary key of the inserted row, or -1 if failed. * @return The number of updated rows. */ public long setUserSerialNumber(int userId, long serialNumber) { SQLiteDatabase db = mKeyStoreDbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(UserMetadataEntry.COLUMN_NAME_USER_ID, userId); values.put(UserMetadataEntry.COLUMN_NAME_USER_SERIAL_NUMBER, serialNumber); long result = db.replace( UserMetadataEntry.TABLE_NAME, /*nullColumnHack=*/ null, values); return result; String selection = UserMetadataEntry.COLUMN_NAME_USER_ID + " = ?"; String[] selectionArguments = new String[] {String.valueOf(userId)}; ensureUserMetadataEntryExists(userId); return db.update(UserMetadataEntry.TABLE_NAME, values, selection, selectionArguments); } /** Loading Loading @@ -1325,6 +1327,18 @@ public class RecoverableKeyStoreDb { values, SQLiteDatabase.CONFLICT_IGNORE); } /** * Creates an empty row in the user metadata table if such a row doesn't exist for * the given userId, so db.update will succeed. */ private void ensureUserMetadataEntryExists(int userId) { SQLiteDatabase db = mKeyStoreDbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(UserMetadataEntry.COLUMN_NAME_USER_ID, userId); db.insertWithOnConflict(UserMetadataEntry.TABLE_NAME, /*nullColumnHack=*/ null, values, SQLiteDatabase.CONFLICT_IGNORE); } /** * Closes all open connections to the database. */ Loading services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,32 @@ public class RecoverableKeyStoreDbTest { assertEquals(serialNumber, mRecoverableKeyStoreDb.getUserSerialNumbers().get(userId)); } @Test public void setUserSerialNumbers_keepsPlatformKeyGenerationId() { int userId = 42; int generationId = 110; Long serialNumber = 10L; mRecoverableKeyStoreDb.setPlatformKeyGenerationId(userId, generationId); mRecoverableKeyStoreDb.setUserSerialNumber(userId, serialNumber); assertEquals(generationId, mRecoverableKeyStoreDb.getPlatformKeyGenerationId(userId)); } @Test public void setPlatformKeyGenerationId_keepsUserSerialNumber() { int userId = 42; int generationId = 110; Long serialNumber = 10L; mRecoverableKeyStoreDb.setPlatformKeyGenerationId(userId, generationId); mRecoverableKeyStoreDb.setUserSerialNumber(userId, serialNumber); mRecoverableKeyStoreDb.setPlatformKeyGenerationId(userId, generationId + 1); assertEquals(serialNumber, mRecoverableKeyStoreDb.getUserSerialNumbers().get(userId)); } @Test public void removeUserFromAllTables_removesData() throws Exception { int userId = 12; Loading Loading
services/core/java/com/android/server/locksettings/recoverablekeystore/PlatformKeyManager.java +1 −4 Original line number Diff line number Diff line Loading @@ -400,10 +400,7 @@ public class PlatformKeyManager { * @throws IOException if there was an issue with local database update. */ private void setGenerationId(int userId, int generationId) throws IOException { long updatedRows = mDatabase.setPlatformKeyGenerationId(userId, generationId); if (updatedRows < 0) { throw new IOException("Failed to set the platform key in the local DB."); } mDatabase.setPlatformKeyGenerationId(userId, generationId); } /** Loading
services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb.java +25 −11 Original line number Diff line number Diff line Loading @@ -322,19 +322,18 @@ public class RecoverableKeyStoreDb { /** * Sets the {@code generationId} of the platform key for user {@code userId}. * * @return The primary key ID of the relation. * @return The number of updated rows. */ public long setPlatformKeyGenerationId(int userId, int generationId) { SQLiteDatabase db = mKeyStoreDbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(UserMetadataEntry.COLUMN_NAME_USER_ID, userId); values.put(UserMetadataEntry.COLUMN_NAME_PLATFORM_KEY_GENERATION_ID, generationId); long result = db.replace( UserMetadataEntry.TABLE_NAME, /*nullColumnHack=*/ null, values); if (result != -1) { invalidateKeysWithOldGenerationId(userId, generationId); } return result; String selection = UserMetadataEntry.COLUMN_NAME_USER_ID + " = ?"; String[] selectionArguments = new String[] {String.valueOf(userId)}; ensureUserMetadataEntryExists(userId); return db.update(UserMetadataEntry.TABLE_NAME, values, selection, selectionArguments); } /** Loading Loading @@ -377,16 +376,19 @@ public class RecoverableKeyStoreDb { /** * Sets the {@code serialNumber} for the user {@code userId}. * * @return The primary key of the inserted row, or -1 if failed. * @return The number of updated rows. */ public long setUserSerialNumber(int userId, long serialNumber) { SQLiteDatabase db = mKeyStoreDbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(UserMetadataEntry.COLUMN_NAME_USER_ID, userId); values.put(UserMetadataEntry.COLUMN_NAME_USER_SERIAL_NUMBER, serialNumber); long result = db.replace( UserMetadataEntry.TABLE_NAME, /*nullColumnHack=*/ null, values); return result; String selection = UserMetadataEntry.COLUMN_NAME_USER_ID + " = ?"; String[] selectionArguments = new String[] {String.valueOf(userId)}; ensureUserMetadataEntryExists(userId); return db.update(UserMetadataEntry.TABLE_NAME, values, selection, selectionArguments); } /** Loading Loading @@ -1325,6 +1327,18 @@ public class RecoverableKeyStoreDb { values, SQLiteDatabase.CONFLICT_IGNORE); } /** * Creates an empty row in the user metadata table if such a row doesn't exist for * the given userId, so db.update will succeed. */ private void ensureUserMetadataEntryExists(int userId) { SQLiteDatabase db = mKeyStoreDbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(UserMetadataEntry.COLUMN_NAME_USER_ID, userId); db.insertWithOnConflict(UserMetadataEntry.TABLE_NAME, /*nullColumnHack=*/ null, values, SQLiteDatabase.CONFLICT_IGNORE); } /** * Closes all open connections to the database. */ Loading
services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,32 @@ public class RecoverableKeyStoreDbTest { assertEquals(serialNumber, mRecoverableKeyStoreDb.getUserSerialNumbers().get(userId)); } @Test public void setUserSerialNumbers_keepsPlatformKeyGenerationId() { int userId = 42; int generationId = 110; Long serialNumber = 10L; mRecoverableKeyStoreDb.setPlatformKeyGenerationId(userId, generationId); mRecoverableKeyStoreDb.setUserSerialNumber(userId, serialNumber); assertEquals(generationId, mRecoverableKeyStoreDb.getPlatformKeyGenerationId(userId)); } @Test public void setPlatformKeyGenerationId_keepsUserSerialNumber() { int userId = 42; int generationId = 110; Long serialNumber = 10L; mRecoverableKeyStoreDb.setPlatformKeyGenerationId(userId, generationId); mRecoverableKeyStoreDb.setUserSerialNumber(userId, serialNumber); mRecoverableKeyStoreDb.setPlatformKeyGenerationId(userId, generationId + 1); assertEquals(serialNumber, mRecoverableKeyStoreDb.getUserSerialNumbers().get(userId)); } @Test public void removeUserFromAllTables_removesData() throws Exception { int userId = 12; Loading