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* @author Alexander Y. Kleymenov
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.crypto.tests.javax.crypto.spec;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.NullPointerException;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.InvalidKeyException;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.spec.DESKeySpec;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.Test;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class DESKeySpecTest extends TestCase {
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // DES weak and semi-weak keys
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // Got from:
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // FIP PUB 74
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // FEDERAL INFORMATION PROCESSING STANDARDS PUBLICATION 1981
42e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    // GUIDELINES FOR IMPLEMENTING AND USING THE NBS DATA ENCRYPTION STANDARD
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // http://www.dice.ucl.ac.be/crypto/standards/fips/fip74/fip74-1.pdf
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final byte[][] semiweaks = {
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0xE0, (byte) 0x01, (byte) 0xE0, (byte) 0x01,
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0xF1, (byte) 0x01, (byte) 0xF1, (byte) 0x01},
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0x01, (byte) 0xE0, (byte) 0x01, (byte) 0xE0,
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0x01, (byte) 0xF1, (byte) 0x01, (byte) 0xF1},
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0xFE, (byte) 0x1F, (byte) 0xFE, (byte) 0x1F,
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0xFE, (byte) 0x0E, (byte) 0xFE, (byte) 0x0E},
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0x1F, (byte) 0xFE, (byte) 0x1F, (byte) 0xFE,
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0x0E, (byte) 0xFE, (byte) 0x0E, (byte) 0xFE},
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0xE0, (byte) 0x1F, (byte) 0xE0, (byte) 0x1F,
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0xF1, (byte) 0x0E, (byte) 0xF1, (byte) 0x0E},
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0x1F, (byte) 0xE0, (byte) 0x1F, (byte) 0xE0,
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0x0E, (byte) 0xF1, (byte) 0x0E, (byte) 0xF1},
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0x01, (byte) 0xFE, (byte) 0x01, (byte) 0xFE,
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0x01, (byte) 0xFE, (byte) 0x01, (byte) 0xFE},
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0xFE, (byte) 0x01, (byte) 0xFE, (byte) 0x01,
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0xFE, (byte) 0x01, (byte) 0xFE, (byte) 0x01},
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0x01, (byte) 0x1F, (byte) 0x01, (byte) 0x1F,
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0x01, (byte) 0x0E, (byte) 0x01, (byte) 0x0E},
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0x1F, (byte) 0x01, (byte) 0x1F, (byte) 0x01,
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0x0E, (byte) 0x01, (byte) 0x0E, (byte) 0x01},
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0xE0, (byte) 0xFE, (byte) 0xE0, (byte) 0xFE,
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0xF1, (byte) 0xFE, (byte) 0xF1, (byte) 0xFE},
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0xFE, (byte) 0xE0, (byte) 0xFE, (byte) 0xE0,
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0xFE, (byte) 0xF1, (byte) 0xFE, (byte) 0xF1},
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
81e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes                {(byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01,
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01},
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0xFE, (byte) 0xFE, (byte) 0xFE, (byte) 0xFE,
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0xFE, (byte) 0xFE, (byte) 0xFE, (byte) 0xFE},
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0xE0, (byte) 0xE0, (byte) 0xE0, (byte) 0xE0,
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0xF1, (byte) 0xF1, (byte) 0xF1, (byte) 0xF1},
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0x1F, (byte) 0x1F, (byte) 0x1F, (byte) 0x1F,
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0x0E, (byte) 0x0E, (byte) 0x0E, (byte) 0x0E},
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /* DES not weak or semi-weak keys */
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final byte[][] notsemiweaks = {
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0x1f, (byte) 0x1f, (byte) 0x1f, (byte) 0x1f,
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0x1f, (byte) 0x1f, (byte) 0x1f, (byte) 0x1f},
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                {(byte) 0xe0, (byte) 0xe0, (byte) 0xe0, (byte) 0xe0,
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                 (byte) 0xe0, (byte) 0xe0, (byte) 0xe0, (byte) 0xe0}
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Constructors testing. Tests behavior of each of two constructors
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * in the cases of: null array, short array, normal array.
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testDESKeySpec() {
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new DESKeySpec((byte []) null);
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an NullPointerException "
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an NullPointerException "
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new DESKeySpec(new byte [] {1, 2, 3});
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException on a short byte array.");
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new DESKeySpec(new byte[] {1, 2, 3, 4, 5, 6, 7, 8});
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected InvalidKeyException was thrown.");
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new DESKeySpec((byte []) null, 1);
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an NullPointerException "
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an NullPointerException "
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new DESKeySpec(new byte []  {1, 2, 3, 4, 5, 6, 7, 8}, 1);
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException on a short byte array.");
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new DESKeySpec(new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9}, 1);
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected InvalidKeyException was thrown.");
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getKey() method testing. Checks that modification of returned key
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * does not affect the internal key. Also test check an equality of
158e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     * the key with the key specified in the constructor. The object under
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the test is created by different constructors.
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetKey() {
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] key = {1, 2, 3, 4, 5, 6, 7, 8};
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DESKeySpec ks;
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ks = new DESKeySpec(key);
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("InvalidKeyException should not be thrown.");
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] res = ks.getKey();
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The returned array should be equal to the specified "
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in constructor.", Arrays.equals(key, res));
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        res[0] += 1;
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("The modification of returned key should not affect"
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "the underlying key.", key[0] == res[0]);
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] key1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ks = new DESKeySpec(key1, 2);
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("InvalidKeyException should not be thrown.");
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        res = ks.getKey();
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame("The returned array should not be the same object "
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "as specified in a constructor.", key1, res);
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] exp = new byte[8];
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.arraycopy(key1, 2, exp, 0, 8);
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The returned array should be equal to the specified "
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in constructor.", Arrays.equals(exp, res));
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * isParityAdjusted(byte[] key, offset) method testing. Tests if the
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * method throws appropriate exceptions on incorrect byte array, if
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * it returns false on the key which is not parity adjusted, and if
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * it returns true on parity adjusted key.
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testIsParityAdjusted() {
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DESKeySpec.isParityAdjusted(null, 1);
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException "
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] key = {1, 2, 3, 4, 5, 6, 7, 8};
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DESKeySpec.isParityAdjusted(key, 1);
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException "
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of short byte array.");
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] key_not_pa = {1, 2, 3, 4, 5, 6, 7, 8};
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertFalse("Method returns true when false is expected.",
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        DESKeySpec.isParityAdjusted(key_not_pa, 0));
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected InvalidKeyException was thrown.");
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] key_pa = {(byte) 128, (byte) 131, (byte) 133, (byte) 134,
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                         (byte) 137, (byte) 138, (byte) 140, (byte) 143};
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Method returns false when true is expected.",
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        DESKeySpec.isParityAdjusted(key_pa, 0));
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected InvalidKeyException was thrown.");
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * isWeak(byte[] key, int offset) method testing. Tests if the
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * method throws appropriate exceptions on incorrect byte array, if
244e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     * it returns true on weak or semi-weak keys, and if it returns
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * false on other keys.
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testIsWeak() {
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DESKeySpec.isWeak(null, 1);
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException "
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] key = {1, 2, 3, 4, 5, 6, 7, 8};
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DESKeySpec.isWeak(key, 1);
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException "
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of short byte array.");
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<semiweaks.length; i++) {
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Method returns false when true is expected",
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        DESKeySpec.isWeak(semiweaks[i], 0));
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidKeyException e) {
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Unexpected InvalidKeyException was thrown.");
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<notsemiweaks.length; i++) {
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertFalse("Method returns true when false is expected",
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        DESKeySpec.isWeak(notsemiweaks[i], 0));
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidKeyException e) {
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Unexpected InvalidKeyException was thrown.");
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static Test suite() {
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new TestSuite(DESKeySpecTest.class);
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
290