aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIngo Bauersachs <ingo@jitsi.org>2016-07-16 15:52:06 +0200
committerIngo Bauersachs <ingo@jitsi.org>2016-07-16 15:52:06 +0200
commit789022ba3b63f6befecc9bdab4fd9d47038e9743 (patch)
tree21ac1a0a5609a9ac3160cb3747cfd130def74bdd /src
parent236849354a2f334edbb2254a0501a76359309043 (diff)
downloadjitsi-789022ba3b63f6befecc9bdab4fd9d47038e9743.zip
jitsi-789022ba3b63f6befecc9bdab4fd9d47038e9743.tar.gz
jitsi-789022ba3b63f6befecc9bdab4fd9d47038e9743.tar.bz2
Show SHA-256 thumbprint of certificate instead of MD5
Also formats hex-output in a monospaced font and wraps it. Closes #173
Diffstat (limited to 'src')
-rw-r--r--src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java66
1 files changed, 50 insertions, 16 deletions
diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java
index 9d13fe2..037b177 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 @@ public class X509CertificatePanel
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 @@ public class X509CertificatePanel
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("</table>\n");
}
@@ -376,12 +377,43 @@ public class X509CertificatePanel
*/
private void addField(StringBuilder sb, String field, String value)
{
- sb.append("<tr>")
- .append("<td style='margin-left: 5pt; margin-right: 25pt;")
- .append(" white-space: nowrap'>")
- .append(field).append("</td>")
- .append("<td>").append(value).append("</td>")
- .append("</tr>\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("<tr><td style='margin-left: 5pt; margin-right: 25pt;")
+ .append("white-space: nowrap' valign='top'>")
+ .append(field).append("</td><td");
+
+ if (wrap > 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("</td></tr>\n");
}
/**
@@ -399,13 +431,13 @@ public class X509CertificatePanel
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 @@ public class X509CertificatePanel
{
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);
}
/**