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