|
DESOperationModeInitializationVectorSpec |
|
1 /* $RCSfile: DESOperationModeInitializationVectorSpec.java,v $ 2 * $Revision: 1.7 $ 3 * $Date: 2002/01/17 19:24:55 $ 4 * $Author: uwe $ 5 * $State: Exp $ 6 * 7 * Created on August 13, 2001 12:42 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.spec; 33 34 import java.security.spec.AlgorithmParameterSpec; 35 import java.util.Arrays; 36 37 import javax.crypto.IllegalBlockSizeException; 38 39 import de.cscc.crypto.util.ByteUtil; 40 41 /** 42 * DES Initialization Vector (64 bit) class. 43 * 44 * <p>This class is immutable. 45 * 46 * @author <a href=mailto:uwe@cscc.de>Uwe Günther</a> 47 * @version $Revision: 1.7 $ 48 */ 49 public class DESOperationModeInitializationVectorSpec 50 implements AlgorithmParameterSpec, Cloneable { 51 52 /** 53 * The byte[8] long internal data representation of the initialization 54 * vector. 55 */ 56 private byte[] iv = new byte[8]; 57 58 /** 59 * Creates a new DESOperationModeInitializationVectorSpec. 60 * 61 * @param iv the initialization vector to set. 62 * @throws IllegalBlockSizeException if length of iv shorter than 8 bytes. 63 * If it is longer, we use only the first 8 bytes from iv. 64 */ 65 public DESOperationModeInitializationVectorSpec(byte[] iv) 66 throws IllegalBlockSizeException { 67 this(iv, 0); 68 } 69 70 /** 71 * Creates a new DESOperationModeInitializationVectorSpec. 72 * 73 * @param iv the initialization vector to set. 74 * @param offset the offset in iv, where iv starts. 75 * @throws IllegalBlockSizeException if length of iv shorter than 76 * offset+8 bytes. If it is longer, we use only the first 8 bytes from iv, 77 * starting at offset. 78 */ 79 public DESOperationModeInitializationVectorSpec(byte[] iv, int offset) 80 throws IllegalBlockSizeException { 81 if (iv.length-offset < 8){ 82 throw new IllegalBlockSizeException( 83 "Usable byte range is " + (iv.length-offset) + 84 " bytes large, but it should be 8 bytes or larger."); 85 } 86 System.arraycopy(iv, offset, this.iv, 0, 8); 87 } 88 89 /** 90 * Creates a new DESOperationModeInitializationVectorSpec from an existing 91 * one. 92 * 93 * @param iv the initialization vector to set. 94 */ 95 public DESOperationModeInitializationVectorSpec 96 (DESOperationModeInitializationVectorSpec iv) { 97 System.arraycopy(iv.iv, 0, this.iv, 0, 8); 98 } 99 100 /** 101 * Creates and returns a deep copy of this object. 102 * 103 * @return a clone of this instance. 104 * @see java.lang.Cloneable 105 * @exception CloneNotSupportedException if the object's class does not 106 * support the <code>Cloneable</code> interface. Subclasses 107 * that override the <code>clone</code> method can also 108 * throw this exception to indicate that an instance cannot 109 * be cloned. */ 110 public Object clone() throws CloneNotSupportedException { 111 DESOperationModeInitializationVectorSpec result = 112 (DESOperationModeInitializationVectorSpec) super.clone(); 113 result.iv = (byte[]) this.iv.clone(); 114 return result; 115 } 116 117 /** 118 * Indicates whether some other object is "equal to" this one. 119 * 120 * @param obj the reference object with which to compare. 121 * @return <code>true</code> if this object is the same as the obj 122 * argument; <code>false</code> otherwise. 123 * @see #hashCode() 124 * @see java.util.Hashtable 125 */ 126 public boolean equals(Object obj) { 127 //Only for performance. 128 if (this == obj) { 129 return true; 130 } 131 132 //If obj == null then instanceof returns false, see JLS 15.20.2 133 if (!(obj instanceof DESOperationModeInitializationVectorSpec)) { 134 return false; 135 } 136 137 DESOperationModeInitializationVectorSpec other = 138 (DESOperationModeInitializationVectorSpec) obj; 139 return Arrays.equals(this.iv, other.iv); 140 } 141 142 /** 143 * Returns a hash code value for the object. 144 * 145 * @return a hash code value for this object. 146 * @see #equals(java.lang.Object) 147 * @see java.util.Hashtable 148 */ 149 public int hashCode() { 150 int result = 17; 151 for (int i = 0; i < this.iv.length; i++) { 152 result = 37*result + this.iv[i]; 153 } 154 return result; 155 } 156 157 /** 158 * Returns a string representation of the object. 159 * 160 * @return a string representation of the object. 161 */ 162 public String toString() { 163 return ByteUtil.toHex(this.iv); 164 } 165 166 /** 167 * Returns the initialization vector. 168 * 169 * @return a initialization vector as byte[8]. 170 */ 171 public byte[] getIv() { 172 return (byte[]) this.iv.clone(); 173 } 174 } 175
|
DESOperationModeInitializationVectorSpec |
|