From e3599ebc6c461db895210de6cb26eb6497a8fef1 Mon Sep 17 00:00:00 2001 From: Ben Sparkes Date: Wed, 31 Oct 2018 19:48:04 +0000 Subject: [PATCH 1/2] Add support for setting adhoc/platform flags --- ldid.cpp | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/ldid.cpp b/ldid.cpp index 9ffc2ed..188296b 100644 --- a/ldid.cpp +++ b/ldid.cpp @@ -797,6 +797,8 @@ int main(int argc, const char *argv[]) { // Default to SHA1 signing bool do_sha1 = true; bool do_sha2 = false; + bool do_platform = false; + bool do_adhoc = false; union { uint16_t word; @@ -869,14 +871,22 @@ int main(int argc, const char *argv[]) { case 't': flag_t = true; break; case 'u': flag_u = true; break; - case 'p': flag_p = true; break; case 'e': flag_e = true; break; case 'O': flag_O = true; break; case 'D': flag_D = true; break; case 'd': flag_d = true; break; - case 'a': flag_a = true; break; + case 'a': + if (strcmp(argv[argi], "-adhoc") == 0) + { + do_adhoc = true; + printf("setting adhoc...\n"); + break; + } + + flag_a = true; + break; case 'A': flag_A = true; @@ -892,6 +902,16 @@ int main(int argc, const char *argv[]) { } break; + case 'p': + if (strcmp(argv[argi], "-platform") == 0) + { + do_platform = true; + printf("setting platform...\n"); + break; + } + + flag_p = true; break; + case 's': _assert(!flag_S); flag_s = true; @@ -1363,13 +1383,13 @@ int main(int argc, const char *argv[]) { sha1directory->blob.magic = Swap(CSMAGIC_CODEDIRECTORY); sha1directory->version = Swap(uint32_t(0x00020001)); - sha1directory->flags = Swap(uint32_t(0)); + sha1directory->flags = do_adhoc ? Swap(uint32_t(0x2)) : 0; sha1directory->codeLimit = Swap(data); sha1directory->hashSize = CS_SHA1_LEN; sha1directory->hashType = CS_HASHTYPE_SHA1; - sha1directory->spare1 = 0x00; + sha1directory->spare1 = do_platform; sha1directory->pageSize = 0x0c; - sha1directory->spare2 = Swap(uint32_t(0)); + sha1directory->spare2 = Swap(uint32_t(1)); sha1directory->identOffset = Swap(offset - begin); strcpy(reinterpret_cast(blob + offset), name); @@ -1408,13 +1428,13 @@ int main(int argc, const char *argv[]) { sha256directory->blob.magic = Swap(CSMAGIC_CODEDIRECTORY); sha256directory->version = Swap(uint32_t(0x00020001)); - sha256directory->flags = Swap(uint32_t(0)); + sha256directory->flags = do_adhoc ? Swap(uint32_t(0x2)) : 0; sha256directory->codeLimit = Swap(data); sha256directory->hashSize = CS_SHA256_LEN; sha256directory->hashType = CS_HASHTYPE_SHA256; - sha256directory->spare1 = 0x00; + sha256directory->spare1 = do_platform; sha256directory->pageSize = 0x0c; - sha256directory->spare2 = Swap(uint32_t(0)); + sha256directory->spare2 = Swap(uint32_t(1)); sha256directory->identOffset = Swap(offset - begin); strcpy(reinterpret_cast(blob + offset), name); From d73b5300a4c7e3135c9e15faeb65cf669220e7b3 Mon Sep 17 00:00:00 2001 From: Ben Sparkes Date: Wed, 31 Oct 2018 19:50:13 +0000 Subject: [PATCH 2/2] Remove debug messages --- ldid.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/ldid.cpp b/ldid.cpp index 188296b..ae97533 100644 --- a/ldid.cpp +++ b/ldid.cpp @@ -881,7 +881,6 @@ int main(int argc, const char *argv[]) { if (strcmp(argv[argi], "-adhoc") == 0) { do_adhoc = true; - printf("setting adhoc...\n"); break; } @@ -906,7 +905,6 @@ int main(int argc, const char *argv[]) { if (strcmp(argv[argi], "-platform") == 0) { do_platform = true; - printf("setting platform...\n"); break; }