Security Java Tutorial

import java.security.MessageDigest;
public class XYZMessageDigest extends MessageDigest implements Cloneable {
  private int hash;
  private int store;
  private int nBytes;
  public XYZMessageDigest() {
    super("XYZ");
    engineReset();
  }
  public void engineUpdate(byte b) {
    switch (nBytes) {
    case 0:
      store = (b << 24) & 0xff000000;
      break;
    case 1:
      store |= (b << 16) & 0x00ff0000;
      break;
    case 2:
      store |= (b << 8) & 0x0000ff00;
      break;
    case 3:
      store |= (b << 0) & 0x000000ff;
      break;
    }
    nBytes++;
    if (nBytes == 4) {
      hash = hash ^ store;
      nBytes = 0;
      store = 0;
    }
  }
  public void engineUpdate(byte b[], int offset, int length) {
    for (int i = 0; i < length; i++)
      engineUpdate(b[i + offset]);
  }
  public void engineReset() {
    hash = 0;
    store = 0;
    nBytes = 0;
  }
  public byte[] engineDigest() {
    while (nBytes != 0)
      engineUpdate((byte) 0);
    byte b[] = new byte[4];
    b[0] = (byte) (hash >>> 24);
    b[1] = (byte) (hash >>> 16);
    b[2] = (byte) (hash >>> 8);
    b[3] = (byte) (hash >>> 0);
    engineReset();
    return b;
  }
}