S/MIME public key presentation

pull/217/head
M66B 9 months ago
parent f6dbca0d6d
commit aed28d31db

@ -197,6 +197,7 @@ import java.io.Serializable;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.KeyStore; import java.security.KeyStore;
import java.security.Principal;
import java.security.PrivateKey; import java.security.PrivateKey;
import java.security.PublicKey; import java.security.PublicKey;
import java.security.cert.CertPathBuilder; import java.security.cert.CertPathBuilder;
@ -10170,22 +10171,6 @@ public class FragmentMessages extends FragmentBase
args.putString("algo", algo); args.putString("algo", algo);
args.putString("algooid", algooid); 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<X509Certificate> certs = new ArrayList<>(); List<X509Certificate> certs = new ArrayList<>();
try { try {
for (Object m : store.getMatches(null)) { for (Object m : store.getMatches(null)) {
@ -10433,10 +10418,10 @@ public class FragmentMessages extends FragmentBase
String reason = args.getString("reason"); String reason = args.getString("reason");
String algo = args.getString("algo"); String algo = args.getString("algo");
String algooid = args.getString("algooid"); String algooid = args.getString("algooid");
String keyalgo = args.getString("keyalgo");
String keyalgooid = args.getString("keyalgooid");
final ArrayList<String> trace = args.getStringArrayList("trace"); final ArrayList<String> trace = args.getStringArrayList("trace");
EntityCertificate record = EntityCertificate.from(cert, null); EntityCertificate record = EntityCertificate.from(cert, null);
String keyalgo = record.getSigAlgName();
String keyalgoid = cert.getSigAlgOID();
if (time == null) if (time == null)
time = new Date(); time = new Date();
@ -10468,6 +10453,7 @@ public class FragmentMessages extends FragmentBase
TextView tvExpired = dview.findViewById(R.id.tvExpired); TextView tvExpired = dview.findViewById(R.id.tvExpired);
TextView tvAlgorithm = dview.findViewById(R.id.tvAlgorithm); TextView tvAlgorithm = dview.findViewById(R.id.tvAlgorithm);
TextView tvKeyAlgorithm = dview.findViewById(R.id.tvKeyAlgorithm); TextView tvKeyAlgorithm = dview.findViewById(R.id.tvKeyAlgorithm);
TextView tvKeyIssuer = dview.findViewById(R.id.tvKeyIssuer);
tvCertificateInvalid.setVisibility(valid ? View.GONE : View.VISIBLE); tvCertificateInvalid.setVisibility(valid ? View.GONE : View.VISIBLE);
tvCertificateReason.setText(reason); tvCertificateReason.setText(reason);
@ -10500,13 +10486,16 @@ public class FragmentMessages extends FragmentBase
a.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_XSMALL), start, a.length(), 0); a.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_XSMALL), start, a.length(), 0);
start = ka.length(); start = ka.length();
ka.append(keyalgooid); ka.append(keyalgoid);
ka.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_XSMALL), start, ka.length(), 0); ka.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_XSMALL), start, ka.length(), 0);
} }
tvAlgorithm.setText(a); tvAlgorithm.setText(a);
tvKeyAlgorithm.setText(ka); tvKeyAlgorithm.setText(ka);
Principal issuer = cert.getIssuerDN();
tvKeyIssuer.setText(issuer == null ? null : issuer.getName());
AlertDialog.Builder builder = new AlertDialog.Builder(context) AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setView(dview) .setView(dview)
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)

@ -121,7 +121,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="CN=test@example.com" android:text="CN=test@example.com"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?android:textColorPrimary" android:textColor="?android:textColorPrimary"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvSubjectTitle" /> app:layout_constraintTop_toBottomOf="@id/tvSubjectTitle" />
@ -185,27 +185,45 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="6dp" android:layout_marginTop="6dp"
android:drawableStart="@drawable/twotone_gesture_24"
android:drawablePadding="6dp"
android:text="SHA256" android:text="SHA256"
android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="?android:textColorPrimary" android:textColor="?android:textColorPrimary"
android:textIsSelectable="true" android:textIsSelectable="true"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAlgorithmTitle" /> app:layout_constraintTop_toBottomOf="@id/tvAlgorithmTitle" />
<TextView
android:id="@+id/tvKeyTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="@string/title_signature_public_key"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAlgorithm" />
<TextView <TextView
android:id="@+id/tvKeyAlgorithm" android:id="@+id/tvKeyAlgorithm"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="6dp" android:layout_marginTop="6dp"
android:drawableStart="@drawable/twotone_lock_24"
android:drawablePadding="6dp"
android:text="SHA256/RSA" android:text="SHA256/RSA"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="?android:textColorPrimary"
android:textIsSelectable="true"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvKeyTitle" />
<TextView
android:id="@+id/tvKeyIssuer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="IssuerDN"
android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?android:textColorPrimary" android:textColor="?android:textColorPrimary"
android:textIsSelectable="true" android:textIsSelectable="true"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAlgorithm" /> app:layout_constraintTop_toBottomOf="@id/tvKeyAlgorithm" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView> </ScrollView>
Loading…
Cancel
Save