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/**
188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @author Alexander Y. Kleymenov
198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */
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 = {
458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0xE0, (byte) 0x01, (byte) 0xE0, (byte) 0x01,
468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0xF1, (byte) 0x01, (byte) 0xF1, (byte) 0x01 },
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0x01, (byte) 0xE0, (byte) 0x01, (byte) 0xE0,
498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0x01, (byte) 0xF1, (byte) 0x01, (byte) 0xF1 },
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0xFE, (byte) 0x1F, (byte) 0xFE, (byte) 0x1F,
528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0xFE, (byte) 0x0E, (byte) 0xFE, (byte) 0x0E },
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0x1F, (byte) 0xFE, (byte) 0x1F, (byte) 0xFE,
558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0x0E, (byte) 0xFE, (byte) 0x0E, (byte) 0xFE },
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0xE0, (byte) 0x1F, (byte) 0xE0, (byte) 0x1F,
588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0xF1, (byte) 0x0E, (byte) 0xF1, (byte) 0x0E },
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0x1F, (byte) 0xE0, (byte) 0x1F, (byte) 0xE0,
618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0x0E, (byte) 0xF1, (byte) 0x0E, (byte) 0xF1 },
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0x01, (byte) 0xFE, (byte) 0x01, (byte) 0xFE,
648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0x01, (byte) 0xFE, (byte) 0x01, (byte) 0xFE },
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0xFE, (byte) 0x01, (byte) 0xFE, (byte) 0x01,
678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0xFE, (byte) 0x01, (byte) 0xFE, (byte) 0x01 },
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0x01, (byte) 0x1F, (byte) 0x01, (byte) 0x1F,
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0x01, (byte) 0x0E, (byte) 0x01, (byte) 0x0E },
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0x1F, (byte) 0x01, (byte) 0x1F, (byte) 0x01,
738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0x0E, (byte) 0x01, (byte) 0x0E, (byte) 0x01 },
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0xE0, (byte) 0xFE, (byte) 0xE0, (byte) 0xFE,
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0xF1, (byte) 0xFE, (byte) 0xF1, (byte) 0xFE },
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0xFE, (byte) 0xE0, (byte) 0xFE, (byte) 0xE0,
798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0xFE, (byte) 0xF1, (byte) 0xFE, (byte) 0xF1 },
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01,
828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01 },
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0xFE, (byte) 0xFE, (byte) 0xFE, (byte) 0xFE,
858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0xFE, (byte) 0xFE, (byte) 0xFE, (byte) 0xFE },
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0xE0, (byte) 0xE0, (byte) 0xE0, (byte) 0xE0,
888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0xF1, (byte) 0xF1, (byte) 0xF1, (byte) 0xF1 },
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0x1F, (byte) 0x1F, (byte) 0x1F, (byte) 0x1F,
918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0x0E, (byte) 0x0E, (byte) 0x0E, (byte) 0x0E },
928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    };
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /* DES not weak or semi-weak keys */
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final byte[][] notsemiweaks = {
968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0x1f, (byte) 0x1f, (byte) 0x1f, (byte) 0x1f,
978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0x1f, (byte) 0x1f, (byte) 0x1f, (byte) 0x1f },
988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            { (byte) 0xe0, (byte) 0xe0, (byte) 0xe0, (byte) 0xe0,
1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    (byte) 0xe0, (byte) 0xe0, (byte) 0xe0, (byte) 0xe0 }
1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    };
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Constructors testing. Tests behavior of each of two constructors
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * in the cases of: null array, short array, normal array.
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testDESKeySpec() {
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            new DESKeySpec((byte[]) null);
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an NullPointerException "
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an NullPointerException "
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            new DESKeySpec(new byte[] { 1, 2, 3 });
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException on a short byte array.");
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            new DESKeySpec(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 });
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected InvalidKeyException was thrown.");
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            new DESKeySpec((byte[]) null, 1);
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an NullPointerException "
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an NullPointerException "
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            new DESKeySpec(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }, 1);
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException on a short byte array.");
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            new DESKeySpec(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, 1);
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected InvalidKeyException was thrown.");
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getKey() method testing. Checks that modification of returned key
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * does not affect the internal key. Also test check an equality of
159e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     * the key with the key specified in the constructor. The object under
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the test is created by different constructors.
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetKey() {
1638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        byte[] key = { 1, 2, 3, 4, 5, 6, 7, 8 };
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DESKeySpec ks;
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ks = new DESKeySpec(key);
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("InvalidKeyException should not be thrown.");
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] res = ks.getKey();
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The returned array should be equal to the specified "
1738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "in constructor.", Arrays.equals(key, res));
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        res[0] += 1;
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("The modification of returned key should not affect"
1768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "the underlying key.", key[0] == res[0]);
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        byte[] key1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ks = new DESKeySpec(key1, 2);
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("InvalidKeyException should not be thrown.");
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        res = ks.getKey();
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame("The returned array should not be the same object "
1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "as specified in a constructor.", key1, res);
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] exp = new byte[8];
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.arraycopy(key1, 2, exp, 0, 8);
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The returned array should be equal to the specified "
1918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "in constructor.", Arrays.equals(exp, res));
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * isParityAdjusted(byte[] key, offset) method testing. Tests if the
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * method throws appropriate exceptions on incorrect byte array, if
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * it returns false on the key which is not parity adjusted, and if
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * it returns true on parity adjusted key.
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testIsParityAdjusted() {
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DESKeySpec.isParityAdjusted(null, 1);
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException "
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        byte[] key = { 1, 2, 3, 4, 5, 6, 7, 8 };
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DESKeySpec.isParityAdjusted(key, 1);
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException "
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of short byte array.");
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        byte[] key_not_pa = { 1, 2, 3, 4, 5, 6, 7, 8 };
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertFalse("Method returns true when false is expected.",
2238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    DESKeySpec.isParityAdjusted(key_not_pa, 0));
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected InvalidKeyException was thrown.");
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        byte[] key_pa = { (byte) 128, (byte) 131, (byte) 133, (byte) 134,
2318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                (byte) 137, (byte) 138, (byte) 140, (byte) 143 };
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Method returns false when true is expected.",
2348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    DESKeySpec.isParityAdjusted(key_pa, 0));
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected InvalidKeyException was thrown.");
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * isWeak(byte[] key, int offset) method testing. Tests if the
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * method throws appropriate exceptions on incorrect byte array, if
245e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     * it returns true on weak or semi-weak keys, and if it returns
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * false on other keys.
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testIsWeak() {
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DESKeySpec.isWeak(null, 1);
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException "
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of null byte array.");
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        byte[] key = { 1, 2, 3, 4, 5, 6, 7, 8 };
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DESKeySpec.isWeak(key, 1);
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should raise an InvalidKeyException "
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in case of short byte array.");
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected NullPointerException was thrown.");
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidKeyException e) {
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        for (int i = 0; i < semiweaks.length; i++) {
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Method returns false when true is expected",
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        DESKeySpec.isWeak(semiweaks[i], 0));
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidKeyException e) {
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Unexpected InvalidKeyException was thrown.");
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        for (int i = 0; i < notsemiweaks.length; i++) {
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertFalse("Method returns true when false is expected",
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        DESKeySpec.isWeak(notsemiweaks[i], 0));
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidKeyException e) {
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Unexpected InvalidKeyException was thrown.");
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static Test suite() {
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new TestSuite(DESKeySpecTest.class);
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
291