package gnu.testlet.gnu.crypto.cipher; // ---------------------------------------------------------------------------- // $Id: TestOfRijndael.java,v 1.3 2005/10/06 04:24:19 rsdio Exp $ // // Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. // // This file is part of GNU Crypto. // // GNU Crypto is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2, or (at your option) // any later version. // // GNU Crypto is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; see the file COPYING. If not, write to the // // Free Software Foundation Inc., // 51 Franklin Street, Fifth Floor, // Boston, MA 02110-1301 // USA // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give // you permission to link this library with independent modules to // produce an executable, regardless of the license terms of these // independent modules, and to copy and distribute the resulting // executable under terms of your choice, provided that you also meet, // for each linked independent module, the terms and conditions of the // license of that module. An independent module is a module which is // not derived from or based on this library. If you modify this // library, you may extend this exception to your version of the // library, but you are not obligated to do so. If you do not wish to // do so, delete this exception statement from your version. // ---------------------------------------------------------------------------- // Tags: GNU-CRYPTO // Uses: BaseCipherTestCase import gnu.crypto.cipher.IBlockCipher; import gnu.crypto.cipher.Rijndael; import gnu.testlet.TestHarness; import java.util.HashMap; /** * <p>Conformance tests for the {@link Rijndael} implementation.</p> * * @version $Revision: 1.3 $ */ public class TestOfRijndael extends BaseCipherTestCase { // Constants and variables // ------------------------------------------------------------------------- // KAT and MCT vectors used in this test case private static final String[] vk_128; private static final String[] vk_192; private static final String[] vk_256; private static final String[] vt_128; private static final String[] vt_192; private static final String[] vt_256; private static final String[] mct_ecb_e_128; private static final String[] mct_ecb_e_192; private static final String[] mct_ecb_e_256; private static final String[] mct_ecb_d_128; private static final String[] mct_ecb_d_192; private static final String[] mct_ecb_d_256; private static final String[] mct_cbc_e_128; private static final String[] mct_cbc_e_192; private static final String[] mct_cbc_e_256; private static final String[] mct_cbc_d_128; private static final String[] mct_cbc_d_192; private static final String[] mct_cbc_d_256; // static initialiser static { vk_128 = new String[] { "0EDD33D3C621E546455BD8BA1418BEC8", "C0CC0C5DA5BD63ACD44A80774FAD5222", "2F0B4B71BC77851B9CA56D42EB8FF080", "6B1E2FFFE8A114009D8FE22F6DB5F876", "9AA042C315F94CBB97B62202F83358F5"}; vk_192 = new String[] { "DE885DC87F5A92594082D02CC1E1B42C", "C749194F94673F9DD2AA1932849630C1", "0CEF643313912934D310297B90F56ECC", "C4495D39D4A553B225FBA02A7B1B87E1", "636D10B1A0BCAB541D680A7970ADC830"}; vk_256 = new String[] { "E35A6DCB19B201A01EBCFA8AA22B5759", "5075C2405B76F22F553488CAE47CE90B", "49DF95D844A0145A7DE01C91793302D3", "E7396D778E940B8418A86120E5F421FE", "05F535C36FCEDE4657BE37F4087DB1EF"}; vt_128 = new String[] { "3AD78E726C1EC02B7EBFE92B23D9EC34", "45BC707D29E8204D88DFBA2F0B0CAD9B", "161556838018F52805CDBD6202002E3F", "F5569B3AB6A6D11EFDE1BF0A64C6854A", "64E82B50E501FBD7DD4116921159B83E"}; vt_192 = new String[] { "6CD02513E8D4DC986B4AFE087A60BD0C", "423D2772A0CA56DAABB48D2129062987", "1021F2A8DA70EB2219DC16804445FF98", "C636E35B402577F96974D8804295EBB8", "1566D2E57E8393C19E29F892EA28A9A7"}; vt_256 = new String[] { "DDC6BF790C15760D8D9AEB6F9A75FD4E", "C7098C217C334D0C9BDF37EA13B0822C", "60F0FB0D4C56A8D4EEFEC5264204042D", "73376FBBF654D0686E0E84001477106B", "2F443B52BA5F0C6EA0602C7C4FD259B6"}; mct_ecb_e_128 = new String[] { "C34C052CC0DA8D73451AFE5F03BE297F", "0AC15A9AFBB24D54AD99E987208272E2", "A3D43BFFA65D0E80092F67A314857870", "355F697E8B868B65B25A04E18D782AFA", "ACC863637868E3E068D2FD6E3508454A"}; mct_ecb_e_192 = new String[] { "F3F6752AE8D7831138F041560631B114", "77BA00ED5412DFF27C8ED91F3C376172", "2D92DE893574463412BD7D121A94952F", "96650F835912F5E748422727802C6CE1", "5FCCD4B5F125ADC5B85A56DB32283732"}; mct_ecb_e_256 = new String[] { "8B79EECC93A0EE5DFF30B4EA21636DA4", "C737317FE0846F132B23C8C2A672CE22", "E58B82BFBA53C0040DC610C642121168", "10B296ABB40504995DB71DDA0B7E26FB", "B7198D8E88BAA25234C18517E99BB70D"}; mct_ecb_d_128 = new String[] { "44416AC2D1F53C583303917E6BE9EBE0", "E3FD51123B48A2E2AB1DB29894202222", "877B88A77AEF04F05546539E17259F53", "C7A71C1B46261602EB1EE48FDA8155A4", "6B6AC8E00FAF7E045ECCFC426A137221"}; mct_ecb_d_192 = new String[] { "48E31E9E256718F29229319C19F15BA4", "CC01684BE9B29ED01EA7923E7D2380AA", "8726B4E66D6B8FBAA22D42981A5A40CC", "83B9A21A0710FDB9C603797613772ED6", "F15479A2B2C250F7E5C11D333D867CBD"}; mct_ecb_d_256 = new String[] { "058CCFFDBBCB382D1F6F56585D8A4ADE", "15173A0EB65F5CC05E704EFE61D9E346", "85F083ACC676D91EDD1ABFB43935237A", "42C8F0ABC58E0BEAC32911D2DD9FA8C8", "5E44123D2CA07981B073BB2749F557D6"}; mct_cbc_e_128 = new String[] { "8A05FC5E095AF4848A08D328D3688E3D", "192D9B3AA10BB2F7846CCBA0085C657A", "40D8DAF6D1FDA0A073B3BD18B7695D2E", "3EDBE80D69A1D2248CA55FC17C4EF3C5", "D87891CF573C99EAE4349A70CA099415"}; mct_cbc_e_192 = new String[] { "7BD966D53AD8C1BB85D2ADFAE87BB104", "869C061BE9CFEAB5D285B0724A9A8970", "9E58A52B3840DBE16E8063A18220FEE4", "730A256C202B9D57F3C0D73AD4B6CBED", "E79EF11C5C1FD1AB75280BCFFCFE89D4"}; mct_cbc_e_256 = new String[] { "FE3C53653E2F45B56FCD88B2CC898FF0", "7CE2ABAF8BEF23C4816DC8CE842048A7", "50CD14A12C6852D39654C816BFAF9AC2", "3F411DAD0E339FE281637133BF46BD13", "5BA2C7663A4061719A7CCC2AF2A3EE8A"}; mct_cbc_d_128 = new String[] { "FACA37E0B0C85373DF706E73F7C9AF86", "F5372F9735C5685F1DA362AF6ECB2940", "5496A4C29C7670F61B5D5DF6181F5947", "940CC5A2AF4F1F8D1862B47BCF63E4CA", "08832415D97820DE305A58A9AD111A9E"}; mct_cbc_d_192 = new String[] { "5DF678DD17BA4E75B61768C6ADEF7C7B", "F9604074F8FA45AC71959888DD056F9F", "98A957EA6DBE623B7E08F919812A3898", "AD6D29D6482764BB4BC27A87AE5CD877", "DA5EB591FDC48F0D9E4EBD373E5717A3"}; mct_cbc_d_256 = new String[] { "4804E1818FE6297519A3E88C57310413", "D36C27EBB8FA0BC9FA368DF850FD45FB", "EBCB4DC84155682856D94B442BC597EE", "23AA6A6B4BE8C04E19707CA330804C4E", "9B1AA0F33416484BA68740E821F95CD3"}; } // Constructor(s) // ------------------------------------------------------------------------- // default 0-arguments constructor // Class methods // ------------------------------------------------------------------------- // Instance methods // ------------------------------------------------------------------------- public void test(TestHarness harness) { harness.checkPoint("TestOfRijndael"); cipher = new Rijndael(); HashMap attrib = new HashMap(); attrib.put(IBlockCipher.CIPHER_BLOCK_SIZE, new Integer(16)); attrib.put(IBlockCipher.KEY_MATERIAL, new byte[16]); try { cipher.init(attrib); String algorithm = cipher.name(); harness.check(validityTest(), "validityTest("+algorithm+")"); harness.check(cloneabilityTest(), "cloneabilityTest("+algorithm+")"); harness.check(katVK(vk_128, cipher, 16), "KAT VK "+algorithm+"-128"); harness.check(katVK(vk_192, cipher, 24), "KAT VK "+algorithm+"-192"); harness.check(katVK(vk_256, cipher, 32), "KAT VK "+algorithm+"-256"); harness.check(katVT(vt_128, cipher, 16), "KAT VT "+algorithm+"-128"); harness.check(katVT(vt_192, cipher, 24), "KAT VT "+algorithm+"-192"); harness.check(katVT(vt_256, cipher, 32), "KAT VT "+algorithm+"-256"); harness.check(mctEncryptECB(mct_ecb_e_128, cipher, 16), "MCT ECB Encryption "+algorithm+"-128"); harness.check(mctEncryptECB(mct_ecb_e_192, cipher, 24), "MCT ECB Encryption "+algorithm+"-192"); harness.check(mctEncryptECB(mct_ecb_e_256, cipher, 32), "MCT ECB Encryption "+algorithm+"-256"); harness.check(mctDecryptECB(mct_ecb_d_128, cipher, 16), "MCT ECB Decryption "+algorithm+"-128"); harness.check(mctDecryptECB(mct_ecb_d_192, cipher, 24), "MCT ECB Decryption "+algorithm+"-192"); harness.check(mctDecryptECB(mct_ecb_d_256, cipher, 32), "MCT ECB Decryption "+algorithm+"-256"); harness.check(mctEncryptCBC(mct_cbc_e_128, cipher, 16), "MCT CBC Encryption "+algorithm+"-128"); harness.check(mctEncryptCBC(mct_cbc_e_192, cipher, 24), "MCT CBC Encryption "+algorithm+"-192"); harness.check(mctEncryptCBC(mct_cbc_e_256, cipher, 32), "MCT CBC Encryption "+algorithm+"-256"); harness.check(mctDecryptCBC(mct_cbc_d_128, cipher, 16), "MCT CBC Decryption "+algorithm+"-128"); harness.check(mctDecryptCBC(mct_cbc_d_192, cipher, 24), "MCT CBC Decryption "+algorithm+"-192"); harness.check(mctDecryptCBC(mct_cbc_d_256, cipher, 32), "MCT CBC Decryption "+algorithm+"-256"); } catch (Exception x) { harness.debug(x); harness.fail("TestOfRijndael"); } } }