|
DESCoreEde2KeyBlockCipher |
|
1 /* $RCSfile: DESCoreEde2KeyBlockCipher.java,v $ 2 * $Revision: 1.10 $ 3 * $Date: 2001/11/02 09:11:00 $ 4 * $Author: uwe $ 5 * $State: Exp $ 6 * 7 * Created on August 7, 2001 4:52 PM 8 * 9 * Copyright (C) 2001 Uwe Guenther <uwe@cscc.de> 10 * 11 * This file is part of the jhbci JCE-ServiceProvider. The jhbci JCE- 12 * ServiceProvider is a library, written in JavaTM, that should be 13 * used in HBCI banking applications (clients and may be servers), 14 * to do cryptographic operations. 15 * 16 * The jhbci library is free software; you can redistribute it and/or 17 * modify it under the terms of the GNU Lesser General Public 18 * License as published by the Free Software Foundation; either 19 * version 2.1 of the License, or (at your option) any later version. 20 * 21 * The jhbci library is distributed in the hope that it will be useful, 22 * but WITHOUT ANY WARRANTY; without even the implied warranty of 23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 24 * Lesser General Public License for more details. 25 * 26 * You should have received a copy of the GNU Lesser General Public 27 * License along with this library; if not, write to the Free Software 28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 29 * 30 */ 31 32 package de.cscc.crypto.provider; 33 34 import javax.crypto.IllegalBlockSizeException; 35 import javax.crypto.ShortBufferException; 36 37 /** 38 * DESCoreEde2KeyBlockCipher Class. 39 * 40 * @author <a href=mailto:uwe@cscc.de>Uwe Günther</a> 41 * @version $Revision: 1.10 $ 42 */ 43 class DESCoreEde2KeyBlockCipher extends DESCoreBlockCipher { 44 45 /** 46 * DES block cipher algorithm object with key1. Will be 47 * used for encryption in ede mode for stage 1 and 3, 48 * respectively for decryption also in stage 1 and 3. 49 */ 50 private DESCore1KeyBlockCipher cipherWithKey1; 51 52 /** 53 * DES block cipher algorithm object with key2. Will be 54 * used for encryption in ede mode for stage 2, 55 * respectively for decryption also in stage 2. 56 */ 57 private DESCore1KeyBlockCipher cipherWithKey2; 58 59 60 /** 61 * Don't create a DESCoreEde2KeyBlockCipher object with default 62 * constructor. 63 */ 64 private DESCoreEde2KeyBlockCipher() {} 65 66 /** 67 * Creates a DESCoreEde2KeyBlockCipher algorithm instance with 68 * this byte[16] key, starting at offset. 69 * 70 * @param key the key that is used for this algorithm object. 71 * @throws IllegalBlockSizeException will be thrown, if the 72 * deliverd byte array is less than 16 byte. 73 */ 74 public DESCoreEde2KeyBlockCipher(byte[] key) 75 throws IllegalBlockSizeException { 76 77 this.cipherWithKey1 =new DESCore1KeyBlockCipher(key, 0); 78 this.cipherWithKey2 =new DESCore1KeyBlockCipher(key, 8); 79 } 80 81 /** 82 * Creates a DESCoreEde2KeyBlockCipher algorithm instance with 83 * this byte[offset+16] key, starting at offset. 84 * 85 * @param key the key that is used for this algorithm object. 86 * @param offset to start at. 87 * @throws IllegalBlockSizeException will be thrown, if the 88 * deliverd byte array is less than offset+16 byte. 89 */ 90 public DESCoreEde2KeyBlockCipher(byte[] key, int offset) 91 throws IllegalBlockSizeException { 92 93 this.cipherWithKey1 =new DESCore1KeyBlockCipher(key, offset+0); 94 this.cipherWithKey2 =new DESCore1KeyBlockCipher(key, offset+8); 95 } 96 97 /** 98 * Returns a string representation of the object. 99 * 100 * @return a string representation of the object. 101 */ 102 public String toString() { 103 104 return "cipherWithKey1: [" + this.cipherWithKey1.toString() + "] [" + 105 "cipherWithKey2: [" + this.cipherWithKey2.toString() + "]"; 106 } 107 108 /** 109 * Returns the algorithm specific key size in bits. If you subclass 110 * these abstract class, you have to implement these method. 111 * 112 * @return the algorithm specific key size in bits. 113 */ 114 public int getKeyBitSize() { 115 116 //112 117 return this.cipherWithKey1.getKeyBitSize() + 118 this.cipherWithKey2.getKeyBitSize() ; 119 } 120 121 /** 122 * Returns the algorithm specific key size in bytes. If you subclass 123 * these abstract class, you have to implement these method. 124 * 125 * @return the algorithm specific key size in bytes. 126 */ 127 public int getKeyByteSize() { 128 129 //16 130 return this.cipherWithKey1.getKeyByteSize() + 131 this.cipherWithKey2.getKeyByteSize() ; 132 } 133 134 /** 135 * The DES encryption operation. 136 * 137 * If (input.length-inputOffset > 8) we use only the first 8 bytes 138 * for the block. 139 * 140 * @param input the 64 bit data block that will be encrypted. 141 * @param inputOffset the offset in input where the input starts. 142 * @param output the buffer for the result. 143 * @param outputOffset the offset in output where the result is stored. 144 * @throws IllegalBlockSizeException will be thrown, if the 145 * deliverd byte array has a length lesser than 8. 146 * @throws ShortBufferException will be thrown, if the 147 * output buffer byte array has a length lesser than 8. 148 * @return the number of bytes stored in output. 149 */ 150 public int encrypt(byte[] input, int inputOffset, 151 byte[] output, int outputOffset) 152 throws IllegalBlockSizeException, ShortBufferException { 153 154 this.cipherWithKey1.encrypt(input, inputOffset, output, outputOffset); 155 this.cipherWithKey2.decrypt(output, outputOffset, output, outputOffset); 156 return this.cipherWithKey1.encrypt(output, outputOffset, output, outputOffset); 157 } 158 159 /** 160 * The DES decryption operation. 161 * 162 * If (input.length-inputOffset > 8) we use only the first 8 bytes for the block. 163 * 164 * @param input the 64 bit data block that will be decrypted. 165 * @param inputOffset the offset in input where the input starts. 166 * @param output the buffer for the result. 167 * @param outputOffset the offset in output where the result is stored. 168 * @throws IllegalBlockSizeException will be thrown, if the 169 * deliverd byte array has a length lesser than 8. 170 * @throws ShortBufferException will be thrown, if the 171 * output buffer byte array has a length lesser than 8. 172 * @return the number of bytes stored in output. 173 */ 174 public int decrypt(byte[] input, int inputOffset, 175 byte[] output, int outputOffset) 176 throws IllegalBlockSizeException, ShortBufferException { 177 178 this.cipherWithKey1.decrypt(input, inputOffset, output, outputOffset); 179 this.cipherWithKey2.encrypt(output, outputOffset, output, outputOffset); 180 return this.cipherWithKey1.decrypt(output, outputOffset, output, outputOffset); 181 } 182 } 183
|
DESCoreEde2KeyBlockCipher |
|