From dea43e7c7a9b281c3877e557bc5d45a1273b0566 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 2 Dec 2019 17:18:24 +0100 Subject: [PATCH] Optional public key --- .../eu/faircode/email/FragmentMessages.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index d76fc2fcea..4347639403 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -4363,16 +4363,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. int type = args.getInt("type"); String alias = args.getString("alias"); - if (alias == null) - throw new IllegalArgumentException("Key alias missing"); - DB db = DB.getInstance(context); if (EntityMessage.SMIME_SIGNONLY.equals(type)) { - // Check public key - X509Certificate[] chain = KeyChain.getCertificateChain(context, alias); - if (chain == null || chain.length == 0) - throw new IllegalArgumentException("Public key missing"); + // Get public key + PublicKey pubkey = null; + X509Certificate[] chain = null; + if (alias != null) + chain = KeyChain.getCertificateChain(context, alias); + if (chain != null && chain.length > 0) + pubkey = chain[0].getPublicKey(); // Get content/signature File content = null; @@ -4410,15 +4410,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. Date now = new Date(); boolean valid; try { - chain[0].checkValidity(now); + if (chain != null && chain.length > 0) + chain[0].checkValidity(now); valid = certHolder.isValidOn(now); } catch (CertificateException ignored) { valid = false; } // Check public key - PublicKey pubkey = chain[0].getPublicKey(); if (valid && + pubkey != null && signer.verify(new JcaSimpleSignerInfoVerifierBuilder().build(pubkey))) return true; else @@ -4428,6 +4429,9 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. return false; } else { + if (alias == null) + throw new IllegalArgumentException("Key alias missing"); + // Check private key PrivateKey privkey = KeyChain.getPrivateKey(context, alias); if (privkey == null)