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.security.InvalidKeyException;
     27 import java.util.Arrays;
     28 
     29 import javax.crypto.spec.DESedeKeySpec;
     30 
     31 import junit.framework.Test;
     32 import junit.framework.TestCase;
     33 import junit.framework.TestSuite;
     34 
     35 /**
     36  */
     37 public class DESedeKeySpecTest extends TestCase {
     38 
     39     /**
     40      * Constructors testing. Tests behavior of each of two constructors
     41      * in the cases of: null array, short array, normal array.
     42      */
     43     public void testDESedeKeySpec() {
     44         try {
     45             new DESedeKeySpec((byte []) null);
     46             fail("Should raise an NullPointerException "
     47                     + "in case of null byte array.");
     48         } catch (NullPointerException e) {
     49         } catch (InvalidKeyException e) {
     50             fail("Should raise an NullPointerException "
     51                     + "in case of null byte array.");
     52         }
     53         try {
     54             new DESedeKeySpec(new byte [] {1, 2, 3});
     55             fail("Should raise an InvalidKeyException on a short byte array.");
     56         } catch (NullPointerException e) {
     57             fail("Unexpected NullPointerException was thrown.");
     58         } catch (InvalidKeyException e) {
     59         }
     60         try {
     61             new DESedeKeySpec(new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
     62                                           1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
     63                                           1, 2, 3, 4});
     64         } catch (NullPointerException e) {
     65             fail("Unexpected NullPointerException was thrown.");
     66         } catch (InvalidKeyException e) {
     67             fail("Unexpected InvalidKeyException was thrown.");
     68         }
     69         try {
     70             new DESedeKeySpec((byte []) null, 1);
     71             fail("Should raise an NullPointerException "
     72                     + "in case of null byte array.");
     73         } catch (NullPointerException e) {
     74         } catch (InvalidKeyException e) {
     75             fail("Should raise an NullPointerException "
     76                     + "in case of null byte array.");
     77         }
     78         try {
     79             new DESedeKeySpec(new byte []  {1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
     80                                             1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
     81                                             1, 2, 3, 4}, 1);
     82             fail("Should raise an InvalidKeyException on a short byte array.");
     83         } catch (NullPointerException e) {
     84             fail("Unexpected NullPointerException was thrown.");
     85         } catch (InvalidKeyException e) {
     86         }
     87         try {
     88             new DESedeKeySpec(new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
     89                                           1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
     90                                           1, 2, 3, 4, 5}, 1);
     91         } catch (NullPointerException e) {
     92             fail("Unexpected NullPointerException was thrown.");
     93         } catch (InvalidKeyException e) {
     94             fail("Unexpected InvalidKeyException was thrown.");
     95         }
     96     }
     97 
     98     /**
     99      * getKey() method testing. Checks that modification of returned key
    100      * does not affect the internal key. Also test check an equality of
    101      * the key with the key specified in the constructor. The object under
    102      * the test is created by different constructors.
    103      */
    104     public void testGetKey() {
    105         byte[] key = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2,
    106                       1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2};
    107         DESedeKeySpec ks;
    108         try {
    109             ks = new DESedeKeySpec(key);
    110         } catch (InvalidKeyException e) {
    111             fail("InvalidKeyException should not be thrown.");
    112             return;
    113         }
    114         byte[] res = ks.getKey();
    115         assertTrue("The returned array should be equal to the specified "
    116                     + "in constructor.", Arrays.equals(key, res));
    117         res[0] += 1;
    118         assertFalse("The modification of returned key should not affect"
    119                     + "the underlying key.", key[0] == res[0]);
    120 
    121         byte[] key1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
    122                        1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3};
    123         try {
    124             ks = new DESedeKeySpec(key1, 2);
    125         } catch (InvalidKeyException e) {
    126             fail("InvalidKeyException should not be thrown.");
    127             return;
    128         }
    129         res = ks.getKey();
    130         assertNotSame("The returned array should not be the same object "
    131                     + "as specified in a constructor.", key1, res);
    132         byte[] exp = new byte[24];
    133         System.arraycopy(key1, 2, exp, 0, 24);
    134         assertTrue("The returned array should be equal to the specified "
    135                     + "in constructor.", Arrays.equals(exp, res));
    136     }
    137 
    138     /**
    139      * isParityAdjusted(byte[] key, offset) method testing. Tests if the
    140      * method throws appropriate exceptions on incorrect byte array, if
    141      * it returns false on the key which is not parity adjusted, and if
    142      * it returns true on parity adjusted key.
    143      */
    144     public void testIsParityAdjusted() {
    145         try {
    146             DESedeKeySpec.isParityAdjusted(null, 1);
    147             fail("Should raise an NullPointerException "
    148                     + "in case of null byte array.");
    149         } catch (NullPointerException e) {
    150         } catch (InvalidKeyException e) {
    151             fail("Should raise an NullPointerException "
    152                     + "in case of null byte array.");
    153         }
    154 
    155         byte[] key = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
    156                       1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    157         try {
    158             DESedeKeySpec.isParityAdjusted(key, 1);
    159             fail("Should raise an InvalidKeyException "
    160                     + "in case of short byte array.");
    161         } catch (NullPointerException e) {
    162             fail("Unexpected NullPointerException was thrown.");
    163         } catch (InvalidKeyException e) {
    164         }
    165 
    166         byte[] key_not_pa = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2,
    167                              1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2};
    168         try {
    169             assertFalse("Method returns true when false is expected.",
    170                         DESedeKeySpec.isParityAdjusted(key_not_pa, 0));
    171         } catch (NullPointerException e) {
    172             fail("Unexpected NullPointerException was thrown.");
    173         } catch (InvalidKeyException e) {
    174             fail("Unexpected InvalidKeyException was thrown.");
    175         }
    176 
    177         byte[] key_pa = {(byte) 128, (byte) 131, (byte) 133, (byte) 134,
    178                          (byte) 137, (byte) 138, (byte) 140, (byte) 143,
    179                          (byte) 145, (byte) 146, (byte) 148, (byte) 151,
    180                          (byte) 152, (byte) 155, (byte) 157, (byte) 158,
    181                          (byte) 161, (byte) 162, (byte) 164, (byte) 167,
    182                          (byte) 168, (byte) 171, (byte) 173, (byte) 174};
    183         try {
    184             assertTrue("Method returns false when true is expected.",
    185                         DESedeKeySpec.isParityAdjusted(key_pa, 0));
    186         } catch (NullPointerException e) {
    187             fail("Unexpected NullPointerException was thrown.");
    188         } catch (InvalidKeyException e) {
    189             fail("Unexpected InvalidKeyException was thrown.");
    190         }
    191     }
    192 
    193     public static Test suite() {
    194         return new TestSuite(DESedeKeySpecTest.class);
    195     }
    196 }
    197 
    198