SHA1Sum.java Source code

Java tutorial

Introduction

Here is the source code for SHA1Sum.java

Source

/**
 * This file is distributed under the GPL
 * $Id: SHA1Sum.java 1810 2009-06-22 17:33:07Z scotta $
 */

//package net.bnubot.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.MessageDigest;

//import net.bnubot.logging.Out;

/**
 * @author scotta
 */
public class SHA1Sum {
    private final byte[] sha1sum;
    private String display = null;

    public SHA1Sum(String hexStr) throws Exception {
        if (!hexStr.matches("[0-9a-fA-F]{40}"))
            throw new Exception("Invalid format: " + hexStr);
        display = hexStr.toLowerCase();
        sha1sum = new byte[20];
        for (int i = 0; i < 20; i++) {
            int pos = i << 1;
            sha1sum[i] = (byte) Integer.parseInt(hexStr.substring(pos, pos + 2), 16);
        }
    }

    public SHA1Sum(byte[] bytes) throws Exception {
        MessageDigest digest = MessageDigest.getInstance("SHA1");
        digest.update(bytes, 0, bytes.length);
        sha1sum = digest.digest();
    }

    public SHA1Sum(File f) throws Exception {
        MessageDigest digest = MessageDigest.getInstance("SHA1");
        InputStream is = new FileInputStream(f);
        byte[] buffer = new byte[8192];
        do {
            int read = is.read(buffer);
            if (read <= 0)
                break;
            digest.update(buffer, 0, read);
        } while (true);
        sha1sum = digest.digest();

    }

    private static String hexChr(int b) {
        return Integer.toHexString(b & 0xF);
    }

    private static String toHex(int b) {
        return hexChr((b & 0xF0) >> 4) + hexChr(b & 0x0F);
    }

    @Override
    public String toString() {
        if (display == null) {
            display = "";
            for (byte b : sha1sum)
                display += toHex(b);
        }
        return display;
    }

    public byte[] getSum() {
        return sha1sum;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof SHA1Sum))
            return false;

        byte[] obj_sha1sum = ((SHA1Sum) obj).sha1sum;
        if (sha1sum.length != obj_sha1sum.length)
            return false;

        for (int i = 0; i < sha1sum.length; i++)
            if (sha1sum[i] != obj_sha1sum[i])
                return false;

        return true;
    }
}