diff options
author | Sergio Giro <sgiro@google.com> | 2015-07-13 13:44:48 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-07-13 13:44:49 +0000 |
commit | 2f54c8795554b3f44c994e8d26f835a0ba21b7f8 (patch) | |
tree | 4b7e83443b4e3f60d593f57f5eb7b90bc17a8df6 /luni/src/test/java | |
parent | ca3db2c813a5066650fef0ccf3c5e25d5dace289 (diff) | |
parent | 30bc3f8566f9b089ce02a7a22b51991d896f5524 (diff) | |
download | libcore-2f54c8795554b3f44c994e8d26f835a0ba21b7f8.zip libcore-2f54c8795554b3f44c994e8d26f835a0ba21b7f8.tar.gz libcore-2f54c8795554b3f44c994e8d26f835a0ba21b7f8.tar.bz2 |
Merge "javax.crypto.Cipher: try less specific Cipher/Mode/Padding combinations before throwing InvalidKeyException" into mnc-dev
Diffstat (limited to 'luni/src/test/java')
-rw-r--r-- | luni/src/test/java/libcore/javax/crypto/CipherTest.java | 60 | ||||
-rw-r--r-- | luni/src/test/java/libcore/javax/crypto/MockKey.java | 2 |
2 files changed, 61 insertions, 1 deletions
diff --git a/luni/src/test/java/libcore/javax/crypto/CipherTest.java b/luni/src/test/java/libcore/javax/crypto/CipherTest.java index dcd1478..3c7ff0e 100644 --- a/luni/src/test/java/libcore/javax/crypto/CipherTest.java +++ b/luni/src/test/java/libcore/javax/crypto/CipherTest.java @@ -27,6 +27,7 @@ import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.Key; import java.security.KeyFactory; +import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.Provider; @@ -3339,4 +3340,63 @@ public final class CipherTest extends TestCase { assertEquals("", new String(buffer, 0, bytesProduced, StandardCharsets.US_ASCII)); } } + + /** + * If a provider rejects a key for "Cipher/Mode/Padding"", there might be another that + * accepts the key for "Cipher". Don't throw InvalidKeyException when trying the first one. + * http://b/22208820 + */ + public void testCipher_init_tryAllCombinationsBeforeThrowingInvalidKey() + throws Exception { + Provider mockProvider = new MockProvider("MockProvider") { + public void setup() { + put("Cipher.FOO/FOO/FOO", MockCipherSpi.AllKeyTypes.class.getName()); + put("Cipher.FOO/FOO/FOO SupportedKeyClasses", "none"); + } + }; + + Provider mockProvider2 = new MockProvider("MockProvider2") { + public void setup() { + put("Cipher.FOO", MockCipherSpi.AllKeyTypes.class.getName()); + } + }; + + Security.addProvider(mockProvider); + + try { + try { + // The provider installed doesn't accept the key. + Cipher c = Cipher.getInstance("FOO/FOO/FOO"); + c.init(Cipher.DECRYPT_MODE, new MockKey()); + fail("Expected InvalidKeyException"); + } catch (InvalidKeyException expected) { + } + + Security.addProvider(mockProvider2); + + try { + // The new provider accepts "FOO" with this key. Use it despite the other provider + // accepts "FOO/FOO/FOO" but doesn't accept the key. + Cipher c = Cipher.getInstance("FOO/FOO/FOO"); + c.init(Cipher.DECRYPT_MODE, new MockKey()); + assertEquals("MockProvider2", c.getProvider().getName()); + } finally { + Security.removeProvider(mockProvider2.getName()); + } + } finally { + Security.removeProvider(mockProvider.getName()); + } + } + + /** + * Check that RSA with OAEPPadding is supported. + * http://b/22208820 + */ + public void test_RSA_OAEPPadding() throws Exception { + KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); + keyGen.initialize(1024, SecureRandom.getInstance("SHA1PRNG")); + Cipher cipher = Cipher.getInstance("RSA/NONE/OAEPPadding"); + cipher.init(Cipher.ENCRYPT_MODE, keyGen.generateKeyPair().getPublic()); + cipher.doFinal(new byte[] {1,2,3,4}); + } } diff --git a/luni/src/test/java/libcore/javax/crypto/MockKey.java b/luni/src/test/java/libcore/javax/crypto/MockKey.java index 248e2de..1c758f3 100644 --- a/luni/src/test/java/libcore/javax/crypto/MockKey.java +++ b/luni/src/test/java/libcore/javax/crypto/MockKey.java @@ -25,7 +25,7 @@ import java.security.Key; public class MockKey implements Key { @Override public String getAlgorithm() { - throw new UnsupportedOperationException("not implemented"); + return "MOCK"; } @Override |