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