diff options
author | sunchipnacho <22717474+sunflsks@users.noreply.github.com> | 2021-10-08 11:59:49 -0500 |
---|---|---|
committer | Cameron Katri <me@cameronkatri.com> | 2021-10-10 18:37:43 -0400 |
commit | a542ec13a333326c86659779391809b2c5d6d148 (patch) | |
tree | 929b1e3cbb34f8228cfd3a08ad38809bfc578b17 /ldid.cpp | |
parent | 88de319a622c1d4a6d0ec914321e8d58affe73f6 (diff) | |
download | ldid-a542ec13a333326c86659779391809b2c5d6d148.tar.gz ldid-a542ec13a333326c86659779391809b2c5d6d148.tar.zst ldid-a542ec13a333326c86659779391809b2c5d6d148.zip |
p12 password support
Diffstat (limited to 'ldid.cpp')
-rw-r--r-- | ldid.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
@@ -48,6 +48,7 @@ #include <openssl/pem.h> #include <openssl/pkcs7.h> #include <openssl/pkcs12.h> +#include <openssl/ui.h> #endif #ifdef __APPLE__ @@ -142,6 +143,10 @@ #define _packed \ __attribute__((packed)) +#ifndef LDID_NOSMIME +std::string password; +#endif + template <typename Type_> struct Iterator_ { typedef typename Type_::const_iterator Result; @@ -1787,8 +1792,14 @@ class Stuff { ca_(NULL) { _assert(value_ != NULL); - _assert(PKCS12_parse(value_, "", &key_, &cert_, &ca_) != 0); + if (!PKCS12_verify_mac(value_, "", 0) && password.empty()) { + char passbuf[2048]; + UI_UTIL_read_pw_string(passbuf, 2048, "Enter password: ", 0); + password = passbuf; + } + + _assert(PKCS12_parse(value_, password.c_str(), &key_, &cert_, &ca_) != 0); _assert(key_ != NULL); _assert(cert_ != NULL); @@ -3284,6 +3295,10 @@ int main(int argc, char *argv[]) { flag_M = true; break; + case 'U': + password = argv[argi] + 2; + break; + case 'K': if (argv[argi][2] != '\0') key.open(argv[argi] + 2, O_RDONLY, PROT_READ, MAP_PRIVATE); |