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