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