1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes* @author Vladimir N. Molotkov
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.java.security.spec;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.EncodedKeySpec;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.X509EncodedKeySpec;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests for <code>X509EncodedKeySpec</code> class fields and methods
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class X509EncodedKeySpecTest extends TestCase {
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Constructor for X509EncodedKeySpecTest.
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @param name
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public X509EncodedKeySpecTest(String name) {
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super(name);
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // Test cases
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>X509EncodedKeySpec</code> constructor<br>
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: constructs new <code>X509EncodedKeySpec</code>
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * object using valid parameter
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testX509EncodedKeySpec() {
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        EncodedKeySpec eks = new X509EncodedKeySpec(encodedKey);
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(eks instanceof X509EncodedKeySpec);
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>getEncoded()</code> method<br>
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns encoded key
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetEncoded() {
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        X509EncodedKeySpec eks = new X509EncodedKeySpec(encodedKey);
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] ek = eks.getEncoded();
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(encodedKey, ek));
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>getFormat()</code> method
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns format name (always "X.509")
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetFormat() {
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        X509EncodedKeySpec meks = new X509EncodedKeySpec(encodedKey);
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("X.509", meks.getFormat());
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests that internal state of the object
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * can not be changed by modifying initial
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * array value
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testIsStatePreserved1() {
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Reference array
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Reference array's copy will be used for test
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encodedKeyCopy = encodedKey.clone();
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        X509EncodedKeySpec meks = new X509EncodedKeySpec(encodedKeyCopy);
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Modify initial array's value
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        encodedKeyCopy[3] = (byte)5;
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Get encoded key
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] ek = meks.getEncoded();
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Check  using reference array that
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // byte value has not been changed
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(encodedKey, ek));
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests that internal state of the object
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * can not be modified using returned value
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * of <code>getEncoded()</code> method
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testIsStatePreserved2() {
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Reference array
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4};
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Reference array's copy will be used for test
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encodedKeyCopy = encodedKey.clone();
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        X509EncodedKeySpec meks = new X509EncodedKeySpec(encodedKeyCopy);
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] ek = meks.getEncoded();
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Modify returned array
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ek[3] = (byte)5;
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Get encoded key again
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] ek1 = meks.getEncoded();
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Check using reference array that
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // byte value has not been changed
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(encodedKey, ek1));
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
138