From aed28d31db2b9f6b98e2fdc99341c053aab24a1d Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 27 Dec 2024 19:45:21 +0100 Subject: [PATCH] S/MIME public key presentation --- .../eu/faircode/email/FragmentMessages.java | 27 +++++----------- .../main/res/layout/dialog_certificate.xml | 32 +++++++++++++++---- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 24a942e189..9d2af9a1e9 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -197,6 +197,7 @@ import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.KeyStore; +import java.security.Principal; import java.security.PrivateKey; import java.security.PublicKey; import java.security.cert.CertPathBuilder; @@ -10170,22 +10171,6 @@ public class FragmentMessages extends FragmentBase args.putString("algo", algo); args.putString("algooid", algooid); - // Encryption algorithm - String keyalgo = null; - String keyalgooid = null; - try { - keyalgooid = s.getEncryptionAlgOID(); - DefaultAlgorithmNameFinder af = new DefaultAlgorithmNameFinder(); - keyalgo = af.getAlgorithmName(new ASN1ObjectIdentifier(keyalgooid)); - PublicKey pubkey = cert.getPublicKey(); - if (pubkey instanceof RSAPublicKey) - keyalgo += ((RSAPublicKey) pubkey).getModulus().bitLength(); - } catch (Throwable ex) { - Log.e(ex); - } - args.putString("keyalgo", keyalgo); - args.putString("keyalgooid", keyalgooid); - List certs = new ArrayList<>(); try { for (Object m : store.getMatches(null)) { @@ -10433,10 +10418,10 @@ public class FragmentMessages extends FragmentBase String reason = args.getString("reason"); String algo = args.getString("algo"); String algooid = args.getString("algooid"); - String keyalgo = args.getString("keyalgo"); - String keyalgooid = args.getString("keyalgooid"); final ArrayList trace = args.getStringArrayList("trace"); EntityCertificate record = EntityCertificate.from(cert, null); + String keyalgo = record.getSigAlgName(); + String keyalgoid = cert.getSigAlgOID(); if (time == null) time = new Date(); @@ -10468,6 +10453,7 @@ public class FragmentMessages extends FragmentBase TextView tvExpired = dview.findViewById(R.id.tvExpired); TextView tvAlgorithm = dview.findViewById(R.id.tvAlgorithm); TextView tvKeyAlgorithm = dview.findViewById(R.id.tvKeyAlgorithm); + TextView tvKeyIssuer = dview.findViewById(R.id.tvKeyIssuer); tvCertificateInvalid.setVisibility(valid ? View.GONE : View.VISIBLE); tvCertificateReason.setText(reason); @@ -10500,13 +10486,16 @@ public class FragmentMessages extends FragmentBase a.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_XSMALL), start, a.length(), 0); start = ka.length(); - ka.append(keyalgooid); + ka.append(keyalgoid); ka.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_XSMALL), start, ka.length(), 0); } tvAlgorithm.setText(a); tvKeyAlgorithm.setText(ka); + Principal issuer = cert.getIssuerDN(); + tvKeyIssuer.setText(issuer == null ? null : issuer.getName()); + AlertDialog.Builder builder = new AlertDialog.Builder(context) .setView(dview) .setNegativeButton(android.R.string.cancel, null) diff --git a/app/src/main/res/layout/dialog_certificate.xml b/app/src/main/res/layout/dialog_certificate.xml index 6c8fa04fcd..226c6fd0d9 100644 --- a/app/src/main/res/layout/dialog_certificate.xml +++ b/app/src/main/res/layout/dialog_certificate.xml @@ -121,7 +121,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="CN=test@example.com" - android:textAppearance="@style/TextAppearance.AppCompat.Medium" + android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:textColorPrimary" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvSubjectTitle" /> @@ -185,27 +185,45 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="6dp" - android:drawableStart="@drawable/twotone_gesture_24" - android:drawablePadding="6dp" android:text="SHA256" - android:textAppearance="@style/TextAppearance.AppCompat.Small" + android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textColor="?android:textColorPrimary" android:textIsSelectable="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvAlgorithmTitle" /> + + + + + app:layout_constraintTop_toBottomOf="@id/tvKeyAlgorithm" /> \ No newline at end of file