]> git.cameronkatri.com Git - ldid.git/blobdiff - ldid.cpp
ldid.1: Document -H[sha1 | sha256]
[ldid.git] / ldid.cpp
index 4715192de77b94f9a23c6e966c94780ba59cde9b..13eab1231424a59b8d5aff1af7312fbeeaa3d930 100644 (file)
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -44,7 +44,7 @@
 
 #ifndef LDID_NOSMIME
 #include <openssl/opensslv.h>
-# if OPENSSL_VERSION_NUM >= 0x30000000
+# if OPENSSL_VERSION_MAJOR >= 3
 #  include <openssl/provider.h>
 # endif
 #include <openssl/err.h>
@@ -196,8 +196,9 @@ Scope<Function_> _scope(const Function_ &function) {
 #define _scope(function) \
     _scope_(__COUNTER__, function)
 
-#define CPU_ARCH_MASK  uint32_t(0xff000000)
-#define CPU_ARCH_ABI64 uint32_t(0x01000000)
+#define CPU_ARCH_MASK     uint32_t(0xff000000)
+#define CPU_ARCH_ABI64    uint32_t(0x01000000)
+#define CPU_ARCH_ABI64_32 uint32_t(0x02000000)
 
 #define CPU_TYPE_ANY     uint32_t(-1)
 #define CPU_TYPE_VAX     uint32_t( 1)
@@ -216,6 +217,7 @@ Scope<Function_> _scope(const Function_ &function) {
 #define CPU_TYPE_ARM64     (CPU_ARCH_ABI64 | CPU_TYPE_ARM)
 #define CPU_TYPE_POWERPC64 (CPU_ARCH_ABI64 | CPU_TYPE_POWERPC)
 #define CPU_TYPE_X86_64    (CPU_ARCH_ABI64 | CPU_TYPE_X86)
+#define CPU_TYPE_ARM64_32  (CPU_TYPE_ARM | CPU_ARCH_ABI64_32)
 
 struct fat_header {
     uint32_t magic;
@@ -1251,10 +1253,10 @@ static const std::vector<Algorithm *> &GetAlgorithms() {
 
     static std::vector<Algorithm *> algorithms;
     if (algorithms.empty()) {
-        if (do_sha1)
-            algorithms.push_back(&sha1);
         if (do_sha256)
             algorithms.push_back(&sha256);
+        if (do_sha1)
+            algorithms.push_back(&sha1);
     }
 
     return algorithms;
@@ -1483,6 +1485,7 @@ static void Allocate(const void *idata, size_t isize, std::streambuf &output, co
                 break;
             case CPU_TYPE_ARM:
             case CPU_TYPE_ARM64:
+            case CPU_TYPE_ARM64_32:
                 align = 0xe;
                 break;
             default:
@@ -1510,6 +1513,9 @@ static void Allocate(const void *idata, size_t isize, std::streambuf &output, co
             case CPU_TYPE_ARM64:
                 arch = "arm64";
                 break;
+            case CPU_TYPE_ARM64_32:
+                arch = "arm64_32";
+                break;
         }
 
         offset = Align(offset, 1 << align);
@@ -2797,7 +2803,7 @@ struct State {
     }
 };
 
-Bundle Sign(const std::string &root, Folder &parent, const std::string &key, State &remote, const std::string &requirements, const Functor<std::string (const std::string &, const std::string &)> &alter, const Progress &progress) {
+Bundle Sign(const std::string &root, Folder &parent, const std::string &key, State &local, const std::string &requirements, const Functor<std::string (const std::string &, const std::string &)> &alter, const Progress &progress) {
     std::string executable;
     std::string identifier;
 
@@ -2876,8 +2882,6 @@ Bundle Sign(const std::string &root, Folder &parent, const std::string &key, Sta
         rules2.insert(Rule{20, NoMode, "^version\\.plist$"});
     }
 
-    State local;
-
     std::string failure(mac ? "Contents/|Versions/[^/]*/Resources/" : "");
     Expression nested("^(Frameworks/[^/]*\\.framework|PlugIns/[^/]*\\.appex(()|/[^/]*.app))/(" + failure + ")Info\\.plist$");
     std::map<std::string, Bundle> bundles;
@@ -2885,16 +2889,18 @@ Bundle Sign(const std::string &root, Folder &parent, const std::string &key, Sta
     folder.Find("", fun([&](const std::string &name) {
         if (!nested(name))
             return;
-        auto bundle(root + Split(name).dir);
+        auto bundle(Split(name).dir);
         if (mac) {
             _assert(!bundle.empty());
             bundle = Split(bundle.substr(0, bundle.size() - 1)).dir;
         }
         SubFolder subfolder(folder, bundle);
 
-        bundles[nested[1]] = Sign(bundle, subfolder, key, local, "", Starts(name, "PlugIns/") ? alter :
+        State remote;
+        bundles[nested[1]] = Sign(root + bundle, subfolder, key, remote, "", Starts(name, "PlugIns/") ? alter :
             static_cast<const Functor<std::string (const std::string &, const std::string &)> &>(fun([&](const std::string &, const std::string &) -> std::string { return entitlements; }))
         , progress);
+        local.Merge(bundle, remote);
     }), fun([&](const std::string &name, const Functor<std::string ()> &read) {
     }));
 
@@ -3081,7 +3087,6 @@ Bundle Sign(const std::string &root, Folder &parent, const std::string &key, Sta
         }));
     }));
 
-    remote.Merge(root, local);
     return bundle;
 }
 
@@ -3106,11 +3111,10 @@ std::string Hex(const uint8_t *data, size_t size) {
 
 static void usage(const char *argv0) {
     fprintf(stderr, "Link Identity Editor %s\n\n", LDID_VERSION);
-    fprintf(stderr, "usage: %s [-Acputype:subtype] [-a]\n", argv0);
-    fprintf(stderr, "          [-C[adhoc | enforcement | expires | hard |\n");
+    fprintf(stderr, "usage: %s [-Acputype:subtype] [-a] [-C[adhoc | enforcement | expires | hard |\n", argv0);
     fprintf(stderr, "          host | kill | library-validation | restrict | runtime]] [-D] [-d]\n");
-    fprintf(stderr, "          [-e] [-h] [-Kkey.p12 [-Upassword]] [-M] [-P] [-q] [-r | -Sfile | -s]\n");
-    fprintf(stderr, "          [-Ttimestamp] [-u] file ...\n\n");
+    fprintf(stderr, "          [-Enum:file] [-e] [-h] [-Kkey.p12 [-Upassword]] [-M] [-P] [-q]\n");
+    fprintf(stderr, "          [-r | -Sfile | -s] [-Ttimestamp] [-u] file ...\n\n");
     fprintf(stderr, "Options:\n");
     fprintf(stderr, "   -S[file.xml]  Pseudo-sign using the entitlements in file.xml\n");
     fprintf(stderr, "   -Kkey.p12     Sign using private key in key.p12\n");
@@ -3124,7 +3128,7 @@ static void usage(const char *argv0) {
 int main(int argc, char *argv[]) {
 #ifndef LDID_NOSMIME
     OpenSSL_add_all_algorithms();
-# if OPENSSL_VERSION_NUM >= 0x30000000
+# if OPENSSL_VERSION_MAJOR >= 3
     OSSL_PROVIDER *legacy = OSSL_PROVIDER_load(NULL, "legacy");
     OSSL_PROVIDER *deflt = OSSL_PROVIDER_load(NULL, "default");
 # endif
@@ -3221,9 +3225,6 @@ int main(int argc, char *argv[]) {
 
                     do_sha1 = false;
                     do_sha256 = false;
-
-                    fprintf(stderr, "WARNING: -H is only present for compatibility with a fork of ldid\n");
-                    fprintf(stderr, "         you should NOT be manually specifying the hash algorithm\n");
                 }
 
                 if (false);
@@ -3606,8 +3607,8 @@ int main(int argc, char *argv[]) {
         ++filei;
     }
 
-#ifndef LDID_NOSMINE
-# if OPENSSL_VERSION_NUM >= 0x30000000
+#ifndef LDID_NOSMIME
+# if OPENSSL_VERSION_MAJOR >= 3
     OSSL_PROVIDER_unload(legacy);
     OSSL_PROVIDER_unload(deflt);
 # endif