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 Vladimir N. Molotkov
     20 * @version $Revision$
     21 */
     22 
     23 package tests.security.spec;
     24 
     25 import junit.framework.TestCase;
     26 
     27 import java.security.spec.EncodedKeySpec;
     28 import java.security.spec.PKCS8EncodedKeySpec;
     29 import java.util.Arrays;
     30 
     31 /**
     32  * Tests for <code>PKCS8EncodedKeySpec</code> class fields and methods.
     33  *
     34  */
     35 public class PKCS8EncodedKeySpecTest extends TestCase {
     36 
     37     //
     38     // Tests
     39     //
     40 
     41     /**
     42      * Test for <code>PKCS8EncodedKeySpec</code> constructor<br>
     43      * Assertion: constructs new <code>PKCS8EncodedKeySpec</code>
     44      * object using valid parameter
     45      */
     46     public final void testPKCS8EncodedKeySpec() {
     47         byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
     48 
     49         EncodedKeySpec eks = new PKCS8EncodedKeySpec(encodedKey);
     50 
     51         assertTrue(eks instanceof PKCS8EncodedKeySpec);
     52         try {
     53             eks = new PKCS8EncodedKeySpec(null);
     54             fail("expected NullPointerException");
     55         } catch (NullPointerException e) {
     56             // ok
     57         }
     58     }
     59 
     60     /**
     61      * Test for <code>getEncoded()</code> method<br>
     62      * Assertion: returns encoded key
     63      */
     64     public final void testGetEncoded() {
     65         byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
     66 
     67         PKCS8EncodedKeySpec meks = new PKCS8EncodedKeySpec(encodedKey);
     68 
     69         byte[] ek = meks.getEncoded();
     70 
     71         assertTrue(Arrays.equals(encodedKey, ek));
     72     }
     73 
     74     /**
     75      * Test for <code>getFormat()</code> method
     76      * Assertion: returns format name (always "PKCS#8")
     77      */
     78     public final void testGetFormat() {
     79         byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
     80 
     81         PKCS8EncodedKeySpec meks = new PKCS8EncodedKeySpec(encodedKey);
     82 
     83         assertEquals("PKCS#8", meks.getFormat());
     84     }
     85 
     86     /**
     87      * Tests that internal state of the object
     88      * can not be changed by modifying initial
     89      * array value
     90      */
     91     public final void testIsStatePreserved1() {
     92         // Reference array
     93         byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
     94         // Reference array's copy will be used for test
     95         byte[] encodedKeyCopy = encodedKey.clone();
     96 
     97         PKCS8EncodedKeySpec meks = new PKCS8EncodedKeySpec(encodedKeyCopy);
     98 
     99         // Modify initial array's value
    100         encodedKeyCopy[3] = (byte)5;
    101 
    102         // Get encoded key
    103         byte[] ek = meks.getEncoded();
    104 
    105         // Check  using reference array that
    106         // byte value has not been changed
    107         assertTrue(Arrays.equals(encodedKey, ek));
    108     }
    109 
    110     /**
    111      * Tests that internal state of the object
    112      * can not be modified using returned value
    113      * of <code>getEncoded()</code> method
    114      */
    115     public final void testIsStatePreserved2() {
    116         // Reference array
    117         byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
    118         // Reference array's copy will be used for test
    119         byte[] encodedKeyCopy = encodedKey.clone();
    120 
    121         PKCS8EncodedKeySpec meks = new PKCS8EncodedKeySpec(encodedKeyCopy);
    122 
    123         byte[] ek = meks.getEncoded();
    124 
    125         // Modify returned array
    126         ek[3] = (byte)5;
    127 
    128         // Get encoded key again
    129         byte[] ek1 = meks.getEncoded();
    130 
    131         // Check using reference array that
    132         // byte value has not been changed
    133         assertTrue(Arrays.equals(encodedKey, ek1));
    134     }
    135 
    136 }
    137