    001/*
    002 * Forge Mod Loader
    003 * Copyright (c) 2012-2013 cpw.
    004 * All rights reserved. This program and the accompanying materials
    005 * are made available under the terms of the GNU Lesser Public License v2.1
    006 * which accompanies this distribution, and is available at
    007 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
    008 *
    009 * Contributors:
    010 *     cpw - implementation
    011 */
    012
    013package cpw.mods.fml.common;
    014
    015import java.nio.ByteBuffer;
    016import java.security.MessageDigest;
    017import java.security.cert.Certificate;
    018
    019public class CertificateHelper {
    020
    021    private static final String HEXES = "0123456789abcdef";
    022
    023    public static String getFingerprint(Certificate certificate)
    024    {
    025        if (certificate == null)
    026        {
    027            return "NO VALID CERTIFICATE FOUND";
    028        }
    029        try
    030        {
    031            MessageDigest md = MessageDigest.getInstance("SHA-1");
    032            byte[] der = certificate.getEncoded();
    033            md.update(der);
    034            byte[] digest = md.digest();
    035            return hexify(digest);
    036        }
    037        catch (Exception e)
    038        {
    039            return null;
    040        }
    041    }
    042
    043    public static String getFingerprint(ByteBuffer buffer)
    044    {
    045        try
    046        {
    047            MessageDigest digest = MessageDigest.getInstance("SHA-1");
    048            digest.update(buffer);
    049            byte[] chksum = digest.digest();
    050            return hexify(chksum);
    051        }
    052        catch (Exception e)
    053        {
    054            return null;
    055        }
    056    }
    057
    058    private static String hexify(byte[] chksum)
    059    {
    060        final StringBuilder hex = new StringBuilder( 2 * chksum.length );
    061        for ( final byte b : chksum ) {
    062          hex.append(HEXES.charAt((b & 0xF0) >> 4))
    063             .append(HEXES.charAt((b & 0x0F)));
    064        }
    065        return hex.toString();
    066    }
    067
    068}