MessageDigestSpipublic abstract class MessageDigestSpi extends Object This class defines the Service Provider Interface (SPI)
for the MessageDigest class, which provides the functionality
of a message digest algorithm, such as MD5 or SHA. Message digests are
secure one-way hash functions that take arbitrary-sized data and output a
fixed-length hash value.
All the abstract methods in this class must be implemented by a
cryptographic service provider who wishes to supply the implementation
of a particular message digest algorithm.
Implementations are free to implement the Cloneable interface. |
Fields Summary |
---|
private byte[] | tempArray |
Methods Summary |
---|
public java.lang.Object | clone()Returns a clone if the implementation is cloneable.
if (this instanceof Cloneable) {
return super.clone();
} else {
throw new CloneNotSupportedException();
}
| protected abstract byte[] | engineDigest()Completes the hash computation by performing final
operations such as padding. Once engineDigest has
been called, the engine should be reset (see
{@link #engineReset() engineReset}).
Resetting is the responsibility of the
engine implementor.
| protected int | engineDigest(byte[] buf, int offset, int len)Completes the hash computation by performing final
operations such as padding. Once engineDigest has
been called, the engine should be reset (see
{@link #engineReset() engineReset}).
Resetting is the responsibility of the
engine implementor.
This method should be abstract, but we leave it concrete for
binary compatibility. Knowledgeable providers should override this
method.
byte[] digest = engineDigest();
if (len < digest.length)
throw new DigestException("partial digests not returned");
if (buf.length - offset < digest.length)
throw new DigestException("insufficient space in the output "
+ "buffer to store the digest");
System.arraycopy(digest, 0, buf, offset, digest.length);
return digest.length;
| protected int | engineGetDigestLength()Returns the digest length in bytes.
This concrete method has been added to this previously-defined
abstract class. (For backwards compatibility, it cannot be abstract.)
The default behavior is to return 0.
This method may be overridden by a provider to return the digest
length.
return 0;
| protected abstract void | engineReset()Resets the digest for further use.
| protected abstract void | engineUpdate(byte input)Updates the digest using the specified byte.
| protected abstract void | engineUpdate(byte[] input, int offset, int len)Updates the digest using the specified array of bytes,
starting at the specified offset.
| protected void | engineUpdate(java.nio.ByteBuffer input)Update the digest using the specified ByteBuffer. The digest is
updated using the input.remaining() bytes starting
at input.position() .
Upon return, the buffer's position will be equal to its limit;
its limit will not have changed.
if (input.hasRemaining() == false) {
return;
}
if (input.hasArray()) {
byte[] b = input.array();
int ofs = input.arrayOffset();
int pos = input.position();
int lim = input.limit();
engineUpdate(b, ofs + pos, lim - pos);
input.position(lim);
} else {
int len = input.remaining();
int n = JCAUtil.getTempArraySize(len);
if ((tempArray == null) || (n > tempArray.length)) {
tempArray = new byte[n];
}
while (len > 0) {
int chunk = Math.min(len, tempArray.length);
input.get(tempArray, 0, chunk);
engineUpdate(tempArray, 0, chunk);
len -= chunk;
}
}
|
|