connectbot/sshlib

View on GitHub
src/main/java/com/trilead/ssh2/crypto/digest/HashForSSH2Types.java

Summary

Maintainability
A
0 mins
Test Coverage
B
88%

package com.trilead.ssh2.crypto.digest;

import java.math.BigInteger;
import java.security.DigestException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * HashForSSH2Types.
 *
 * @author Christian Plattner, plattner@trilead.com
 * @version $Id: HashForSSH2Types.java,v 1.1 2007/10/15 12:49:57 cplattne Exp $
 */
public class HashForSSH2Types
{
    MessageDigest md;

    public HashForSSH2Types(String type)
    {
        try {
            md = MessageDigest.getInstance(type);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("Unsupported 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)
    {
        try {
            md.digest(out, off, out.length - off);
        } catch (DigestException e) {
            // TODO is this right?!
            throw new RuntimeException("Unable to digest", e);
        }
    }
}