1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.crypto.tests.javax.crypto; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilsonimport dalvik.annotation.SideEffect; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AlgorithmParameters; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidAlgorithmParameterException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Key; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.RSAKeyGenParameterSpec; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Vector; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.ExemptionMechanism; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.ExemptionMechanismException; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.ExemptionMechanismSpi; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.KeyGenerator; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.ShortBufferException; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.crypto.tests.support.MyExemptionMechanismSpi; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.crypto.tests.support.MyExemptionMechanismSpi.tmpKey; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.SpiEngUtils; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>ExemptionMechanism</code> class constructors and methods 49f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ExemptionMechanismTest extends TestCase { 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String srvExemptionMechanism = "ExemptionMechanism"; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String defaultAlg = "EMech"; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String ExemptionMechanismProviderClass = "org.apache.harmony.crypto.tests.support.MyExemptionMechanismSpi"; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 60f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Test for <code>ExemptionMechanism</code> constructor 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: creates new object using provider and mechanism name 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testExemptionMechanism() throws Exception { 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismSpi spi = new MyExemptionMechanismSpi(); 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism(spi, mProv, defaultAlg) {}; 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect provider", em.getProvider(), mProv); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect algorithm", em.getName(), defaultAlg); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(null); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InvalidKeyException must be thrown"); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeyException e) {} 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.getOutputSize(100); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException must be thrown"); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) {} 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em = new ExemptionMechanism(null, null, null) {}; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Incorrect mechanism", em.getName()); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Incorrect provider", em.getProvider()); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(null); 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) {} 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.getOutputSize(100); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException must be thrown"); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) {} 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 99229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax/crypto/ExemptionMechanism#getInstance(String algorithm, String provider) 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Checks exception order 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetInstance() throws Exception { 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Regression for HARMONY-762 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism.getInstance((String) null, "aaa"); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchProviderException must be thrown"); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchProviderException pe) { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism.getInstance("AlgName", (String)null); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException expected"); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Test for <code>isCryptoAllowed(Key key)</code> method 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testIsCryptoAllowed() throws Exception { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Regression for HARMONY-1029 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MyExemptionMechanismSpi(), mProv, defaultAlg) { 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(em.isCryptoAllowed(key)); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(em.isCryptoAllowed(key)); 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(em.isCryptoAllowed(key)); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key1 = new MyExemptionMechanismSpi().new tmpKey("Proba", 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new byte[] { 1 }); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(em.isCryptoAllowed(key1)); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key1); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(em.isCryptoAllowed(key)); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 150f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>genExemptionBlob((byte[] output, int outputOffset)</code> method 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGenExemptionBlob() throws Exception { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Regression for HARMONY-1029 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MyExemptionMechanismSpi(), mProv, defaultAlg) { 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ExemptionMechanism doesn't check parameters 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // it is a responsibility of ExemptionMechanismSpi 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(null, 0); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(new byte[0], 0); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(new byte[10], -5); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static boolean flag = false; 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class Mock_ExemptionMechanism extends ExemptionMechanism { 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Mock_ExemptionMechanism(ExemptionMechanismSpi exmechSpi, Provider provider, String mechanism) { 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(exmechSpi, provider, mechanism); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void finalize() { 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project flag = true; 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.finalize(); 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 188f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 189f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson @SideEffect("Causes OutOfMemoryError to test finalization") 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_finalize () { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Mock_ExemptionMechanism mem = new Mock_ExemptionMechanism(null, null, "Name"); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(mem); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project mem = null; 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(flag); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Vector v = new Vector(); 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int capacity; 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while(true) { 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project v.add(this); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (OutOfMemoryError e) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project capacity = v.size(); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project v = null; 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project v = new Vector(); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < capacity/2; i++) { 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project v.add(this); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project v = null; 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(flag); 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class Mock_ExemptionMechanismSpi extends MyExemptionMechanismSpi { 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected byte[] engineGenExemptionBlob() 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws ExemptionMechanismException { 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ExemptionMechanismException(); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int engineGenExemptionBlob(byte[] output, int outputOffset) 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws ShortBufferException, ExemptionMechanismException { 224f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if (output.length - outputOffset < 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.engineGenExemptionBlob(output, outputOffset)) { 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ShortBufferException(); 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (output[outputOffset + 3] == 33) { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ExemptionMechanismException(); 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.engineGenExemptionBlob(output, outputOffset); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 235f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public void test_genExemptionBlob() throws InvalidKeyException, 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismException { 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MyExemptionMechanismSpi(), mProv, defaultAlg) { 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 247f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException expected"); 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //failed 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key); 256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(em.genExemptionBlob()); 258f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em = new ExemptionMechanism( 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Mock_ExemptionMechanismSpi(), mProv, defaultAlg) { 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key = new Mock_ExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key); 264f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(); 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ExemptionMechanismException expected"); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ExemptionMechanismException e) { 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //failed 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 273f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public void test_genExemptionBlob$B() throws InvalidKeyException, 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismException, ShortBufferException { 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 279f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Mock_ExemptionMechanismSpi(), mProv, defaultAlg) { 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 283f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new Mock_ExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 285f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(new byte[10]); 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException expected"); 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //failed 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 292f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key); 294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(5, (em.genExemptionBlob(new byte[10]))); 296f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(new byte[2]); 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ShortBufferException expected"); 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ShortBufferException e) { 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //failed 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = new byte[] {0,0,0,33,0}; 304f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(b); 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ExemptionMechanismException expected"); 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ExemptionMechanismException e) { 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //failed 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 313f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public void test_genExemptionBlob$BI() throws InvalidKeyException, 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismException, ShortBufferException { 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 319f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Mock_ExemptionMechanismSpi(), mProv, defaultAlg) { 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 323f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new Mock_ExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 325f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(new byte[10], 2); 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException expected"); 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //failed 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 332f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key); 334f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(5, (em.genExemptionBlob(new byte[10], 5))); 336f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(new byte[7], 3); 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ShortBufferException expected"); 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ShortBufferException e) { 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //failed 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = new byte[] {0, 0, 0, 1, 2, 3, 33, 0}; 344f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.genExemptionBlob(b, 3); 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ExemptionMechanismException expected"); 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ExemptionMechanismException e) { 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //failed 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getInstanceLjava_lang_String() throws Exception { 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism.getInstance((String) null); 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException expected"); 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 365f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Mock_ExemptionMechanismSpi(), mProv, defaultAlg) { 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.getInstance("WrongAlgName"); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchAlgorithmException expected"); 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getInstanceLjava_lang_StringLjava_security_Provider() 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws Exception { 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism.getInstance((String) null, mProv); 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException expected"); 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 391f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Mock_ExemptionMechanismSpi(), mProv, defaultAlg) { 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.getInstance("WrongAlgName", mProv); 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchAlgorithmException expected"); 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.getInstance("WrongAlgName", (Provider)null); 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException expected"); 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getName() throws Exception { 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MyExemptionMechanismSpi(), mProv, defaultAlg) { 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(defaultAlg, em.getName()); 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getOutputSizeI() throws Exception { 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MyExemptionMechanismSpi(), mProv, defaultAlg) { 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 437f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.getOutputSize(10); 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException expected"); 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //failed 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key); 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(10, em.getOutputSize(10)); 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getProvider() throws Exception { 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MyExemptionMechanismSpi(), mProv, defaultAlg) { 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(mProv, em.getProvider()); 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_initLjava_security_Key() throws Exception { 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 469f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MyExemptionMechanismSpi(), mProv, defaultAlg) { 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 473f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 475f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key); 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance("DES"); 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kg.init(56, new SecureRandom()); 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key = kg.generateKey(); 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(null); 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InvalidKeyException expected"); 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeyException e) { 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key); 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ExemptionMechanismException expected"); 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ExemptionMechanismException e) { 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_initLjava_security_KeyLjava_security_AlgorithmParameters() 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws Exception { 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 503f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MyExemptionMechanismSpi(), mProv, defaultAlg) { 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 507f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 509f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key, AlgorithmParameters.getInstance("DES")); 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key, (AlgorithmParameters)null); 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InvalidAlgorithmParameterException expected"); 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidAlgorithmParameterException e) { 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance("DES"); 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kg.init(56, new SecureRandom()); 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key = kg.generateKey(); 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(null, AlgorithmParameters.getInstance("DES")); 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InvalidKeyException expected"); 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeyException e) { 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key, AlgorithmParameters.getInstance("DES")); 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ExemptionMechanismException expected"); 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ExemptionMechanismException e) { 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_initLjava_security_KeyLjava_security_spec_AlgorithmParameterSpec() 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws Exception{ 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Provider for ExemptionMechanism testing", 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvExemptionMechanism.concat(".").concat(defaultAlg), 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismProviderClass); 544f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanism em = new ExemptionMechanism( 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MyExemptionMechanismSpi(), mProv, defaultAlg) { 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 548f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]); 550f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key, new RSAKeyGenParameterSpec(10, new BigInteger("10"))); 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key, (AlgorithmParameterSpec)null); 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InvalidAlgorithmParameterException expected"); 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidAlgorithmParameterException e) { 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance("DES"); 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kg.init(56, new SecureRandom()); 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key = kg.generateKey(); 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(null, new RSAKeyGenParameterSpec(10, new BigInteger("10"))); 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InvalidKeyException expected"); 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeyException e) { 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project em.init(key, new RSAKeyGenParameterSpec(10, new BigInteger("10"))); 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ExemptionMechanismException expected"); 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ExemptionMechanismException e) { 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 581