|
RIPEMD160ByteCounter |
|
1 /* $RCSfile: RIPEMD160ByteCounter.java,v $ 2 * $Revision: 1.9 $ 3 * $Date: 2002/01/04 13:02:31 $ 4 * $Author: uwe $ 5 * $State: Exp $ 6 * 7 * Created on July 15, 2001, 6:24 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 de.cscc.crypto.util.LongUtil; 35 36 /** 37 * Used to count the bytes and computes the bits of the whole message that are 38 * processed by RIPEMD160Digest. 39 * 40 * @author <a href=mailto:uwe@cscc.de>Uwe Günther</a> 41 * @version $Revision: 1.9 $ 42 */ 43 class RIPEMD160ByteCounter implements Cloneable { 44 45 /** Internal counter representation of the object. */ 46 private long byteCounter; 47 48 /** finalBitLength will be set through the setFinalBitLength()*/ 49 private long finalBitLength; 50 51 /** Creates new RIPEMD160ByteCounter. */ 52 public RIPEMD160ByteCounter() {} 53 54 /** 55 * Creates and returns a deep copy of this object. 56 * @return a clone of this instance. 57 * @see java.lang.Cloneable 58 * @exception CloneNotSupportedException if the object's class does not 59 * support the <code>Cloneable</code> interface. Subclasses 60 * that override the <code>clone</code> method can also 61 * throw this exception to indicate that an instance cannot 62 * be cloned. 63 */ 64 public Object clone() throws CloneNotSupportedException { 65 return super.clone(); 66 } 67 68 /** 69 * Indicates whether some other object is "equal to" this one. 70 * 71 * @param obj the reference object with which to compare. 72 * @return <code>true</code> if this object is the same as the obj 73 * argument; <code>false</code> otherwise. 74 * @see #hashCode() 75 * @see java.util.Hashtable 76 */ 77 public boolean equals(Object obj) { 78 //Only for performance. 79 if (this == obj) { 80 return true; 81 } 82 83 //If obj == null then instanceof returns false, see JLS 15.20.2 84 if (!(obj instanceof RIPEMD160ByteCounter)) { 85 return false; 86 } 87 88 RIPEMD160ByteCounter temp = (RIPEMD160ByteCounter)obj; 89 return (this.byteCounter == temp.byteCounter && 90 this.finalBitLength == temp.finalBitLength ); 91 } 92 93 /** 94 * Returns a hash code value for the object. This method is 95 * supported for the benefit of hashtables such as those provided by 96 * <code>java.util.Hashtable</code>. 97 * 98 * @return a hash code value for this object. 99 * @see #equals(java.lang.Object) 100 * @see java.util.Hashtable 101 */ 102 public int hashCode() { 103 int result = 17; 104 result = 37*result + (int) (this.byteCounter ^ 105 (this.byteCounter >>> 32)); 106 result = 37*result + (int) (this.finalBitLength ^ 107 (this.finalBitLength >>> 32)); 108 return result; 109 } 110 111 /** 112 * Returns a string representation of the object. 113 * 114 * @return a string representation of the object. 115 */ 116 public String toString() { 117 return "[byteCounter: " + LongUtil.toHex(this.byteCounter) + 118 " finalBitLength: " + LongUtil.toHex(this.finalBitLength) + "]"; 119 } 120 121 /** Increments the value of RIPEMD160ByteCounter. */ 122 public void inc() { 123 this.byteCounter++; 124 } 125 126 /** Resets the internal values to the same settings as after construction. */ 127 public void reset() { 128 this.byteCounter = 0; 129 this.finalBitLength = 0; 130 } 131 132 /** Saves the byteCounter value that is valid at this time now in the 133 * as bit value (2^3 or byteCounter << 3) object. 134 */ 135 public void setFinalBitLength() { 136 this.finalBitLength = this.byteCounter << 3; 137 } 138 139 /** 140 * Get the internal finalBitLength that you have saved before with 141 * {@link #setFinalBitLength() long getFinalBitLength()} 142 * 143 * @return the final bit length of the whole message that are processed. 144 */ 145 public long getFinalBitLength() { 146 return this.finalBitLength; 147 } 148 } 149
|
RIPEMD160ByteCounter |
|