public class Sha256Hash extends java.lang.Object implements java.io.Serializable, java.lang.Comparable<Sha256Hash>
Sha256Hash wraps a byte[] so that equals(java.lang.Object) and hashCode() work correctly, allowing it to be used as a key in a
map. It also checks that the length is correct (equal to LENGTH) and provides a bit more type safety.
Given that Sha256Hash instances can be created using wrapReversed(byte[]) or twiceOf(byte[]) or by wrapping raw bytes, there is no guarantee that if two Sha256Hash instances are found equal (via equals(Object)) that their preimages would be the same (even in the absence of a hash collision.)
| Modifier and Type | Field and Description |
|---|---|
static int |
LENGTH |
static Sha256Hash |
ZERO_HASH |
| Modifier and Type | Method and Description |
|---|---|
int |
compareTo(Sha256Hash other) |
boolean |
equals(java.lang.Object o) |
byte[] |
getBytes()
Returns the internal byte array, without defensively copying.
|
byte[] |
getReversedBytes()
Returns a reversed copy of the internal byte array.
|
static byte[] |
hash(byte[] input)
Calculates the SHA-256 hash of the given bytes.
|
static byte[] |
hash(byte[] input,
int offset,
int length)
Calculates the SHA-256 hash of the given byte range.
|
int |
hashCode()
Returns the last four bytes of the wrapped hash.
|
static byte[] |
hashTwice(byte[] input)
Calculates the SHA-256 hash of the given bytes,
and then hashes the resulting hash again.
|
static byte[] |
hashTwice(byte[] input1,
byte[] input2)
Calculates the hash of hash on the given chunks of bytes.
|
static byte[] |
hashTwice(byte[] input,
int offset,
int length)
Calculates the SHA-256 hash of the given byte range,
and then hashes the resulting hash again.
|
static byte[] |
hashTwice(byte[] input1,
int offset1,
int length1,
byte[] input2,
int offset2,
int length2)
Calculates the hash of hash on the given byte ranges.
|
static java.security.MessageDigest |
newDigest()
Returns a new SHA-256 MessageDigest instance.
|
static Sha256Hash |
of(byte[] contents)
Creates a new instance containing the calculated (one-time) hash of the given bytes.
|
static Sha256Hash |
of(java.io.File file)
Creates a new instance containing the calculated (one-time) hash of the given file's contents.
|
java.math.BigInteger |
toBigInteger()
Returns the bytes interpreted as a positive integer.
|
java.lang.String |
toString() |
static Sha256Hash |
twiceOf(byte[] contents)
Creates a new instance containing the hash of the calculated hash of the given bytes.
|
static Sha256Hash |
twiceOf(byte[] content1,
byte[] content2)
Creates a new instance containing the hash of the calculated hash of the given bytes.
|
static Sha256Hash |
wrap(byte[] rawHashBytes)
Creates a new instance that wraps the given hash value.
|
static Sha256Hash |
wrap(java.lang.String hexString)
Creates a new instance that wraps the given hash value (represented as a hex string).
|
static Sha256Hash |
wrapReversed(byte[] rawHashBytes)
Creates a new instance that wraps the given hash value, but with byte order reversed.
|
public static final int LENGTH
public static final Sha256Hash ZERO_HASH
public static Sha256Hash wrap(byte[] rawHashBytes)
rawHashBytes - the raw hash bytes to wrapjava.lang.IllegalArgumentException - if the given array length is not exactly 32public static Sha256Hash wrap(java.lang.String hexString)
hexString - a hash value represented as a hex stringjava.lang.IllegalArgumentException - if the given string is not a valid
hex string, or if it does not represent exactly 32 bytespublic static Sha256Hash wrapReversed(byte[] rawHashBytes)
rawHashBytes - the raw hash bytes to wrapjava.lang.IllegalArgumentException - if the given array length is not exactly 32public static Sha256Hash of(byte[] contents)
contents - the bytes on which the hash value is calculatedpublic static Sha256Hash twiceOf(byte[] contents)
contents - the bytes on which the hash value is calculatedpublic static Sha256Hash twiceOf(byte[] content1, byte[] content2)
content1 - first bytes on which the hash value is calculatedcontent2 - second bytes on which the hash value is calculatedpublic static Sha256Hash of(java.io.File file) throws java.io.IOException
The file contents are read fully into memory, so this method should only be used with small files.
file - the file on which the hash value is calculatedjava.io.IOException - if an error occurs while reading the filepublic static java.security.MessageDigest newDigest()
This is a convenience method which wraps the checked exception that can never occur with a RuntimeException.
public static byte[] hash(byte[] input)
input - the bytes to hashpublic static byte[] hash(byte[] input,
int offset,
int length)
input - the array containing the bytes to hashoffset - the offset within the array of the bytes to hashlength - the number of bytes to hashpublic static byte[] hashTwice(byte[] input)
input - the bytes to hashpublic static byte[] hashTwice(byte[] input1,
byte[] input2)
hashTwice(byte[]).public static byte[] hashTwice(byte[] input,
int offset,
int length)
input - the array containing the bytes to hashoffset - the offset within the array of the bytes to hashlength - the number of bytes to hashpublic static byte[] hashTwice(byte[] input1,
int offset1,
int length1,
byte[] input2,
int offset2,
int length2)
hashTwice(byte[]).public boolean equals(java.lang.Object o)
equals in class java.lang.Objectpublic int hashCode()
hashCode in class java.lang.Objectpublic java.lang.String toString()
toString in class java.lang.Objectpublic java.math.BigInteger toBigInteger()
public byte[] getBytes()
public byte[] getReversedBytes()
public int compareTo(Sha256Hash other)
compareTo in interface java.lang.Comparable<Sha256Hash>