aboutsummaryrefslogtreecommitdiffstats
path: root/ldid.cpp
diff options
context:
space:
mode:
authorsunchipnacho <22717474+sunflsks@users.noreply.github.com>2021-10-08 11:59:49 -0500
committerCameron Katri <me@cameronkatri.com>2021-10-10 18:37:43 -0400
commita542ec13a333326c86659779391809b2c5d6d148 (patch)
tree929b1e3cbb34f8228cfd3a08ad38809bfc578b17 /ldid.cpp
parent88de319a622c1d4a6d0ec914321e8d58affe73f6 (diff)
downloadldid-a542ec13a333326c86659779391809b2c5d6d148.tar.gz
ldid-a542ec13a333326c86659779391809b2c5d6d148.tar.zst
ldid-a542ec13a333326c86659779391809b2c5d6d148.zip
p12 password support
Diffstat (limited to 'ldid.cpp')
-rw-r--r--ldid.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/ldid.cpp b/ldid.cpp
index c2f7e0a..b664441 100644
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -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);