    001    package cpw.mods.fml.common;
    002
    003    import java.nio.ByteBuffer;
    004    import java.security.MessageDigest;
    005    import java.security.cert.Certificate;
    006
    007    public class CertificateHelper {
    008
    009        private static final String HEXES = "0123456789abcdef";
    010
    011        public static String getFingerprint(Certificate certificate)
    012        {
    013            if (certificate == null)
    014            {
    015                return "NO VALID CERTIFICATE FOUND";
    016            }
    017            try
    018            {
    019                MessageDigest md = MessageDigest.getInstance("SHA-1");
    020                byte[] der = certificate.getEncoded();
    021                md.update(der);
    022                byte[] digest = md.digest();
    023                return hexify(digest);
    024            }
    025            catch (Exception e)
    026            {
    027                return null;
    028            }
    029        }
    030
    031        public static String getFingerprint(ByteBuffer buffer)
    032        {
    033            try
    034            {
    035                MessageDigest digest = MessageDigest.getInstance("SHA-1");
    036                digest.update(buffer);
    037                byte[] chksum = digest.digest();
    038                return hexify(chksum);
    039            }
    040            catch (Exception e)
    041            {
    042                return null;
    043            }
    044        }
    045
    046        private static String hexify(byte[] chksum)
    047        {
    048            final StringBuilder hex = new StringBuilder( 2 * chksum.length );
    049            for ( final byte b : chksum ) {
    050              hex.append(HEXES.charAt((b & 0xF0) >> 4))
    051                 .append(HEXES.charAt((b & 0x0F)));
    052            }
    053            return hex.toString();
    054        }
    055
    056    }