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 Alexander Y. Kleymenov
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.crypto.tests.javax.crypto.spec;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.spec.RC5ParameterSpec;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.Test;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class RC5ParameterSpecTest extends TestCase {
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * RC5ParameterSpec(int version, int rounds, int wordSize, byte[] iv) method
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * testing. Tests that IllegalArgumentException is thrown in the case of
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * inappropriate constructor parameters and that input iv array is
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * copied to protect against subsequent modification.
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRC5ParameterSpec1() {
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int version = 1;
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int rounds = 5;
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int wordSize = 16;
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] iv = {1, 2, 3, 4};
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new RC5ParameterSpec(version, rounds, wordSize, null);
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("An IllegalArgumentException should be thrown "
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in the case of null iv.");
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new RC5ParameterSpec(version, rounds, wordSize+8, iv);
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("An IllegalArgumentException should be thrown "
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in the case of short iv.");
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new RC5ParameterSpec(version, rounds, wordSize, new byte[] {1, 2, 3});
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("An IllegalArgumentException should be thrown "
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in the case of short iv.");
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds,
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                                wordSize, iv);
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iv[0] ++;
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("The change of iv specified in the constructor "
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "should not cause the change of internal array.",
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    iv[0] == ps.getIV()[0]);
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * RC5ParameterSpec(int version, int rounds, int wordSize, byte[] iv, int
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * offset) method testing. Tests that IllegalArgumentException is thrown in
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the case of inappropriate constructor parameters and that input iv array
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * is copied to protect against subsequent modification.
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRC5ParameterSpec2() {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int version = 1;
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int rounds = 5;
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int wordSize = 16;
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] iv = {1, 2, 3, 4, 5, 6};
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int offset = 2;
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new RC5ParameterSpec(version, rounds, wordSize, null, offset);
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("An IllegalArgumentException should be thrown "
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in the case of null iv.");
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new RC5ParameterSpec(version, rounds, wordSize+8, iv, offset);
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("An IllegalArgumentException should be thrown "
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in the case of short iv.");
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new RC5ParameterSpec(version, rounds, wordSize, iv, offset+1);
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("An IllegalArgumentException should be thrown "
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in the case of short iv.");
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new RC5ParameterSpec(version, rounds, wordSize, new byte[] { 1, 2,
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    3, 4 }, offset);
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("An IllegalArgumentException should be thrown "
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in the case of short iv.");
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, wordSize,
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                                    iv, offset);
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iv[offset] ++;
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("The change of iv specified in the constructor "
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "should not cause the change of internal array.",
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    iv[offset] == ps.getIV()[0]);
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for HARMONY-1077
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new RC5ParameterSpec(0, 9, 77, new byte[] { 2 }, -100);
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("ArrayIndexOutOfBoundsException expected");
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (ArrayIndexOutOfBoundsException e) {
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getVersion() method testing. Tests that returned value is
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * equal to the value specified in the constructor.
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetVersion() {
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int version = 1;
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int rounds = 5;
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int wordSize = 16;
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, wordSize);
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The returned version value should be equal to the "
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + "value specified in the constructor.",
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ps.getVersion() == version);
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getRounds() method testing. Tests that returned value is
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * equal to the value specified in the constructor.
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetRounds() {
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int version = 1;
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int rounds = 5;
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int wordSize = 16;
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, wordSize);
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The returned rounds value should be equal to the "
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + "value specified in the constructor.",
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ps.getRounds() == rounds);
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getWordSize() method testing. Tests that returned value is
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * equal to the value specified in the constructor.
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetWordSize() {
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int version = 1;
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int rounds = 5;
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int wordSize = 16;
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, wordSize);
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The returned wordSize value should be equal to the "
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + "value specified in the constructor.",
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ps.getWordSize() == wordSize);
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getIV() method testing. Tests that returned array is equal to the
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * array specified in the constructor. Checks that modification
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * of returned array does not affect the internal array. Also it checks
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * that getIV() method returns null if iv is not specified.
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetIV() {
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int version = 1;
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int rounds = 5;
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int wordSize = 16;
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] iv = {1, 2, 3, 4};
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds,
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                            wordSize, iv);
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] result = ps.getIV();
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (! Arrays.equals(iv, result)) {
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("The returned iv is not equal to the specified "
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "in the constructor.");
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        result[0] ++;
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("The change of returned by getIV() method iv "
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "should not cause the change of internal array.",
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    result[0] == ps.getIV()[0]);
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ps = new RC5ParameterSpec(version, rounds, wordSize);
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("The getIV() method should return null if the parameter "
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "set does not contain IV.", ps.getIV());
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * equals(Object obj) method testing. Tests the correctness of equal
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * operation: it should be reflexive, symmetric, transitive, consistent
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * and should be false on null object.
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testEquals() {
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int version = 1;
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int rounds = 5;
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int wordSize = 16;
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] iv = {1, 2, 3, 4, 5, 6};
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps1 = new RC5ParameterSpec(version, rounds,
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                                wordSize, iv);
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps2 = new RC5ParameterSpec(version, rounds,
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                                wordSize, iv);
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps3 = new RC5ParameterSpec(version, rounds, wordSize,
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                    new byte[] {1, 2, 3, 4});
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // checking for reflexive law:
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The equivalence relation should be reflexive.",
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                        ps1.equals(ps1));
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Objects built on the same parameters should be equal.",
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                        ps1.equals(ps2));
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // checking for symmetric law:
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The equivalence relation should be symmetric.",
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                        ps2.equals(ps1));
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Objects built on the equal parameters should be equal.",
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                        ps2.equals(ps3));
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // checking for transitive law:
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The equivalence relation should be transitive.",
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                        ps1.equals(ps3));
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Should return not be equal to null object.",
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                        ps1.equals(null));
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ps2 = new RC5ParameterSpec(version+1, rounds, wordSize, iv);
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Objects should not be equal.", ps1.equals(ps2));
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ps2 = new RC5ParameterSpec(version, rounds+1, wordSize, iv);
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Objects should not be equal.", ps1.equals(ps2));
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ps2 = new RC5ParameterSpec(version, rounds, wordSize/2, iv);
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Objects should not be equal.", ps1.equals(ps2));
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ps2 = new RC5ParameterSpec(version, rounds, wordSize,
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                    new byte[] {4, 3, 2, 1});
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Objects should not be equal.", ps1.equals(ps2));
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * hashCode() method testing. Tests that for equal objects hash codes
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * are equal.
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testHashCode() {
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int version = 1;
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int rounds = 5;
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int wordSize = 16;
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] iv = {1, 2, 3, 4, 5, 6};
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps1 = new RC5ParameterSpec(version, rounds,
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                                wordSize, iv);
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        RC5ParameterSpec ps2 = new RC5ParameterSpec(version, rounds,
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                                wordSize, iv);
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Equal objects should have the same hash codes.",
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                            ps1.hashCode() == ps2.hashCode());
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static Test suite() {
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new TestSuite(RC5ParameterSpecTest.class);
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
283