/* * Copyright (c) 2006-2011 Christian Plattner. All rights reserved. * Please refer to the LICENSE.txt for licensing details. */ package ch.ethz.ssh2.crypto.digest; import java.math.BigInteger; /** * HashForSSH2Types. * * @author Christian Plattner * @version 2.50, 03/15/10 */ public class HashForSSH2Types { Digest md; public HashForSSH2Types(Digest md) { this.md = md; } public HashForSSH2Types(String type) { if (type.equals("SHA1")) { md = new SHA1(); } else if (type.equals("MD5")) { md = new MD5(); } else throw new IllegalArgumentException("Unknown algorithm " + type); } public void updateByte(byte b) { /* HACK - to test it with J2ME */ byte[] tmp = new byte[1]; tmp[0] = b; md.update(tmp); } public void updateBytes(byte[] b) { md.update(b); } public void updateUINT32(int v) { md.update((byte) (v >> 24)); md.update((byte) (v >> 16)); md.update((byte) (v >> 8)); md.update((byte) (v)); } public void updateByteString(byte[] b) { updateUINT32(b.length); updateBytes(b); } public void updateBigInt(BigInteger b) { updateByteString(b.toByteArray()); } public void reset() { md.reset(); } public int getDigestLength() { return md.getDigestLength(); } public byte[] getDigest() { byte[] tmp = new byte[md.getDigestLength()]; getDigest(tmp); return tmp; } public void getDigest(byte[] out) { getDigest(out, 0); } public void getDigest(byte[] out, int off) { md.digest(out, off); } }