From 8a33c079bc81911da90245b05d493ced2b0a7227 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 5 Aug 2025 15:46:45 +0200 Subject: [PATCH] S/MIME: store cert of signed data --- .../eu/faircode/email/FragmentMessages.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index e8776db62d..d201b5296f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -10395,6 +10395,18 @@ public class FragmentMessages extends FragmentBase ? "Signature could not be verified" : "Certificates and signatures do not match"); + if (sdata && result != null) { + String fingerprint = EntityCertificate.getFingerprintSha256(result); + List emails = EntityCertificate.getEmailAddresses(result); + for (String email : emails) { + EntityCertificate record = db.certificate().getCertificate(fingerprint, email); + if (record == null) { + args.putBoolean("signed_data", true); + break; + } + } + } + if (is != null) decodeMessage(context, is, message, args); } else { @@ -10521,6 +10533,7 @@ public class FragmentMessages extends FragmentBase Date time = (Date) args.getSerializable("time"); boolean known = args.getBoolean("known"); boolean valid = args.getBoolean("valid"); + boolean signed_data = args.getBoolean("signed_data"); String reason = args.getString("reason"); String algo = args.getString("algo"); String algooid = args.getString("algooid"); @@ -10540,10 +10553,10 @@ public class FragmentMessages extends FragmentBase break; } - if (!info && known && !record.isExpired(time) && match && valid) + if (!info && known && !record.isExpired(time) && match && valid && !signed_data) Helper.setSnackbarOptions(Snackbar.make(view, R.string.title_signature_valid, Snackbar.LENGTH_LONG)) .show(); - else if (!auto) { + else if (!auto || signed_data) { Context context = getContext(); LayoutInflater inflator = LayoutInflater.from(context); View dview = inflator.inflate(R.layout.dialog_certificate, null);