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 }