]> WPIA git - gigi.git/blobdiff - src/club/wpia/gigi/dbObjects/Certificate.java
add: display fingerprint on RootCertPage, TestCACertificate class
[gigi.git] / src / club / wpia / gigi / dbObjects / Certificate.java
index 0654a4160d3eface39018732aeb6943eb85b83ae..2027ce9d7d31673fd319367d32f6115be50581a2 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;
@@ -500,6 +505,19 @@ public class Certificate implements IdCachable {
         return null;
     }
 
+    public java.util.Date getExpiryDate() {
+        if (getStatus() == CertificateStatus.ISSUED) {
+            try (GigiPreparedStatement prep = new GigiPreparedStatement("SELECT expire FROM certs WHERE id=?")) {
+                prep.setInt(1, getId());
+                GigiResultSet res = prep.executeQuery();
+                if (res.next()) {
+                    return res.getTimestamp("expire");
+                }
+            }
+        }
+        return null;
+    }
+
     public void setLoginEnabled(boolean activate) {
         if (activate) {
             if ( !isLoginEnabled()) {
@@ -649,4 +667,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);
+    }
+
+    protected 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();
+    }
 }