Merge "Remove deprecated android.security.KeyStore methods." into mnc-dev
This commit is contained in:
@@ -231,14 +231,6 @@ public class KeyStore {
|
|||||||
return list(prefix, UID_SELF);
|
return list(prefix, UID_SELF);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] saw(String prefix, int uid) {
|
|
||||||
return list(prefix, uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] saw(String prefix) {
|
|
||||||
return saw(prefix, UID_SELF);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean reset() {
|
public boolean reset() {
|
||||||
try {
|
try {
|
||||||
return mBinder.reset() == NO_ERROR;
|
return mBinder.reset() == NO_ERROR;
|
||||||
@@ -328,23 +320,6 @@ public class KeyStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getPubkey(String key) {
|
|
||||||
try {
|
|
||||||
return mBinder.get_pubkey(key);
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.w(TAG, "Cannot connect to keystore", e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean delKey(String key, int uid) {
|
|
||||||
return delete(key, uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean delKey(String key) {
|
|
||||||
return delKey(key, UID_SELF);
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] sign(String key, byte[] data) {
|
public byte[] sign(String key, byte[] data) {
|
||||||
try {
|
try {
|
||||||
return mBinder.sign(key, data);
|
return mBinder.sign(key, data);
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import android.annotation.NonNull;
|
|||||||
import android.security.Credentials;
|
import android.security.Credentials;
|
||||||
import android.security.KeyPairGeneratorSpec;
|
import android.security.KeyPairGeneratorSpec;
|
||||||
import android.security.KeyStore;
|
import android.security.KeyStore;
|
||||||
|
import android.security.keymaster.ExportResult;
|
||||||
|
import android.security.keymaster.KeymasterDefs;
|
||||||
|
|
||||||
import com.android.org.bouncycastle.x509.X509V3CertificateGenerator;
|
import com.android.org.bouncycastle.x509.X509V3CertificateGenerator;
|
||||||
import com.android.org.conscrypt.NativeConstants;
|
import com.android.org.conscrypt.NativeConstants;
|
||||||
@@ -33,6 +35,7 @@ import java.security.KeyPairGenerator;
|
|||||||
import java.security.KeyPairGeneratorSpi;
|
import java.security.KeyPairGeneratorSpi;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.security.PrivateKey;
|
import java.security.PrivateKey;
|
||||||
|
import java.security.ProviderException;
|
||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
import java.security.cert.CertificateEncodingException;
|
import java.security.cert.CertificateEncodingException;
|
||||||
@@ -153,7 +156,18 @@ public abstract class AndroidKeyStoreKeyPairGeneratorSpi extends KeyPairGenerato
|
|||||||
throw new RuntimeException("Can't get key", e);
|
throw new RuntimeException("Can't get key", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
final byte[] pubKeyBytes = mKeyStore.getPubkey(privateKeyAlias);
|
ExportResult exportResult =
|
||||||
|
mKeyStore.exportKey(
|
||||||
|
privateKeyAlias, KeymasterDefs.KM_KEY_FORMAT_X509, null, null);
|
||||||
|
if (exportResult == null) {
|
||||||
|
throw new KeyStoreConnectException();
|
||||||
|
} else if (exportResult.resultCode != KeyStore.NO_ERROR) {
|
||||||
|
throw new ProviderException(
|
||||||
|
"Failed to obtain public key in X.509 format",
|
||||||
|
KeyStore.getKeyStoreException(exportResult.resultCode));
|
||||||
|
}
|
||||||
|
final byte[] pubKeyBytes = exportResult.exportData;
|
||||||
|
|
||||||
|
|
||||||
final PublicKey pubKey;
|
final PublicKey pubKey;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -685,7 +685,7 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Set<String> getUniqueAliases() {
|
private Set<String> getUniqueAliases() {
|
||||||
final String[] rawAliases = mKeyStore.saw("");
|
final String[] rawAliases = mKeyStore.list("");
|
||||||
if (rawAliases == null) {
|
if (rawAliases == null) {
|
||||||
return new HashSet<String>();
|
return new HashSet<String>();
|
||||||
}
|
}
|
||||||
@@ -778,7 +778,7 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
|
|||||||
* equivalent to the USER_CERTIFICATE prefix for the Android keystore
|
* equivalent to the USER_CERTIFICATE prefix for the Android keystore
|
||||||
* convention.
|
* convention.
|
||||||
*/
|
*/
|
||||||
final String[] certAliases = mKeyStore.saw(Credentials.USER_CERTIFICATE);
|
final String[] certAliases = mKeyStore.list(Credentials.USER_CERTIFICATE);
|
||||||
if (certAliases != null) {
|
if (certAliases != null) {
|
||||||
for (String alias : certAliases) {
|
for (String alias : certAliases) {
|
||||||
final byte[] certBytes = mKeyStore.get(Credentials.USER_CERTIFICATE + alias);
|
final byte[] certBytes = mKeyStore.get(Credentials.USER_CERTIFICATE + alias);
|
||||||
@@ -799,7 +799,7 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
|
|||||||
* Look at all the TrustedCertificateEntry types. Skip all the
|
* Look at all the TrustedCertificateEntry types. Skip all the
|
||||||
* PrivateKeyEntry we looked at above.
|
* PrivateKeyEntry we looked at above.
|
||||||
*/
|
*/
|
||||||
final String[] caAliases = mKeyStore.saw(Credentials.CA_CERTIFICATE);
|
final String[] caAliases = mKeyStore.list(Credentials.CA_CERTIFICATE);
|
||||||
if (certAliases != null) {
|
if (certAliases != null) {
|
||||||
for (String alias : caAliases) {
|
for (String alias : caAliases) {
|
||||||
if (nonCaEntries.contains(alias)) {
|
if (nonCaEntries.contains(alias)) {
|
||||||
|
|||||||
@@ -276,8 +276,8 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> {
|
|||||||
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
|
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSaw() throws Exception {
|
public void testList() throws Exception {
|
||||||
String[] emptyResult = mKeyStore.saw(TEST_KEYNAME);
|
String[] emptyResult = mKeyStore.list(TEST_KEYNAME);
|
||||||
assertNotNull(emptyResult);
|
assertNotNull(emptyResult);
|
||||||
assertEquals(0, emptyResult.length);
|
assertEquals(0, emptyResult.length);
|
||||||
|
|
||||||
@@ -285,26 +285,26 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> {
|
|||||||
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
|
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
|
||||||
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
|
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
|
||||||
|
|
||||||
String[] results = mKeyStore.saw(TEST_KEYNAME);
|
String[] results = mKeyStore.list(TEST_KEYNAME);
|
||||||
assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
|
assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
|
||||||
TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
|
TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
|
||||||
new HashSet(Arrays.asList(results)));
|
new HashSet(Arrays.asList(results)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSaw_ungrantedUid_Bluetooth() throws Exception {
|
public void testList_ungrantedUid_Bluetooth() throws Exception {
|
||||||
String[] results1 = mKeyStore.saw(TEST_KEYNAME, Process.BLUETOOTH_UID);
|
String[] results1 = mKeyStore.list(TEST_KEYNAME, Process.BLUETOOTH_UID);
|
||||||
assertEquals(0, results1.length);
|
assertEquals(0, results1.length);
|
||||||
|
|
||||||
mKeyStore.onUserPasswordChanged(TEST_PASSWD);
|
mKeyStore.onUserPasswordChanged(TEST_PASSWD);
|
||||||
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
|
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
|
||||||
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
|
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
|
||||||
|
|
||||||
String[] results2 = mKeyStore.saw(TEST_KEYNAME, Process.BLUETOOTH_UID);
|
String[] results2 = mKeyStore.list(TEST_KEYNAME, Process.BLUETOOTH_UID);
|
||||||
assertEquals(0, results2.length);
|
assertEquals(0, results2.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSaw_grantedUid_Wifi() throws Exception {
|
public void testList_grantedUid_Wifi() throws Exception {
|
||||||
String[] results1 = mKeyStore.saw(TEST_KEYNAME, Process.WIFI_UID);
|
String[] results1 = mKeyStore.list(TEST_KEYNAME, Process.WIFI_UID);
|
||||||
assertNotNull(results1);
|
assertNotNull(results1);
|
||||||
assertEquals(0, results1.length);
|
assertEquals(0, results1.length);
|
||||||
|
|
||||||
@@ -312,14 +312,14 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> {
|
|||||||
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
|
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
|
||||||
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
|
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
|
||||||
|
|
||||||
String[] results2 = mKeyStore.saw(TEST_KEYNAME, Process.WIFI_UID);
|
String[] results2 = mKeyStore.list(TEST_KEYNAME, Process.WIFI_UID);
|
||||||
assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
|
assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
|
||||||
TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
|
TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
|
||||||
new HashSet(Arrays.asList(results2)));
|
new HashSet(Arrays.asList(results2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSaw_grantedUid_Vpn() throws Exception {
|
public void testList_grantedUid_Vpn() throws Exception {
|
||||||
String[] results1 = mKeyStore.saw(TEST_KEYNAME, Process.VPN_UID);
|
String[] results1 = mKeyStore.list(TEST_KEYNAME, Process.VPN_UID);
|
||||||
assertNotNull(results1);
|
assertNotNull(results1);
|
||||||
assertEquals(0, results1.length);
|
assertEquals(0, results1.length);
|
||||||
|
|
||||||
@@ -327,7 +327,7 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> {
|
|||||||
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
|
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
|
||||||
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
|
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
|
||||||
|
|
||||||
String[] results2 = mKeyStore.saw(TEST_KEYNAME, Process.VPN_UID);
|
String[] results2 = mKeyStore.list(TEST_KEYNAME, Process.VPN_UID);
|
||||||
assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
|
assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
|
||||||
TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
|
TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
|
||||||
new HashSet(Arrays.asList(results2)));
|
new HashSet(Arrays.asList(results2)));
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ package android.security.keystore;
|
|||||||
|
|
||||||
import android.security.Credentials;
|
import android.security.Credentials;
|
||||||
import android.security.KeyPairGeneratorSpec;
|
import android.security.KeyPairGeneratorSpec;
|
||||||
|
import android.security.KeyStore;
|
||||||
|
import android.security.keymaster.ExportResult;
|
||||||
|
import android.security.keymaster.KeymasterDefs;
|
||||||
import android.test.AndroidTestCase;
|
import android.test.AndroidTestCase;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
@@ -78,7 +81,7 @@ public class AndroidKeyPairGeneratorTest extends AndroidTestCase {
|
|||||||
assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
|
assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
|
||||||
assertTrue(mAndroidKeyStore.isUnlocked());
|
assertTrue(mAndroidKeyStore.isUnlocked());
|
||||||
|
|
||||||
String[] aliases = mAndroidKeyStore.saw("");
|
String[] aliases = mAndroidKeyStore.list("");
|
||||||
assertNotNull(aliases);
|
assertNotNull(aliases);
|
||||||
assertEquals(0, aliases.length);
|
assertEquals(0, aliases.length);
|
||||||
}
|
}
|
||||||
@@ -359,7 +362,10 @@ public class AndroidKeyPairGeneratorTest extends AndroidTestCase {
|
|||||||
final byte[] caCerts = mAndroidKeyStore.get(Credentials.CA_CERTIFICATE + alias);
|
final byte[] caCerts = mAndroidKeyStore.get(Credentials.CA_CERTIFICATE + alias);
|
||||||
assertNull("A list of CA certificates should not exist for the generated entry", caCerts);
|
assertNull("A list of CA certificates should not exist for the generated entry", caCerts);
|
||||||
|
|
||||||
final byte[] pubKeyBytes = mAndroidKeyStore.getPubkey(Credentials.USER_PRIVATE_KEY + alias);
|
ExportResult exportResult = mAndroidKeyStore.exportKey(
|
||||||
|
Credentials.USER_PRIVATE_KEY + alias, KeymasterDefs.KM_KEY_FORMAT_X509, null, null);
|
||||||
|
assertEquals(KeyStore.NO_ERROR, exportResult.resultCode);
|
||||||
|
final byte[] pubKeyBytes = exportResult.exportData;
|
||||||
assertNotNull("The keystore should return the public key for the generated key",
|
assertNotNull("The keystore should return the public key for the generated key",
|
||||||
pubKeyBytes);
|
pubKeyBytes);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ import com.android.org.conscrypt.OpenSSLEngine;
|
|||||||
import android.security.Credentials;
|
import android.security.Credentials;
|
||||||
import android.security.KeyStore;
|
import android.security.KeyStore;
|
||||||
import android.security.KeyStoreParameter;
|
import android.security.KeyStoreParameter;
|
||||||
|
import android.security.keymaster.ExportResult;
|
||||||
|
import android.security.keymaster.KeymasterDefs;
|
||||||
import android.test.AndroidTestCase;
|
import android.test.AndroidTestCase;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
@@ -742,7 +744,7 @@ public class AndroidKeyStoreTest extends AndroidTestCase {
|
|||||||
assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
|
assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
|
||||||
assertTrue(mAndroidKeyStore.isUnlocked());
|
assertTrue(mAndroidKeyStore.isUnlocked());
|
||||||
|
|
||||||
assertEquals(0, mAndroidKeyStore.saw("").length);
|
assertEquals(0, mAndroidKeyStore.list("").length);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertAliases(final String[] expectedAliases) throws KeyStoreException {
|
private void assertAliases(final String[] expectedAliases) throws KeyStoreException {
|
||||||
@@ -1932,7 +1934,10 @@ public class AndroidKeyStoreTest extends AndroidTestCase {
|
|||||||
throw new RuntimeException("Can't get key", e);
|
throw new RuntimeException("Can't get key", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
final byte[] pubKeyBytes = keyStore.getPubkey(privateKeyAlias);
|
ExportResult exportResult =
|
||||||
|
keyStore.exportKey(privateKeyAlias, KeymasterDefs.KM_KEY_FORMAT_X509, null, null);
|
||||||
|
assertEquals(KeyStore.NO_ERROR, exportResult.resultCode);
|
||||||
|
final byte[] pubKeyBytes = exportResult.exportData;
|
||||||
|
|
||||||
final PublicKey pubKey;
|
final PublicKey pubKey;
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user