Home | History | Annotate | Download | only in spec
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 /**
     19 * @author Alexander Y. Kleymenov
     20 * @version $Revision$
     21 */
     22 
     23 package org.apache.harmony.crypto.tests.javax.crypto.spec;
     24 
     25 import java.lang.NullPointerException;
     26 import java.lang.IllegalArgumentException;
     27 import java.lang.ArrayIndexOutOfBoundsException;
     28 
     29 import javax.crypto.spec.IvParameterSpec;
     30 
     31 import junit.framework.Test;
     32 import junit.framework.TestCase;
     33 import junit.framework.TestSuite;
     34 
     35 /**
     36  */
     37 public class IvParameterSpecTest extends TestCase {
     38 
     39     /**
     40      * IvParameterSpec(byte[] iv) constructor testing. Checks that
     41      * NullPointerException is thrown in the case of null input
     42      * array and that input array is copied during initialization.
     43      */
     44     public void testIvParameterSpec1() {
     45         try {
     46             new IvParameterSpec(null);
     47             fail("Should raise an NullPointerException "
     48                     + "in the case of null byte array.");
     49         } catch(NullPointerException e) {
     50         }
     51 
     52         byte[] iv = new byte[] {1, 2, 3, 4, 5};
     53         IvParameterSpec ivps = new IvParameterSpec(iv);
     54         iv[0] ++;
     55         assertFalse("The change of input array's content should not cause "
     56                     + "the change of internal array", iv[0] == ivps.getIV()[0]);
     57     }
     58 
     59     /**
     60      * IvParameterSpec(byte[] iv) constructor testing. Checks that
     61      * NullPointerException is thrown in the case of null input
     62      * array and that input array is copied during initialization.
     63      */
     64     public void testIvParameterSpec2() {
     65         try {
     66             new IvParameterSpec(null, 1, 1);
     67             fail("Should raise an IllegalArgumentException "
     68                     + "in the case of null byte array.");
     69         } catch(ArrayIndexOutOfBoundsException e) {
     70             fail("Unexpected ArrayIndexOutOfBoundsException was thrown");
     71         } catch(IllegalArgumentException e) {
     72         } catch(NullPointerException e) {
     73             fail("Unexpected NullPointerException was thrown");
     74         }
     75 
     76         try {
     77             new IvParameterSpec(new byte[] {1, 2, 3}, 2, 2);
     78             fail("Should raise an IllegalArgumentException "
     79                     + "if (iv.length - offset < len).");
     80         } catch(ArrayIndexOutOfBoundsException e) {
     81             fail("Unexpected ArrayIndexOutOfBoundsException was thrown");
     82         } catch(IllegalArgumentException e) {
     83         } catch(NullPointerException e) {
     84             fail("Unexpected NullPointerException was thrown");
     85         }
     86 
     87         try {
     88             new IvParameterSpec(new byte[] {1, 2, 3}, -1, 1);
     89             fail("Should raise an ArrayIndexOutOfBoundsException "
     90                     + "if offset index bytes outside the iv.");
     91         } catch(ArrayIndexOutOfBoundsException e) {
     92         } catch(IllegalArgumentException e) {
     93             fail("Unexpected IllegalArgumentException was thrown");
     94         } catch(NullPointerException e) {
     95             fail("Unexpected NullPointerException was thrown");
     96         }
     97 
     98         /* TODO: DRL fail with java.lang.NegativeArraySizeException
     99         try {
    100             new IvParameterSpec(new byte[] {1, 2, 3}, 1, -2);
    101             fail("Should raise an ArrayIndexOutOfBoundsException "
    102                     + "if len index bytes outside the iv.");
    103         } catch(ArrayIndexOutOfBoundsException e) {
    104         } catch(IllegalArgumentException e) {
    105             fail("Unexpected IllegalArgumentException was thrown");
    106         } catch(NullPointerException e) {
    107             fail("Unexpected NullPointerException was thrown");
    108         }
    109         */
    110 
    111         byte[] iv = new byte[] {1, 2, 3, 4, 5};
    112         IvParameterSpec ivps = new IvParameterSpec(iv, 0, iv.length);
    113         iv[0] ++;
    114         assertFalse("The change of input array's content should not cause "
    115                     + "the change of internal array", iv[0] == ivps.getIV()[0]);
    116 
    117         //Regression for HARMONY-1089
    118         try {
    119             new IvParameterSpec(new byte[2], 2,  -1);
    120             fail("ArrayIndexOutOfBoundsException expected");
    121         } catch (ArrayIndexOutOfBoundsException e) {
    122             //expected
    123         }
    124     }
    125 
    126     public void testGetIV() {
    127         byte[] iv = new byte[] {1, 2, 3, 4, 5};
    128         IvParameterSpec ivps = new IvParameterSpec(iv);
    129         iv = ivps.getIV();
    130         iv[0] ++;
    131         assertFalse("The change of returned array should not cause "
    132                     + "the change of internal array", iv[0] == ivps.getIV()[0]);
    133     }
    134 
    135     public static Test suite() {
    136         return new TestSuite(IvParameterSpecTest.class);
    137     }
    138 }
    139 
    140