diff options
4 files changed, 154 insertions, 0 deletions
@@ -147,6 +147,7 @@ unbundled_visibility = [ "//external/robolectric-shadows/robolectric", "//external/robolectric-shadows/shadows/supportv4", "//external/robolectric-shadows/shadows/httpclient", + "//external/wycheproof", "//frameworks/opt/net/wifi/service", "//frameworks/opt/net/wifi/tests/wifitests", "//packages/apps/CertInstaller", diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java index 2c439f4e..5ec21c8b 100644 --- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java +++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java @@ -931,6 +931,33 @@ public class BcKeyStoreSpi dOut.close(); } + // BEGIN Android-added: new API for KeyStore probing. + /** + * Probe the first few bytes of the keystore data stream for a valid + * keystore encoding. Only the primary keystore implementation is probed. + */ + public boolean engineProbe(InputStream stream) throws IOException { + if (stream == null) { + throw new NullPointerException("input stream must not be null"); + } + DataInputStream dIn = new DataInputStream(stream); + int version = dIn.readInt(); + + if (version != STORE_VERSION) { + if (version != 0 && version != 1) { + return false; + } + } + byte[] salt = new byte[dIn.readInt()]; + + if (salt.length != STORE_SALT_SIZE) { + return false; + } + + return true; + } + // END Android-added: new API for KeyStore probing. + /** * the BouncyCastle store. This wont work with the key tool as the * store is stored encrypted on disk, so the password is mandatory, @@ -1050,6 +1077,30 @@ public class BcKeyStoreSpi cOut.close(); } + + // BEGIN Android-added: new API for KeyStore probing. + @Override + public boolean engineProbe(InputStream stream) throws IOException { + if (stream == null) { + throw new NullPointerException("input stream must not be null"); + } + DataInputStream dIn = new DataInputStream(stream); + int version = dIn.readInt(); + + if (version != STORE_VERSION) { + if (version != 0 && version != 1) { + return false; + } + } + byte[] salt = new byte[dIn.readInt()]; + + if (salt.length != STORE_SALT_SIZE) { + return false; + } + + return true; + } + // END Android-added: new API for KeyStore probing. } public static class Std diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java index 44faf7db..9605cedd 100644 --- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java +++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java @@ -935,6 +935,33 @@ public class BcKeyStoreSpi dOut.close(); } + // BEGIN Android-added: new API for KeyStore probing. + /** + * Probe the first few bytes of the keystore data stream for a valid + * keystore encoding. Only the primary keystore implementation is probed. + */ + public boolean engineProbe(InputStream stream) throws IOException { + if (stream == null) { + throw new NullPointerException("input stream must not be null"); + } + DataInputStream dIn = new DataInputStream(stream); + int version = dIn.readInt(); + + if (version != STORE_VERSION) { + if (version != 0 && version != 1) { + return false; + } + } + byte[] salt = new byte[dIn.readInt()]; + + if (salt.length != STORE_SALT_SIZE) { + return false; + } + + return true; + } + // END Android-added: new API for KeyStore probing. + /** * the BouncyCastle store. This wont work with the key tool as the * store is stored encrypted on disk, so the password is mandatory, @@ -1055,6 +1082,30 @@ public class BcKeyStoreSpi cOut.close(); } + + // BEGIN Android-added: new API for KeyStore probing. + @Override + public boolean engineProbe(InputStream stream) throws IOException { + if (stream == null) { + throw new NullPointerException("input stream must not be null"); + } + DataInputStream dIn = new DataInputStream(stream); + int version = dIn.readInt(); + + if (version != STORE_VERSION) { + if (version != 0 && version != 1) { + return false; + } + } + byte[] salt = new byte[dIn.readInt()]; + + if (salt.length != STORE_SALT_SIZE) { + return false; + } + + return true; + } + // END Android-added: new API for KeyStore probing. } /** diff --git a/repackaged_platform/bcprov/src/main/java/com/android/internal/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java b/repackaged_platform/bcprov/src/main/java/com/android/internal/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java index 44be654a..6c2c25b0 100644 --- a/repackaged_platform/bcprov/src/main/java/com/android/internal/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java +++ b/repackaged_platform/bcprov/src/main/java/com/android/internal/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.java @@ -935,6 +935,33 @@ public class BcKeyStoreSpi dOut.close(); } + // BEGIN Android-added: new API for KeyStore probing. + /** + * Probe the first few bytes of the keystore data stream for a valid + * keystore encoding. Only the primary keystore implementation is probed. + */ + public boolean engineProbe(InputStream stream) throws IOException { + if (stream == null) { + throw new NullPointerException("input stream must not be null"); + } + DataInputStream dIn = new DataInputStream(stream); + int version = dIn.readInt(); + + if (version != STORE_VERSION) { + if (version != 0 && version != 1) { + return false; + } + } + byte[] salt = new byte[dIn.readInt()]; + + if (salt.length != STORE_SALT_SIZE) { + return false; + } + + return true; + } + // END Android-added: new API for KeyStore probing. + /** * the BouncyCastle store. This wont work with the key tool as the * store is stored encrypted on disk, so the password is mandatory, @@ -1055,6 +1082,30 @@ public class BcKeyStoreSpi cOut.close(); } + + // BEGIN Android-added: new API for KeyStore probing. + @Override + public boolean engineProbe(InputStream stream) throws IOException { + if (stream == null) { + throw new NullPointerException("input stream must not be null"); + } + DataInputStream dIn = new DataInputStream(stream); + int version = dIn.readInt(); + + if (version != STORE_VERSION) { + if (version != 0 && version != 1) { + return false; + } + } + byte[] salt = new byte[dIn.readInt()]; + + if (salt.length != STORE_SALT_SIZE) { + return false; + } + + return true; + } + // END Android-added: new API for KeyStore probing. } /** |