]> WPIA git - gigi.git/blobdiff - src/club/wpia/gigi/dbObjects/Certificate.java
add: show sha-1 and sha-256 fingerprint on certificate page
[gigi.git] / src / club / wpia / gigi / dbObjects / Certificate.java
index 0654a4160d3eface39018732aeb6943eb85b83ae..c46b1b477b90438386d96977b4eee9c8f0cf972f 100644 (file)
@@ -4,6 +4,9 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.math.BigInteger;
 import java.security.GeneralSecurityException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateEncodingException;
 import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
@@ -16,6 +19,8 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map.Entry;
 
+import javax.xml.bind.DatatypeConverter;
+
 import club.wpia.gigi.GigiApiException;
 import club.wpia.gigi.database.DBEnum;
 import club.wpia.gigi.database.GigiPreparedStatement;
@@ -649,4 +654,18 @@ public class Certificate implements IdCachable {
         }
         return new BigInteger(serial, 16);
     }
+
+    public String getFingerprint(String algorithm) throws IOException, GeneralSecurityException, GigiApiException {
+        X509Certificate certx = cert();
+        return getFingerprint(certx, algorithm);
+    }
+
+    private static String getFingerprint(X509Certificate cert, String algorithm) throws NoSuchAlgorithmException, CertificateEncodingException {
+        MessageDigest md = MessageDigest.getInstance(algorithm);
+        byte[] der = cert.getEncoded();
+        md.update(der);
+        byte[] digest = md.digest();
+        String digestHex = DatatypeConverter.printHexBinary(digest);
+        return digestHex.toLowerCase();
+    }
 }