diff --git a/lib/pki_base.cpp b/lib/pki_base.cpp index 52d05c2a..de0a182a 100644 --- a/lib/pki_base.cpp +++ b/lib/pki_base.cpp @@ -417,7 +417,8 @@ void pki_base::print(BioByteArray &bba, enum print_opt opt) const "Not Before", "Not After", "Verify Ok", "Unstructured Name", "Challange Password", "Last Update", "Next Update", "CA", "Self signed", - "Key", "Signature", "Extensions", "Comment", + "Key", "Signature", "Extensions", "Comment", "Algorithm", + "Friendly Name" }; if (opt == print_coloured) { QMap prp; diff --git a/lib/pki_multi.cpp b/lib/pki_multi.cpp index 79871219..5f6b23d6 100644 --- a/lib/pki_multi.cpp +++ b/lib/pki_multi.cpp @@ -171,10 +171,15 @@ void pki_multi::probeAnything(const QString &fname) void pki_multi::print(BioByteArray &bba, enum print_opt opt) const { + pki_base::print(bba, opt); foreach(pki_base *pki, multi) pki->print(bba, opt); } +void pki_multi::collect_properties(QMap &prp) const +{ +} + QList pki_multi::pull() { QList temp = multi; diff --git a/lib/pki_multi.h b/lib/pki_multi.h index 8bcc86d2..d1c677da 100644 --- a/lib/pki_multi.h +++ b/lib/pki_multi.h @@ -26,6 +26,7 @@ class pki_multi: public pki_base void probeAnything(const QString &fname); void append_item(pki_base *pki); void print(BioByteArray &b, enum print_opt opt) const; + void collect_properties(QMap &prp) const; QList pull(); QList get() const; }; diff --git a/lib/pki_pkcs12.cpp b/lib/pki_pkcs12.cpp index 9a75f72b..dc2995c4 100644 --- a/lib/pki_pkcs12.cpp +++ b/lib/pki_pkcs12.cpp @@ -18,6 +18,7 @@ #include #include +#include #include pki_pkcs12::pki_pkcs12(const QString &d, pki_x509 *acert, pki_key *akey) @@ -35,6 +36,9 @@ pki_pkcs12::pki_pkcs12(const QString &fname) X509 *mycert = NULL; key = NULL; cert = NULL; pass_info p(XCA_TITLE, tr("Please enter the password to decrypt the PKCS#12 file:\n%1").arg(compressFilename(fname))); + const X509_ALGOR *macalgid = NULL; + const ASN1_INTEGER *maciter = NULL; + const ASN1_OBJECT *macobj = NULL; setFilename(fname); XFile file(fname); @@ -48,6 +52,14 @@ pki_pkcs12::pki_pkcs12(const QString &fname) throw errorEx(tr("Unable to load the PKCS#12 (pfx) file %1.") .arg(fname)); } + PKCS12_get0_mac(NULL, &macalgid, NULL, &maciter, pkcs12); + if (macalgid) + X509_ALGOR_get0(&macobj, NULL, NULL, macalgid); + if (macobj) { + algorithm = OBJ_obj2QString(macobj); + if (maciter) + algorithm += QString(", iteration %1").arg(a1int(maciter).toDec()); + } while (!PKCS12_verify_mac(pkcs12, pass.constData(), pass.size())) { if (pass.size() > 0) XCA_PASSWD_ERROR(); @@ -150,6 +162,13 @@ void pki_pkcs12::writePKCS12(XFile &file, encAlgo &encAlgo) const file.write(b); } +void pki_pkcs12::collect_properties(QMap &prp) const +{ + if (!algorithm.isEmpty()) + prp["Algorithm"] = algorithm; + if (!alias.isEmpty()) + prp["Friendly Name"] = alias; +} // see https://www.rfc-editor.org/rfc/rfc8018 Appendix B.2 for possible encryption schemes const QList encAlgo::all_encAlgos( diff --git a/lib/pki_pkcs12.h b/lib/pki_pkcs12.h index ad3b848d..1257efa7 100644 --- a/lib/pki_pkcs12.h +++ b/lib/pki_pkcs12.h @@ -41,7 +41,7 @@ class pki_pkcs12: public pki_multi friend class pki_evp; protected: - QString alias; + QString alias, algorithm; pki_x509 *cert; pki_key *key; @@ -58,5 +58,6 @@ class pki_pkcs12: public pki_multi return cert; } void writePKCS12(XFile &file, encAlgo &encAlgo) const; + void collect_properties(QMap &prp) const; }; #endif