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 Project/** 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @author Vera Y. Petrashkova 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @version $Revision$ 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.crypto.tests.javax.crypto; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.math.BigInteger; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.AlgorithmParameters; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.InvalidAlgorithmParameterException; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.InvalidKeyException; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Key; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.NoSuchAlgorithmException; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.RSAKeyGenParameterSpec; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.ExemptionMechanismException; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.ShortBufferException; 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.ExemptionMechanismSpi; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.crypto.tests.support.MyExemptionMechanismSpi; 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(ExemptionMechanismSpi.class) 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests for <code>ExemptionMechanismSpi</code> class constructors and 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * methods. 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class ExemptionMechanismSpiTest extends TestCase { 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectclass Mock_ExemptionMechanismSpi extends MyExemptionMechanismSpi{ 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected byte[] engineGenExemptionBlob() throws ExemptionMechanismException { 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return super.engineGenExemptionBlob(); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected int engineGenExemptionBlob(byte[] output, int outputOffset) throws ShortBufferException, ExemptionMechanismException { 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return super.engineGenExemptionBlob(output, outputOffset); 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected int engineGetOutputSize(int inputLen) { 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return super.engineGetOutputSize(inputLen); 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit(Key key) throws InvalidKeyException, ExemptionMechanismException { 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.engineInit(key); 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit(Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException, ExemptionMechanismException { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.engineInit(key, params); 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit(Key key, AlgorithmParameters params) throws InvalidKeyException, InvalidAlgorithmParameterException, ExemptionMechanismException { 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.engineInit(key, params); 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test for <code>ExemptionMechanismSpi</code> constructor Assertion: 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * constructs ExemptionMechanismSpi 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws Exception 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "ExemptionMechanismSpi", 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testExemptionMechanismSpi01() throws Exception { 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mock_ExemptionMechanismSpi emSpi = new Mock_ExemptionMechanismSpi(){}; 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int len = MyExemptionMechanismSpi.getLength(); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte [] bbRes = emSpi.engineGenExemptionBlob(); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Incorrect length", bbRes.length, len); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Incorrect result", 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineGenExemptionBlob(new byte[1], len), len); 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Incorrect output size", 10, emSpi.engineGetOutputSize(100)); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Key key = null; 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameters params = null; 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec parSpec = null; 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineInit(key); 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException must be thrown"); 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineInit(key, params); 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException must be thrown"); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineInit(key, parSpec); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException must be thrown"); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project key = ((MyExemptionMechanismSpi)emSpi).new tmp1Key("Proba", new byte[0]); 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineInit(key); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ExemptionMechanismException must be thrown"); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ExemptionMechanismException e) { 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineInit(key, params); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ExemptionMechanismException must be thrown"); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ExemptionMechanismException e) { 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineInit(key, parSpec); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ExemptionMechanismException must be thrown"); 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ExemptionMechanismException e) { 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project key = ((MyExemptionMechanismSpi)emSpi).new tmpKey("Proba", new byte[0]); 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineInit(key); 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineInit(key, AlgorithmParameters.getInstance("DH")); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project emSpi.engineInit(key, new RSAKeyGenParameterSpec(10, new BigInteger ("10"))); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Incorrect result", 10, emSpi.engineGetOutputSize(100)); 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 152