/* * Copyright 2011 Licel LLC. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.licel.jcardsim.crypto; import javacard.framework.Util; import javacard.security.AESKey; import javacard.security.KeyBuilder; import junit.framework.TestCase; import org.bouncycastle.crypto.engines.DESEngine; import org.bouncycastle.crypto.engines.DESedeEngine; import org.bouncycastle.util.Arrays; /** * Test for <code>SymmetricKeyImpl</code> */ public class SymmetricKeyImplTest extends TestCase { public SymmetricKeyImplTest(String testName) { super(testName); } protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); } /** * Test of clearKey method, of class SymmetricKeyImpl. */ public void testClearKey() { System.out.println("clearKey"); SymmetricKeyImpl desKey = new SymmetricKeyImpl(KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES); byte[] key = new byte[8]; Util.arrayFillNonAtomic(key, (short) 0, (short) key.length, (byte) 7); desKey.setKey(key, (short) 0); desKey.clearKey(); assertEquals(false, desKey.isInitialized()); } /** * Test of setKey method, of class SymmetricKeyImpl. */ public void testSetKey() { System.out.println("setKey"); SymmetricKeyImpl desKey = new SymmetricKeyImpl(KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES); byte[] key = new byte[8]; Util.arrayFillNonAtomic(key, (short) 0, (short) key.length, (byte) 7); desKey.setKey(key, (short) 0); assertEquals(true, desKey.isInitialized()); } /** * Test of getKey method, of class SymmetricKeyImpl. */ public void testGetKey() { System.out.println("getKey"); SymmetricKeyImpl desKey = new SymmetricKeyImpl(KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES); byte[] key = new byte[8]; Util.arrayFillNonAtomic(key, (short) 0, (short) key.length, (byte) 7); desKey.setKey(key, (short) 0); byte[] testKey = new byte[8]; desKey.getKey(testKey, (short) 0); assertEquals(true, Arrays.areEqual(testKey, key)); } /** * Test of getCipher method, of class SymmetricKeyImpl. */ public void testGetCipher() { System.out.println("getCipher"); // des key SymmetricKeyImpl desKey = new SymmetricKeyImpl(KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES); byte[] key = new byte[8]; Util.arrayFillNonAtomic(key, (short) 0, (short) key.length, (byte) 7); desKey.setKey(key, (short) 0); boolean isValidCipher = (desKey.getCipher() instanceof DESEngine); assertEquals(true, isValidCipher); // 3des key SymmetricKeyImpl des3Key = new SymmetricKeyImpl(KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES3_3KEY); key = new byte[24]; Util.arrayFillNonAtomic(key, (short) 0, (short) key.length, (byte) 7); des3Key.setKey(key, (short) 0); isValidCipher = (des3Key.getCipher() instanceof DESedeEngine); assertEquals(true, isValidCipher); // aes key - 128 AESKey aesKey = (AESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_AES, KeyBuilder.LENGTH_AES_128, false); key = new byte[16]; Util.arrayFillNonAtomic(key, (short) 0, (short) key.length, (byte) 7); aesKey.setKey(key, (short) 0); // aes key - 192 aesKey = (AESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_AES, KeyBuilder.LENGTH_AES_192, false); key = new byte[24]; Util.arrayFillNonAtomic(key, (short) 0, (short) key.length, (byte) 7); aesKey.setKey(key, (short) 0); // aes key - 256 aesKey = (AESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_AES, KeyBuilder.LENGTH_AES_256, false); key = new byte[32]; Util.arrayFillNonAtomic(key, (short) 0, (short) key.length, (byte) 7); aesKey.setKey(key, (short) 0); // aes key - 256 aesKey = (AESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_AES, KeyBuilder.LENGTH_AES_256, false); key = new byte[32]; Util.arrayFillNonAtomic(key, (short) 0, (short) key.length, (byte) 7); aesKey.setKey(key, (short) 0); } }