Loading core/java/android/security/IKeystoreService.java +10 −6 Original line number Diff line number Diff line Loading @@ -407,15 +407,18 @@ public interface IKeystoreService extends IInterface { } @Override public int migrate(String name, int targetUid) throws RemoteException { public int duplicate(String srcKey, int srcUid, String destKey, int destUid) throws RemoteException { Parcel _data = Parcel.obtain(); Parcel _reply = Parcel.obtain(); int _result; try { _data.writeInterfaceToken(DESCRIPTOR); _data.writeString(name); _data.writeInt(targetUid); mRemote.transact(Stub.TRANSACTION_migrate, _data, _reply, 0); _data.writeString(srcKey); _data.writeInt(srcUid); _data.writeString(destKey); _data.writeInt(destUid); mRemote.transact(Stub.TRANSACTION_duplicate, _data, _reply, 0); _reply.readException(); _result = _reply.readInt(); } finally { Loading Loading @@ -448,7 +451,7 @@ public interface IKeystoreService extends IInterface { static final int TRANSACTION_grant = IBinder.FIRST_CALL_TRANSACTION + 17; static final int TRANSACTION_ungrant = IBinder.FIRST_CALL_TRANSACTION + 18; static final int TRANSACTION_getmtime = IBinder.FIRST_CALL_TRANSACTION + 19; static final int TRANSACTION_migrate = IBinder.FIRST_CALL_TRANSACTION + 20; static final int TRANSACTION_duplicate = IBinder.FIRST_CALL_TRANSACTION + 20; /** * Cast an IBinder object into an IKeystoreService interface, generating Loading Loading @@ -534,5 +537,6 @@ public interface IKeystoreService extends IInterface { public long getmtime(String name) throws RemoteException; public int migrate(String name, int targetUid) throws RemoteException; public int duplicate(String srcKey, int srcUid, String destKey, int destUid) throws RemoteException; } keystore/java/android/security/KeyStore.java +2 −2 Original line number Diff line number Diff line Loading @@ -287,9 +287,9 @@ public class KeyStore { } } public boolean migrate(String key, int uid) { public boolean duplicate(String srcKey, int srcUid, String destKey, int destUid) { try { return mBinder.migrate(key, uid) == NO_ERROR; return mBinder.duplicate(srcKey, srcUid, destKey, destUid) == NO_ERROR; } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); return false; Loading keystore/tests/src/android/security/KeyStoreTest.java +30 −6 Original line number Diff line number Diff line Loading @@ -553,7 +553,7 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> { mKeyStore.ungrant(TEST_KEYNAME, 0)); } public void testMigrate_grantedUid_Wifi_Success() throws Exception { public void testDuplicate_grantedUid_Wifi_Success() throws Exception { assertTrue(mKeyStore.password(TEST_PASSWD)); assertFalse(mKeyStore.contains(TEST_KEYNAME)); Loading @@ -563,13 +563,35 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> { assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID)); assertTrue(mKeyStore.migrate(TEST_KEYNAME, Process.WIFI_UID)); // source doesn't exist assertFalse(mKeyStore.duplicate(TEST_KEYNAME1, -1, TEST_KEYNAME1, Process.WIFI_UID)); assertFalse(mKeyStore.contains(TEST_KEYNAME1, Process.WIFI_UID)); assertFalse(mKeyStore.contains(TEST_KEYNAME)); assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID)); // Copy from current UID to granted UID assertTrue(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME1, Process.WIFI_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME1)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME1, Process.WIFI_UID)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME1, Process.WIFI_UID)); // Copy from granted UID to same granted UID assertTrue(mKeyStore.duplicate(TEST_KEYNAME1, Process.WIFI_UID, TEST_KEYNAME2, Process.WIFI_UID)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME1, Process.WIFI_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME2, Process.WIFI_UID)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME1, Process.WIFI_UID, TEST_KEYNAME2, Process.WIFI_UID)); assertTrue(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME2, -1)); assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME1)); assertTrue(mKeyStore.contains(TEST_KEYNAME2)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME2, -1)); } public void testMigrate_ungrantedUid_Bluetooth_Failure() throws Exception { public void testDuplicate_ungrantedUid_Bluetooth_Failure() throws Exception { assertTrue(mKeyStore.password(TEST_PASSWD)); assertFalse(mKeyStore.contains(TEST_KEYNAME)); Loading @@ -579,7 +601,9 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> { assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID)); assertFalse(mKeyStore.migrate(TEST_KEYNAME, Process.BLUETOOTH_UID)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME2, Process.BLUETOOTH_UID)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME, Process.BLUETOOTH_UID, TEST_KEYNAME2, Process.BLUETOOTH_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID)); Loading Loading
core/java/android/security/IKeystoreService.java +10 −6 Original line number Diff line number Diff line Loading @@ -407,15 +407,18 @@ public interface IKeystoreService extends IInterface { } @Override public int migrate(String name, int targetUid) throws RemoteException { public int duplicate(String srcKey, int srcUid, String destKey, int destUid) throws RemoteException { Parcel _data = Parcel.obtain(); Parcel _reply = Parcel.obtain(); int _result; try { _data.writeInterfaceToken(DESCRIPTOR); _data.writeString(name); _data.writeInt(targetUid); mRemote.transact(Stub.TRANSACTION_migrate, _data, _reply, 0); _data.writeString(srcKey); _data.writeInt(srcUid); _data.writeString(destKey); _data.writeInt(destUid); mRemote.transact(Stub.TRANSACTION_duplicate, _data, _reply, 0); _reply.readException(); _result = _reply.readInt(); } finally { Loading Loading @@ -448,7 +451,7 @@ public interface IKeystoreService extends IInterface { static final int TRANSACTION_grant = IBinder.FIRST_CALL_TRANSACTION + 17; static final int TRANSACTION_ungrant = IBinder.FIRST_CALL_TRANSACTION + 18; static final int TRANSACTION_getmtime = IBinder.FIRST_CALL_TRANSACTION + 19; static final int TRANSACTION_migrate = IBinder.FIRST_CALL_TRANSACTION + 20; static final int TRANSACTION_duplicate = IBinder.FIRST_CALL_TRANSACTION + 20; /** * Cast an IBinder object into an IKeystoreService interface, generating Loading Loading @@ -534,5 +537,6 @@ public interface IKeystoreService extends IInterface { public long getmtime(String name) throws RemoteException; public int migrate(String name, int targetUid) throws RemoteException; public int duplicate(String srcKey, int srcUid, String destKey, int destUid) throws RemoteException; }
keystore/java/android/security/KeyStore.java +2 −2 Original line number Diff line number Diff line Loading @@ -287,9 +287,9 @@ public class KeyStore { } } public boolean migrate(String key, int uid) { public boolean duplicate(String srcKey, int srcUid, String destKey, int destUid) { try { return mBinder.migrate(key, uid) == NO_ERROR; return mBinder.duplicate(srcKey, srcUid, destKey, destUid) == NO_ERROR; } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); return false; Loading
keystore/tests/src/android/security/KeyStoreTest.java +30 −6 Original line number Diff line number Diff line Loading @@ -553,7 +553,7 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> { mKeyStore.ungrant(TEST_KEYNAME, 0)); } public void testMigrate_grantedUid_Wifi_Success() throws Exception { public void testDuplicate_grantedUid_Wifi_Success() throws Exception { assertTrue(mKeyStore.password(TEST_PASSWD)); assertFalse(mKeyStore.contains(TEST_KEYNAME)); Loading @@ -563,13 +563,35 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> { assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID)); assertTrue(mKeyStore.migrate(TEST_KEYNAME, Process.WIFI_UID)); // source doesn't exist assertFalse(mKeyStore.duplicate(TEST_KEYNAME1, -1, TEST_KEYNAME1, Process.WIFI_UID)); assertFalse(mKeyStore.contains(TEST_KEYNAME1, Process.WIFI_UID)); assertFalse(mKeyStore.contains(TEST_KEYNAME)); assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID)); // Copy from current UID to granted UID assertTrue(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME1, Process.WIFI_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME1)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME1, Process.WIFI_UID)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME1, Process.WIFI_UID)); // Copy from granted UID to same granted UID assertTrue(mKeyStore.duplicate(TEST_KEYNAME1, Process.WIFI_UID, TEST_KEYNAME2, Process.WIFI_UID)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME1, Process.WIFI_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME2, Process.WIFI_UID)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME1, Process.WIFI_UID, TEST_KEYNAME2, Process.WIFI_UID)); assertTrue(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME2, -1)); assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME1)); assertTrue(mKeyStore.contains(TEST_KEYNAME2)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME2, -1)); } public void testMigrate_ungrantedUid_Bluetooth_Failure() throws Exception { public void testDuplicate_ungrantedUid_Bluetooth_Failure() throws Exception { assertTrue(mKeyStore.password(TEST_PASSWD)); assertFalse(mKeyStore.contains(TEST_KEYNAME)); Loading @@ -579,7 +601,9 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> { assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID)); assertFalse(mKeyStore.migrate(TEST_KEYNAME, Process.BLUETOOTH_UID)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME2, Process.BLUETOOTH_UID)); assertFalse(mKeyStore.duplicate(TEST_KEYNAME, Process.BLUETOOTH_UID, TEST_KEYNAME2, Process.BLUETOOTH_UID)); assertTrue(mKeyStore.contains(TEST_KEYNAME)); assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID)); Loading