diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java index 9d13fe28a..037b1771f 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java @@ -288,11 +288,11 @@ private void renderX509(StringBuilder sb, X509Certificate certificate) addTitle(sb, R.getI18NString("service.gui.CERT_INFO_FINGERPRINTS")); try { + String sha256String = getThumbprint(certificate, "SHA-256"); String sha1String = getThumbprint(certificate, "SHA1"); - String md5String = getThumbprint(certificate, "MD5"); - addField(sb, "SHA1:", sha1String); - addField(sb, "MD5:", md5String); + addField(sb, "SHA256:", sha256String, 48); + addField(sb, "SHA1:", sha1String, 32); } catch (CertificateException e) { @@ -346,11 +346,12 @@ else if(certificate.getPublicKey().getAlgorithm().equals("DSA")) addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN"), R.getI18NString( - "service.gui.CERT_INFO_KEY_BYTES_PRINT", + "service.gui.CERT_INFO_KEY_BITS_PRINT", new String[]{ - String.valueOf(certificate.getSignature().length), - getHex(certificate.getSignature()) + String.valueOf(certificate.getSignature().length*8), })); + addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN"), + getHex(certificate.getSignature()), 48); sb.append("\n"); } @@ -376,12 +377,43 @@ private void addTitle(StringBuilder sb, String title) */ private void addField(StringBuilder sb, String field, String value) { - sb.append("") - .append("") - .append(field).append("") - .append("").append(value).append("") - .append("\n"); + addField(sb, field, value, 0); + } + + /** + * Add a field. + * @param sb StringBuilder to append to + * @param field name of the certificate field + * @param value to print + * @param wrap force-wrap after number of characters + */ + private void addField(StringBuilder sb, String field, String value, + int wrap) + { + sb.append("") + .append(field).append(" 0) + { + sb.append(" style='font-family:monospace'>"); + for (int i = 0; i < value.length(); i++) + { + if (i % wrap == 0 && i > 0) + { + sb.append("\n"); + } + + sb.append(value.charAt(i)); + } + } + else + { + sb.append(">"); + sb.append(value); + } + + sb.append("\n"); } /** @@ -399,13 +431,13 @@ private String getHex( byte [] raw ) try { for (byte b : raw) - f.format("%02x", b); + f.format("%02X:", b); } finally { f.close(); } - return hex.toString(); + return hex.substring(0, hex.length() - 1); } /** @@ -429,19 +461,21 @@ private static String getThumbprint(X509Certificate cert, String algorithm) { throw new CertificateException(e); } + byte[] encodedCert = cert.getEncoded(); StringBuilder sb = new StringBuilder(encodedCert.length * 2); Formatter f = new Formatter(sb); try { for (byte b : digest.digest(encodedCert)) - f.format("%02x", b); + f.format("%02X:", b); } finally { f.close(); } - return sb.toString(); + + return sb.substring(0, sb.length() - 1); } /**