fix hashCode
This commit is contained in:
@ -16,6 +16,9 @@ import net.i2p.crypto.KeyGenerator;
|
|||||||
* A private key is 256byte Integer. The private key represents only the
|
* A private key is 256byte Integer. The private key represents only the
|
||||||
* exponent, not the primes, which are constant and defined in the crypto spec.
|
* exponent, not the primes, which are constant and defined in the crypto spec.
|
||||||
*
|
*
|
||||||
|
* Note that we use short exponents, so all but the last 28.25 bytes are zero.
|
||||||
|
* See http://www.i2p2.i2p/how_cryptography for details.
|
||||||
|
*
|
||||||
* @author jrandom
|
* @author jrandom
|
||||||
*/
|
*/
|
||||||
public class PrivateKey extends SimpleDataStructure {
|
public class PrivateKey extends SimpleDataStructure {
|
||||||
@ -50,4 +53,24 @@ public class PrivateKey extends SimpleDataStructure {
|
|||||||
return KeyGenerator.getPublicKey(this);
|
return KeyGenerator.getPublicKey(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We assume the data has enough randomness in it, so use the last 4 bytes for speed.
|
||||||
|
* Overridden since we use short exponents, so the first 227 bytes are all zero.
|
||||||
|
* Not that we are storing PrivateKeys in any Sets or Maps anywhere.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
if (_data == null)
|
||||||
|
return 0;
|
||||||
|
int rv = _data[KEYSIZE_BYTES - 4];
|
||||||
|
for (int i = 1; i < 4; i++)
|
||||||
|
rv ^= (_data[i + (KEYSIZE_BYTES - 4)] << (i*8));
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if ((obj == null) || !(obj instanceof PrivateKey)) return false;
|
||||||
|
return DataHelper.eq(_data, ((PrivateKey) obj)._data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user