hane 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/README.md +32 -0
  2. package/binding.gyp +87 -0
  3. package/dist/index.d.ts +34 -0
  4. package/dist/index.js +1 -0
  5. package/package.json +33 -0
  6. package/src/native/addon.cc +231 -0
  7. package/src/native/zsign_driver.cc +87 -0
  8. package/src/native/zsign_driver.h +38 -0
  9. package/vendor/zlib/.cmake-format.yaml +245 -0
  10. package/vendor/zlib/.github/workflows/c-std.yml +230 -0
  11. package/vendor/zlib/.github/workflows/cmake.yml +112 -0
  12. package/vendor/zlib/.github/workflows/configure.yml +136 -0
  13. package/vendor/zlib/.github/workflows/fuzz.yml +25 -0
  14. package/vendor/zlib/.github/workflows/msys-cygwin.yml +77 -0
  15. package/vendor/zlib/BUILD.bazel +134 -0
  16. package/vendor/zlib/CMakeLists.txt +330 -0
  17. package/vendor/zlib/ChangeLog +1621 -0
  18. package/vendor/zlib/FAQ +367 -0
  19. package/vendor/zlib/INDEX +68 -0
  20. package/vendor/zlib/LICENSE +22 -0
  21. package/vendor/zlib/MODULE.bazel +9 -0
  22. package/vendor/zlib/Makefile.in +419 -0
  23. package/vendor/zlib/README +115 -0
  24. package/vendor/zlib/README-cmake.md +83 -0
  25. package/vendor/zlib/adler32.c +164 -0
  26. package/vendor/zlib/amiga/Makefile.pup +69 -0
  27. package/vendor/zlib/amiga/Makefile.sas +68 -0
  28. package/vendor/zlib/compress.c +75 -0
  29. package/vendor/zlib/configure +966 -0
  30. package/vendor/zlib/contrib/README.contrib +57 -0
  31. package/vendor/zlib/contrib/ada/buffer_demo.adb +106 -0
  32. package/vendor/zlib/contrib/ada/mtest.adb +156 -0
  33. package/vendor/zlib/contrib/ada/read.adb +156 -0
  34. package/vendor/zlib/contrib/ada/readme.txt +65 -0
  35. package/vendor/zlib/contrib/ada/test.adb +463 -0
  36. package/vendor/zlib/contrib/ada/zlib-streams.adb +225 -0
  37. package/vendor/zlib/contrib/ada/zlib-streams.ads +114 -0
  38. package/vendor/zlib/contrib/ada/zlib-thin.adb +142 -0
  39. package/vendor/zlib/contrib/ada/zlib-thin.ads +450 -0
  40. package/vendor/zlib/contrib/ada/zlib.adb +701 -0
  41. package/vendor/zlib/contrib/ada/zlib.ads +328 -0
  42. package/vendor/zlib/contrib/ada/zlib.gpr +20 -0
  43. package/vendor/zlib/contrib/blast/Makefile +8 -0
  44. package/vendor/zlib/contrib/blast/README +4 -0
  45. package/vendor/zlib/contrib/blast/blast.c +466 -0
  46. package/vendor/zlib/contrib/blast/blast.h +83 -0
  47. package/vendor/zlib/contrib/blast/test.pk +0 -0
  48. package/vendor/zlib/contrib/blast/test.txt +1 -0
  49. package/vendor/zlib/contrib/delphi/ZLib.pas +557 -0
  50. package/vendor/zlib/contrib/delphi/ZLibConst.pas +11 -0
  51. package/vendor/zlib/contrib/delphi/readme.txt +76 -0
  52. package/vendor/zlib/contrib/delphi/zlibd32.mak +99 -0
  53. package/vendor/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
  54. package/vendor/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
  55. package/vendor/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
  56. package/vendor/zlib/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
  57. package/vendor/zlib/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
  58. package/vendor/zlib/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
  59. package/vendor/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
  60. package/vendor/zlib/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
  61. package/vendor/zlib/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
  62. package/vendor/zlib/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
  63. package/vendor/zlib/contrib/dotzlib/DotZLib.build +33 -0
  64. package/vendor/zlib/contrib/dotzlib/DotZLib.chm +0 -0
  65. package/vendor/zlib/contrib/dotzlib/DotZLib.sln +21 -0
  66. package/vendor/zlib/contrib/dotzlib/LICENSE_1_0.txt +23 -0
  67. package/vendor/zlib/contrib/dotzlib/readme.txt +58 -0
  68. package/vendor/zlib/contrib/gcc_gvmat64/gvmat64.S +574 -0
  69. package/vendor/zlib/contrib/infback9/README +1 -0
  70. package/vendor/zlib/contrib/infback9/infback9.c +603 -0
  71. package/vendor/zlib/contrib/infback9/infback9.h +37 -0
  72. package/vendor/zlib/contrib/infback9/inffix9.h +107 -0
  73. package/vendor/zlib/contrib/infback9/inflate9.h +47 -0
  74. package/vendor/zlib/contrib/infback9/inftree9.c +319 -0
  75. package/vendor/zlib/contrib/infback9/inftree9.h +61 -0
  76. package/vendor/zlib/contrib/iostream/test.cpp +24 -0
  77. package/vendor/zlib/contrib/iostream/zfstream.cpp +329 -0
  78. package/vendor/zlib/contrib/iostream/zfstream.h +128 -0
  79. package/vendor/zlib/contrib/iostream2/zstream.h +307 -0
  80. package/vendor/zlib/contrib/iostream2/zstream_test.cpp +25 -0
  81. package/vendor/zlib/contrib/iostream3/README +35 -0
  82. package/vendor/zlib/contrib/iostream3/TODO +17 -0
  83. package/vendor/zlib/contrib/iostream3/test.cc +50 -0
  84. package/vendor/zlib/contrib/iostream3/zfstream.cc +479 -0
  85. package/vendor/zlib/contrib/iostream3/zfstream.h +466 -0
  86. package/vendor/zlib/contrib/minizip/CMakeLists.txt +380 -0
  87. package/vendor/zlib/contrib/minizip/Makefile +37 -0
  88. package/vendor/zlib/contrib/minizip/Makefile.am +45 -0
  89. package/vendor/zlib/contrib/minizip/MiniZip64_Changes.txt +6 -0
  90. package/vendor/zlib/contrib/minizip/MiniZip64_info.txt +74 -0
  91. package/vendor/zlib/contrib/minizip/configure.ac +32 -0
  92. package/vendor/zlib/contrib/minizip/crypt.h +128 -0
  93. package/vendor/zlib/contrib/minizip/ints.h +57 -0
  94. package/vendor/zlib/contrib/minizip/ioapi.c +231 -0
  95. package/vendor/zlib/contrib/minizip/ioapi.h +183 -0
  96. package/vendor/zlib/contrib/minizip/iowin32.c +448 -0
  97. package/vendor/zlib/contrib/minizip/iowin32.h +28 -0
  98. package/vendor/zlib/contrib/minizip/make_vms.com +25 -0
  99. package/vendor/zlib/contrib/minizip/miniunz.c +647 -0
  100. package/vendor/zlib/contrib/minizip/miniunzip.1 +63 -0
  101. package/vendor/zlib/contrib/minizip/minizip.1 +46 -0
  102. package/vendor/zlib/contrib/minizip/minizip.c +512 -0
  103. package/vendor/zlib/contrib/minizip/minizip.pc.in +12 -0
  104. package/vendor/zlib/contrib/minizip/minizip.pc.txt +13 -0
  105. package/vendor/zlib/contrib/minizip/minizipConfig.cmake.in +35 -0
  106. package/vendor/zlib/contrib/minizip/mztools.c +288 -0
  107. package/vendor/zlib/contrib/minizip/mztools.h +37 -0
  108. package/vendor/zlib/contrib/minizip/skipset.h +361 -0
  109. package/vendor/zlib/contrib/minizip/test/CMakeLists.txt +121 -0
  110. package/vendor/zlib/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in +29 -0
  111. package/vendor/zlib/contrib/minizip/test/add_subdirectory_test.cmake.in +28 -0
  112. package/vendor/zlib/contrib/minizip/test/find_package_test.cmake.in +25 -0
  113. package/vendor/zlib/contrib/minizip/test/test_helper.cm +32 -0
  114. package/vendor/zlib/contrib/minizip/unzip.c +1981 -0
  115. package/vendor/zlib/contrib/minizip/unzip.h +441 -0
  116. package/vendor/zlib/contrib/minizip/zip.c +2199 -0
  117. package/vendor/zlib/contrib/minizip/zip.h +370 -0
  118. package/vendor/zlib/contrib/nuget/nuget.csproj +43 -0
  119. package/vendor/zlib/contrib/nuget/nuget.sln +22 -0
  120. package/vendor/zlib/contrib/pascal/example.pas +599 -0
  121. package/vendor/zlib/contrib/pascal/readme.txt +76 -0
  122. package/vendor/zlib/contrib/pascal/zlibd32.mak +99 -0
  123. package/vendor/zlib/contrib/pascal/zlibpas.pas +276 -0
  124. package/vendor/zlib/contrib/puff/Makefile +42 -0
  125. package/vendor/zlib/contrib/puff/README +63 -0
  126. package/vendor/zlib/contrib/puff/puff.c +840 -0
  127. package/vendor/zlib/contrib/puff/puff.h +35 -0
  128. package/vendor/zlib/contrib/puff/pufftest.c +169 -0
  129. package/vendor/zlib/contrib/puff/zeros.raw +0 -0
  130. package/vendor/zlib/contrib/testzlib/testzlib.c +275 -0
  131. package/vendor/zlib/contrib/testzlib/testzlib.txt +10 -0
  132. package/vendor/zlib/contrib/untgz/Makefile +14 -0
  133. package/vendor/zlib/contrib/untgz/Makefile.msc +17 -0
  134. package/vendor/zlib/contrib/untgz/untgz.c +667 -0
  135. package/vendor/zlib/contrib/vstudio/readme.txt +81 -0
  136. package/vendor/zlib/contrib/vstudio/vc10/miniunz.vcxproj +310 -0
  137. package/vendor/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters +22 -0
  138. package/vendor/zlib/contrib/vstudio/vc10/minizip.vcxproj +307 -0
  139. package/vendor/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters +22 -0
  140. package/vendor/zlib/contrib/vstudio/vc10/testzlib.vcxproj +412 -0
  141. package/vendor/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters +55 -0
  142. package/vendor/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj +310 -0
  143. package/vendor/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters +22 -0
  144. package/vendor/zlib/contrib/vstudio/vc10/zlib.rc +32 -0
  145. package/vendor/zlib/contrib/vstudio/vc10/zlibstat.vcxproj +449 -0
  146. package/vendor/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters +74 -0
  147. package/vendor/zlib/contrib/vstudio/vc10/zlibvc.def +161 -0
  148. package/vendor/zlib/contrib/vstudio/vc10/zlibvc.sln +135 -0
  149. package/vendor/zlib/contrib/vstudio/vc10/zlibvc.vcxproj +633 -0
  150. package/vendor/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters +115 -0
  151. package/vendor/zlib/contrib/vstudio/vc11/miniunz.vcxproj +314 -0
  152. package/vendor/zlib/contrib/vstudio/vc11/minizip.vcxproj +311 -0
  153. package/vendor/zlib/contrib/vstudio/vc11/testzlib.vcxproj +418 -0
  154. package/vendor/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj +314 -0
  155. package/vendor/zlib/contrib/vstudio/vc11/zlib.rc +32 -0
  156. package/vendor/zlib/contrib/vstudio/vc11/zlibstat.vcxproj +456 -0
  157. package/vendor/zlib/contrib/vstudio/vc11/zlibvc.def +161 -0
  158. package/vendor/zlib/contrib/vstudio/vc11/zlibvc.sln +117 -0
  159. package/vendor/zlib/contrib/vstudio/vc11/zlibvc.vcxproj +664 -0
  160. package/vendor/zlib/contrib/vstudio/vc12/miniunz.vcxproj +316 -0
  161. package/vendor/zlib/contrib/vstudio/vc12/minizip.vcxproj +313 -0
  162. package/vendor/zlib/contrib/vstudio/vc12/testzlib.vcxproj +422 -0
  163. package/vendor/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj +316 -0
  164. package/vendor/zlib/contrib/vstudio/vc12/zlib.rc +32 -0
  165. package/vendor/zlib/contrib/vstudio/vc12/zlibstat.vcxproj +459 -0
  166. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.def +161 -0
  167. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.sln +119 -0
  168. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.vcxproj +668 -0
  169. package/vendor/zlib/contrib/vstudio/vc14/miniunz.vcxproj +316 -0
  170. package/vendor/zlib/contrib/vstudio/vc14/minizip.vcxproj +313 -0
  171. package/vendor/zlib/contrib/vstudio/vc14/testzlib.vcxproj +422 -0
  172. package/vendor/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj +316 -0
  173. package/vendor/zlib/contrib/vstudio/vc14/zlib.rc +32 -0
  174. package/vendor/zlib/contrib/vstudio/vc14/zlibstat.vcxproj +459 -0
  175. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.def +161 -0
  176. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.sln +119 -0
  177. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.vcxproj +668 -0
  178. package/vendor/zlib/contrib/vstudio/vc17/miniunz.vcxproj +409 -0
  179. package/vendor/zlib/contrib/vstudio/vc17/minizip.vcxproj +405 -0
  180. package/vendor/zlib/contrib/vstudio/vc17/testzlib.vcxproj +473 -0
  181. package/vendor/zlib/contrib/vstudio/vc17/testzlibdll.vcxproj +409 -0
  182. package/vendor/zlib/contrib/vstudio/vc17/zlib.rc +32 -0
  183. package/vendor/zlib/contrib/vstudio/vc17/zlibstat.vcxproj +602 -0
  184. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.def +161 -0
  185. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.sln +179 -0
  186. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.vcxproj +875 -0
  187. package/vendor/zlib/contrib/vstudio/vc9/miniunz.vcproj +565 -0
  188. package/vendor/zlib/contrib/vstudio/vc9/minizip.vcproj +562 -0
  189. package/vendor/zlib/contrib/vstudio/vc9/testzlib.vcproj +796 -0
  190. package/vendor/zlib/contrib/vstudio/vc9/testzlibdll.vcproj +565 -0
  191. package/vendor/zlib/contrib/vstudio/vc9/zlib.rc +32 -0
  192. package/vendor/zlib/contrib/vstudio/vc9/zlibstat.vcproj +781 -0
  193. package/vendor/zlib/contrib/vstudio/vc9/zlibvc.def +161 -0
  194. package/vendor/zlib/contrib/vstudio/vc9/zlibvc.sln +144 -0
  195. package/vendor/zlib/contrib/vstudio/vc9/zlibvc.vcproj +1100 -0
  196. package/vendor/zlib/crc32.c +1049 -0
  197. package/vendor/zlib/crc32.h +9446 -0
  198. package/vendor/zlib/deflate.c +2152 -0
  199. package/vendor/zlib/deflate.h +380 -0
  200. package/vendor/zlib/doc/algorithm.txt +209 -0
  201. package/vendor/zlib/doc/crc-doc.1.0.pdf +0 -0
  202. package/vendor/zlib/doc/rfc1950.txt +619 -0
  203. package/vendor/zlib/doc/rfc1951.txt +955 -0
  204. package/vendor/zlib/doc/rfc1952.txt +675 -0
  205. package/vendor/zlib/doc/txtvsbin.txt +107 -0
  206. package/vendor/zlib/examples/README.examples +54 -0
  207. package/vendor/zlib/examples/enough.c +597 -0
  208. package/vendor/zlib/examples/fitblk.c +233 -0
  209. package/vendor/zlib/examples/gun.c +702 -0
  210. package/vendor/zlib/examples/gzappend.c +504 -0
  211. package/vendor/zlib/examples/gzjoin.c +449 -0
  212. package/vendor/zlib/examples/gzlog.c +1061 -0
  213. package/vendor/zlib/examples/gzlog.h +91 -0
  214. package/vendor/zlib/examples/gznorm.c +474 -0
  215. package/vendor/zlib/examples/zlib_how.html +549 -0
  216. package/vendor/zlib/examples/zpipe.c +209 -0
  217. package/vendor/zlib/examples/zran.c +550 -0
  218. package/vendor/zlib/examples/zran.h +53 -0
  219. package/vendor/zlib/gzclose.c +23 -0
  220. package/vendor/zlib/gzguts.h +215 -0
  221. package/vendor/zlib/gzlib.c +585 -0
  222. package/vendor/zlib/gzread.c +603 -0
  223. package/vendor/zlib/gzwrite.c +631 -0
  224. package/vendor/zlib/infback.c +628 -0
  225. package/vendor/zlib/inffast.c +320 -0
  226. package/vendor/zlib/inffast.h +11 -0
  227. package/vendor/zlib/inffixed.h +94 -0
  228. package/vendor/zlib/inflate.c +1526 -0
  229. package/vendor/zlib/inflate.h +126 -0
  230. package/vendor/zlib/inftrees.c +299 -0
  231. package/vendor/zlib/inftrees.h +62 -0
  232. package/vendor/zlib/make_vms.com +867 -0
  233. package/vendor/zlib/msdos/Makefile.bor +115 -0
  234. package/vendor/zlib/msdos/Makefile.dj2 +104 -0
  235. package/vendor/zlib/msdos/Makefile.emx +69 -0
  236. package/vendor/zlib/msdos/Makefile.msc +112 -0
  237. package/vendor/zlib/msdos/Makefile.tc +100 -0
  238. package/vendor/zlib/nintendods/Makefile +126 -0
  239. package/vendor/zlib/nintendods/README +5 -0
  240. package/vendor/zlib/old/Makefile.emx +69 -0
  241. package/vendor/zlib/old/Makefile.riscos +151 -0
  242. package/vendor/zlib/old/README +3 -0
  243. package/vendor/zlib/old/descrip.mms +48 -0
  244. package/vendor/zlib/old/os2/Makefile.os2 +136 -0
  245. package/vendor/zlib/old/os2/zlib.def +51 -0
  246. package/vendor/zlib/old/visual-basic.txt +160 -0
  247. package/vendor/zlib/os400/README400 +48 -0
  248. package/vendor/zlib/os400/bndsrc +133 -0
  249. package/vendor/zlib/os400/make.sh +366 -0
  250. package/vendor/zlib/os400/zlib.inc +531 -0
  251. package/vendor/zlib/qnx/package.qpg +141 -0
  252. package/vendor/zlib/test/CMakeLists.txt +265 -0
  253. package/vendor/zlib/test/add_subdirectory_exclude_test.cmake.in +29 -0
  254. package/vendor/zlib/test/add_subdirectory_test.cmake.in +28 -0
  255. package/vendor/zlib/test/example.c +552 -0
  256. package/vendor/zlib/test/find_package_test.cmake.in +26 -0
  257. package/vendor/zlib/test/infcover.c +672 -0
  258. package/vendor/zlib/test/minigzip.c +590 -0
  259. package/vendor/zlib/treebuild.xml +116 -0
  260. package/vendor/zlib/trees.c +1119 -0
  261. package/vendor/zlib/trees.h +128 -0
  262. package/vendor/zlib/uncompr.c +85 -0
  263. package/vendor/zlib/watcom/watcom_f.mak +43 -0
  264. package/vendor/zlib/watcom/watcom_l.mak +43 -0
  265. package/vendor/zlib/win32/DLL_FAQ.txt +381 -0
  266. package/vendor/zlib/win32/Makefile.bor +109 -0
  267. package/vendor/zlib/win32/Makefile.gcc +177 -0
  268. package/vendor/zlib/win32/Makefile.msc +159 -0
  269. package/vendor/zlib/win32/README-WIN32.txt +103 -0
  270. package/vendor/zlib/win32/VisualC.txt +3 -0
  271. package/vendor/zlib/win32/zlib.def +98 -0
  272. package/vendor/zlib/win32/zlib1.rc +37 -0
  273. package/vendor/zlib/zconf.h.in +544 -0
  274. package/vendor/zlib/zlib.3 +149 -0
  275. package/vendor/zlib/zlib.3.pdf +0 -0
  276. package/vendor/zlib/zlib.h +1957 -0
  277. package/vendor/zlib/zlib.map +104 -0
  278. package/vendor/zlib/zlib.pc.cmakein +13 -0
  279. package/vendor/zlib/zlib.pc.in +13 -0
  280. package/vendor/zlib/zlibConfig.cmake.in +26 -0
  281. package/vendor/zlib/zutil.c +299 -0
  282. package/vendor/zlib/zutil.h +257 -0
  283. package/vendor/zsign/.gitattributes +4 -0
  284. package/vendor/zsign/LICENSE +21 -0
  285. package/vendor/zsign/README.md +142 -0
  286. package/vendor/zsign/build/linux/Makefile +43 -0
  287. package/vendor/zsign/build/macos/Makefile +43 -0
  288. package/vendor/zsign/build/windows/vs2022/include/minizip/crypt.h +128 -0
  289. package/vendor/zsign/build/windows/vs2022/include/minizip/ioapi.h +216 -0
  290. package/vendor/zsign/build/windows/vs2022/include/minizip/iowin32.h +28 -0
  291. package/vendor/zsign/build/windows/vs2022/include/minizip/mztools.h +37 -0
  292. package/vendor/zsign/build/windows/vs2022/include/minizip/unzip.h +437 -0
  293. package/vendor/zsign/build/windows/vs2022/include/minizip/zip.h +364 -0
  294. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_EPILOGUE.H +22 -0
  295. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_PROLOGUE.H +26 -0
  296. package/vendor/zsign/build/windows/vs2022/include/openssl/aes.h +111 -0
  297. package/vendor/zsign/build/windows/vs2022/include/openssl/applink.c +153 -0
  298. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1.h +1133 -0
  299. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1_mac.h +10 -0
  300. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1err.h +142 -0
  301. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1t.h +946 -0
  302. package/vendor/zsign/build/windows/vs2022/include/openssl/async.h +104 -0
  303. package/vendor/zsign/build/windows/vs2022/include/openssl/asyncerr.h +29 -0
  304. package/vendor/zsign/build/windows/vs2022/include/openssl/bio.h +1015 -0
  305. package/vendor/zsign/build/windows/vs2022/include/openssl/bioerr.h +72 -0
  306. package/vendor/zsign/build/windows/vs2022/include/openssl/blowfish.h +78 -0
  307. package/vendor/zsign/build/windows/vs2022/include/openssl/bn.h +590 -0
  308. package/vendor/zsign/build/windows/vs2022/include/openssl/bnerr.h +47 -0
  309. package/vendor/zsign/build/windows/vs2022/include/openssl/buffer.h +62 -0
  310. package/vendor/zsign/build/windows/vs2022/include/openssl/buffererr.h +25 -0
  311. package/vendor/zsign/build/windows/vs2022/include/openssl/camellia.h +117 -0
  312. package/vendor/zsign/build/windows/vs2022/include/openssl/cast.h +71 -0
  313. package/vendor/zsign/build/windows/vs2022/include/openssl/cmac.h +52 -0
  314. package/vendor/zsign/build/windows/vs2022/include/openssl/cmp.h +727 -0
  315. package/vendor/zsign/build/windows/vs2022/include/openssl/cmp_util.h +56 -0
  316. package/vendor/zsign/build/windows/vs2022/include/openssl/cmperr.h +131 -0
  317. package/vendor/zsign/build/windows/vs2022/include/openssl/cms.h +508 -0
  318. package/vendor/zsign/build/windows/vs2022/include/openssl/cmserr.h +125 -0
  319. package/vendor/zsign/build/windows/vs2022/include/openssl/comp.h +98 -0
  320. package/vendor/zsign/build/windows/vs2022/include/openssl/comperr.h +38 -0
  321. package/vendor/zsign/build/windows/vs2022/include/openssl/conf.h +214 -0
  322. package/vendor/zsign/build/windows/vs2022/include/openssl/conf_api.h +46 -0
  323. package/vendor/zsign/build/windows/vs2022/include/openssl/conferr.h +52 -0
  324. package/vendor/zsign/build/windows/vs2022/include/openssl/configuration.h +188 -0
  325. package/vendor/zsign/build/windows/vs2022/include/openssl/conftypes.h +44 -0
  326. package/vendor/zsign/build/windows/vs2022/include/openssl/core.h +236 -0
  327. package/vendor/zsign/build/windows/vs2022/include/openssl/core_dispatch.h +1022 -0
  328. package/vendor/zsign/build/windows/vs2022/include/openssl/core_names.h +545 -0
  329. package/vendor/zsign/build/windows/vs2022/include/openssl/core_object.h +41 -0
  330. package/vendor/zsign/build/windows/vs2022/include/openssl/crmf.h +260 -0
  331. package/vendor/zsign/build/windows/vs2022/include/openssl/crmferr.h +50 -0
  332. package/vendor/zsign/build/windows/vs2022/include/openssl/crypto.h +580 -0
  333. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr.h +56 -0
  334. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr_legacy.h +1466 -0
  335. package/vendor/zsign/build/windows/vs2022/include/openssl/ct.h +573 -0
  336. package/vendor/zsign/build/windows/vs2022/include/openssl/cterr.h +45 -0
  337. package/vendor/zsign/build/windows/vs2022/include/openssl/decoder.h +133 -0
  338. package/vendor/zsign/build/windows/vs2022/include/openssl/decodererr.h +28 -0
  339. package/vendor/zsign/build/windows/vs2022/include/openssl/des.h +211 -0
  340. package/vendor/zsign/build/windows/vs2022/include/openssl/dh.h +339 -0
  341. package/vendor/zsign/build/windows/vs2022/include/openssl/dherr.h +59 -0
  342. package/vendor/zsign/build/windows/vs2022/include/openssl/dsa.h +280 -0
  343. package/vendor/zsign/build/windows/vs2022/include/openssl/dsaerr.h +44 -0
  344. package/vendor/zsign/build/windows/vs2022/include/openssl/dtls1.h +57 -0
  345. package/vendor/zsign/build/windows/vs2022/include/openssl/e_os2.h +310 -0
  346. package/vendor/zsign/build/windows/vs2022/include/openssl/e_ostime.h +38 -0
  347. package/vendor/zsign/build/windows/vs2022/include/openssl/ebcdic.h +39 -0
  348. package/vendor/zsign/build/windows/vs2022/include/openssl/ec.h +1588 -0
  349. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdh.h +10 -0
  350. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdsa.h +10 -0
  351. package/vendor/zsign/build/windows/vs2022/include/openssl/ecerr.h +104 -0
  352. package/vendor/zsign/build/windows/vs2022/include/openssl/encoder.h +124 -0
  353. package/vendor/zsign/build/windows/vs2022/include/openssl/encodererr.h +28 -0
  354. package/vendor/zsign/build/windows/vs2022/include/openssl/engine.h +833 -0
  355. package/vendor/zsign/build/windows/vs2022/include/openssl/engineerr.h +63 -0
  356. package/vendor/zsign/build/windows/vs2022/include/openssl/err.h +512 -0
  357. package/vendor/zsign/build/windows/vs2022/include/openssl/ess.h +128 -0
  358. package/vendor/zsign/build/windows/vs2022/include/openssl/esserr.h +32 -0
  359. package/vendor/zsign/build/windows/vs2022/include/openssl/evp.h +2231 -0
  360. package/vendor/zsign/build/windows/vs2022/include/openssl/evperr.h +140 -0
  361. package/vendor/zsign/build/windows/vs2022/include/openssl/fips_names.h +50 -0
  362. package/vendor/zsign/build/windows/vs2022/include/openssl/fipskey.h +41 -0
  363. package/vendor/zsign/build/windows/vs2022/include/openssl/hmac.h +62 -0
  364. package/vendor/zsign/build/windows/vs2022/include/openssl/hpke.h +169 -0
  365. package/vendor/zsign/build/windows/vs2022/include/openssl/http.h +118 -0
  366. package/vendor/zsign/build/windows/vs2022/include/openssl/httperr.h +56 -0
  367. package/vendor/zsign/build/windows/vs2022/include/openssl/idea.h +82 -0
  368. package/vendor/zsign/build/windows/vs2022/include/openssl/indicator.h +31 -0
  369. package/vendor/zsign/build/windows/vs2022/include/openssl/kdf.h +138 -0
  370. package/vendor/zsign/build/windows/vs2022/include/openssl/kdferr.h +16 -0
  371. package/vendor/zsign/build/windows/vs2022/include/openssl/lhash.h +398 -0
  372. package/vendor/zsign/build/windows/vs2022/include/openssl/macros.h +338 -0
  373. package/vendor/zsign/build/windows/vs2022/include/openssl/md2.h +56 -0
  374. package/vendor/zsign/build/windows/vs2022/include/openssl/md4.h +63 -0
  375. package/vendor/zsign/build/windows/vs2022/include/openssl/md5.h +62 -0
  376. package/vendor/zsign/build/windows/vs2022/include/openssl/mdc2.h +55 -0
  377. package/vendor/zsign/build/windows/vs2022/include/openssl/modes.h +219 -0
  378. package/vendor/zsign/build/windows/vs2022/include/openssl/obj_mac.h +5820 -0
  379. package/vendor/zsign/build/windows/vs2022/include/openssl/objects.h +184 -0
  380. package/vendor/zsign/build/windows/vs2022/include/openssl/objectserr.h +28 -0
  381. package/vendor/zsign/build/windows/vs2022/include/openssl/ocsp.h +483 -0
  382. package/vendor/zsign/build/windows/vs2022/include/openssl/ocsperr.h +53 -0
  383. package/vendor/zsign/build/windows/vs2022/include/openssl/opensslconf.h +17 -0
  384. package/vendor/zsign/build/windows/vs2022/include/openssl/opensslv.h +114 -0
  385. package/vendor/zsign/build/windows/vs2022/include/openssl/ossl_typ.h +16 -0
  386. package/vendor/zsign/build/windows/vs2022/include/openssl/param_build.h +63 -0
  387. package/vendor/zsign/build/windows/vs2022/include/openssl/params.h +160 -0
  388. package/vendor/zsign/build/windows/vs2022/include/openssl/pem.h +543 -0
  389. package/vendor/zsign/build/windows/vs2022/include/openssl/pem2.h +19 -0
  390. package/vendor/zsign/build/windows/vs2022/include/openssl/pemerr.h +58 -0
  391. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs12.h +366 -0
  392. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs12err.h +46 -0
  393. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs7.h +430 -0
  394. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs7err.h +63 -0
  395. package/vendor/zsign/build/windows/vs2022/include/openssl/prov_ssl.h +38 -0
  396. package/vendor/zsign/build/windows/vs2022/include/openssl/proverr.h +162 -0
  397. package/vendor/zsign/build/windows/vs2022/include/openssl/provider.h +66 -0
  398. package/vendor/zsign/build/windows/vs2022/include/openssl/quic.h +70 -0
  399. package/vendor/zsign/build/windows/vs2022/include/openssl/rand.h +125 -0
  400. package/vendor/zsign/build/windows/vs2022/include/openssl/randerr.h +69 -0
  401. package/vendor/zsign/build/windows/vs2022/include/openssl/rc2.h +68 -0
  402. package/vendor/zsign/build/windows/vs2022/include/openssl/rc4.h +47 -0
  403. package/vendor/zsign/build/windows/vs2022/include/openssl/rc5.h +79 -0
  404. package/vendor/zsign/build/windows/vs2022/include/openssl/ripemd.h +59 -0
  405. package/vendor/zsign/build/windows/vs2022/include/openssl/rsa.h +615 -0
  406. package/vendor/zsign/build/windows/vs2022/include/openssl/rsaerr.h +107 -0
  407. package/vendor/zsign/build/windows/vs2022/include/openssl/safestack.h +297 -0
  408. package/vendor/zsign/build/windows/vs2022/include/openssl/seed.h +113 -0
  409. package/vendor/zsign/build/windows/vs2022/include/openssl/self_test.h +98 -0
  410. package/vendor/zsign/build/windows/vs2022/include/openssl/sha.h +139 -0
  411. package/vendor/zsign/build/windows/vs2022/include/openssl/srp.h +285 -0
  412. package/vendor/zsign/build/windows/vs2022/include/openssl/srtp.h +68 -0
  413. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl.h +2878 -0
  414. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl2.h +30 -0
  415. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl3.h +357 -0
  416. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr.h +379 -0
  417. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr_legacy.h +467 -0
  418. package/vendor/zsign/build/windows/vs2022/include/openssl/stack.h +90 -0
  419. package/vendor/zsign/build/windows/vs2022/include/openssl/store.h +377 -0
  420. package/vendor/zsign/build/windows/vs2022/include/openssl/storeerr.h +49 -0
  421. package/vendor/zsign/build/windows/vs2022/include/openssl/symhacks.h +39 -0
  422. package/vendor/zsign/build/windows/vs2022/include/openssl/thread.h +31 -0
  423. package/vendor/zsign/build/windows/vs2022/include/openssl/tls1.h +1220 -0
  424. package/vendor/zsign/build/windows/vs2022/include/openssl/trace.h +320 -0
  425. package/vendor/zsign/build/windows/vs2022/include/openssl/ts.h +522 -0
  426. package/vendor/zsign/build/windows/vs2022/include/openssl/tserr.h +67 -0
  427. package/vendor/zsign/build/windows/vs2022/include/openssl/txt_db.h +63 -0
  428. package/vendor/zsign/build/windows/vs2022/include/openssl/types.h +245 -0
  429. package/vendor/zsign/build/windows/vs2022/include/openssl/ui.h +407 -0
  430. package/vendor/zsign/build/windows/vs2022/include/openssl/uierr.h +38 -0
  431. package/vendor/zsign/build/windows/vs2022/include/openssl/whrlpool.h +62 -0
  432. package/vendor/zsign/build/windows/vs2022/include/openssl/x509.h +1304 -0
  433. package/vendor/zsign/build/windows/vs2022/include/openssl/x509_acert.h +263 -0
  434. package/vendor/zsign/build/windows/vs2022/include/openssl/x509_vfy.h +902 -0
  435. package/vendor/zsign/build/windows/vs2022/include/openssl/x509err.h +70 -0
  436. package/vendor/zsign/build/windows/vs2022/include/openssl/x509v3.h +1500 -0
  437. package/vendor/zsign/build/windows/vs2022/include/openssl/x509v3err.h +96 -0
  438. package/vendor/zsign/build/windows/vs2022/include/zlib/zconf.h +553 -0
  439. package/vendor/zsign/build/windows/vs2022/include/zlib/zlib.h +1938 -0
  440. package/vendor/zsign/build/windows/vs2022/lib/minizip/x64/mt/minizip.lib +0 -0
  441. package/vendor/zsign/build/windows/vs2022/lib/openssl/x64/mt/libcrypto.lib +0 -0
  442. package/vendor/zsign/build/windows/vs2022/lib/openssl/x64/mt/libssl.lib +0 -0
  443. package/vendor/zsign/build/windows/vs2022/lib/zlib/x64/mt/zlib.lib +0 -0
  444. package/vendor/zsign/build/windows/vs2022/zsign/src/common_win32.h +44 -0
  445. package/vendor/zsign/build/windows/vs2022/zsign/src/getopt.cpp +69 -0
  446. package/vendor/zsign/build/windows/vs2022/zsign/src/getopt.h +20 -0
  447. package/vendor/zsign/build/windows/vs2022/zsign/src/iconv.cpp +138 -0
  448. package/vendor/zsign/build/windows/vs2022/zsign/src/iconv.h +38 -0
  449. package/vendor/zsign/build/windows/vs2022/zsign/zsign.vcxproj +177 -0
  450. package/vendor/zsign/build/windows/vs2022/zsign/zsign.vcxproj.filters +120 -0
  451. package/vendor/zsign/build/windows/vs2022/zsign.sln +28 -0
  452. package/vendor/zsign/src/archo.cpp +742 -0
  453. package/vendor/zsign/src/archo.h +61 -0
  454. package/vendor/zsign/src/bundle.cpp +589 -0
  455. package/vendor/zsign/src/bundle.h +46 -0
  456. package/vendor/zsign/src/common/archive.cpp +246 -0
  457. package/vendor/zsign/src/common/archive.h +22 -0
  458. package/vendor/zsign/src/common/base64.cpp +166 -0
  459. package/vendor/zsign/src/common/base64.h +30 -0
  460. package/vendor/zsign/src/common/common.h +56 -0
  461. package/vendor/zsign/src/common/fs.cpp +573 -0
  462. package/vendor/zsign/src/common/fs.h +50 -0
  463. package/vendor/zsign/src/common/json.cpp +3380 -0
  464. package/vendor/zsign/src/common/json.h +530 -0
  465. package/vendor/zsign/src/common/log.cpp +145 -0
  466. package/vendor/zsign/src/common/log.h +37 -0
  467. package/vendor/zsign/src/common/mach-o.h +585 -0
  468. package/vendor/zsign/src/common/sha.cpp +133 -0
  469. package/vendor/zsign/src/common/sha.h +24 -0
  470. package/vendor/zsign/src/common/timer.cpp +28 -0
  471. package/vendor/zsign/src/common/timer.h +17 -0
  472. package/vendor/zsign/src/common/util.cpp +185 -0
  473. package/vendor/zsign/src/common/util.h +25 -0
  474. package/vendor/zsign/src/macho.cpp +273 -0
  475. package/vendor/zsign/src/macho.h +38 -0
  476. package/vendor/zsign/src/openssl.cpp +698 -0
  477. package/vendor/zsign/src/openssl.h +71 -0
  478. package/vendor/zsign/src/signing.cpp +745 -0
  479. package/vendor/zsign/src/signing.h +59 -0
  480. package/vendor/zsign/src/zsign.cpp +317 -0
  481. package/vendor/zsign/test/dylib/bin/demo1.dylib +0 -0
  482. package/vendor/zsign/test/dylib/bin/demo2.dylib +0 -0
  483. package/vendor/zsign/test/dylib/demo/Makefile +12 -0
  484. package/vendor/zsign/test/dylib/demo/control +9 -0
  485. package/vendor/zsign/test/dylib/demo/demo.m +21 -0
  486. package/vendor/zsign/test/linux/test.sh +19 -0
  487. package/vendor/zsign/test/macos/test.sh +19 -0
  488. package/vendor/zsign/test/windows/test.ps1 +17 -0
@@ -0,0 +1,745 @@
1
+ #include "common.h"
2
+ #include "json.h"
3
+ #include "mach-o.h"
4
+ #include "openssl.h"
5
+ #include "signing.h"
6
+
7
+ void ZSign::_DERLength(string& strBlob, uint64_t uLength)
8
+ {
9
+ if (uLength < 128) {
10
+ strBlob.append(1, (char)uLength);
11
+ } else {
12
+ uint32_t sLength = (64 - ZUtil::builtin_clzll(uLength) + 7) / 8;
13
+ strBlob.append(1, (char)(0x80 | sLength));
14
+ sLength *= 8;
15
+ do {
16
+ strBlob.append(1, (char)(uLength >> (sLength -= 8)));
17
+ } while (sLength != 0);
18
+ }
19
+ }
20
+
21
+ string ZSign::_DER(const jvalue& data)
22
+ {
23
+ string strOutput;
24
+ if (data.is_bool()) {
25
+ strOutput.append(1, 0x01);
26
+ strOutput.append(1, 1);
27
+ strOutput.append(1, data.as_bool() ? 1 : 0);
28
+ } else if (data.is_int()) {
29
+ uint64_t uVal = data.as_int64();
30
+ strOutput.append(1, 0x02);
31
+ _DERLength(strOutput, uVal);
32
+
33
+ uint32_t sLength = (64 - ZUtil::builtin_clzll(uVal) + 7) / 8;
34
+ sLength *= 8;
35
+ do {
36
+ strOutput.append(1, (char)(uVal >> (sLength -= 8)));
37
+ } while (sLength != 0);
38
+ } else if (data.is_string()) {
39
+ string strVal = data.as_cstr();
40
+ strOutput.append(1, 0x0c);
41
+ _DERLength(strOutput, strVal.size());
42
+ strOutput += strVal;
43
+ } else if (data.is_array()) {
44
+ string strArray;
45
+ size_t size = data.size();
46
+ for (size_t i = 0; i < size; i++) {
47
+ strArray += _DER(data[i]);
48
+ }
49
+ strOutput.append(1, 0x30);
50
+ _DERLength(strOutput, strArray.size());
51
+ strOutput += strArray;
52
+ } else if (data.is_object()) {
53
+ string strDict;
54
+ vector<string> arrKeys;
55
+ data.get_keys(arrKeys);
56
+ for (size_t i = 0; i < arrKeys.size(); i++) {
57
+ string& strKey = arrKeys[i];
58
+ string strVal = _DER(data[strKey]);
59
+
60
+ strDict.append(1, 0x30);
61
+ _DERLength(strDict, (2 + strKey.size() + strVal.size()));
62
+
63
+ strDict.append(1, 0x0c);
64
+ _DERLength(strDict, strKey.size());
65
+ strDict += strKey;
66
+
67
+ strDict += strVal;
68
+ }
69
+
70
+ strOutput.append(1, 0x31);
71
+ _DERLength(strOutput, strDict.size());
72
+ strOutput += strDict;
73
+ } else if (data.is_double()) {
74
+ assert(false);
75
+ } else if (data.is_date()) {
76
+ assert(false);
77
+ } else if (data.is_data()) {
78
+ assert(false);
79
+ } else {
80
+ assert(false && "Unsupported Entitlements DER Type");
81
+ }
82
+
83
+ return strOutput;
84
+ }
85
+
86
+ uint32_t ZSign::SlotParseGeneralHeader(const char* szSlotName, uint8_t* pSlotBase, CS_BlobIndex* pbi)
87
+ {
88
+ uint32_t uSlotLength = LE(*(((uint32_t*)pSlotBase) + 1));
89
+ ZLog::PrintV("\n > %s: \n", szSlotName);
90
+ ZLog::PrintV("\ttype: \t\t0x%x\n", LE(pbi->type));
91
+ ZLog::PrintV("\toffset: \t%u\n", LE(pbi->offset));
92
+ ZLog::PrintV("\tmagic: \t\t0x%x\n", LE(*((uint32_t*)pSlotBase)));
93
+ ZLog::PrintV("\tlength: \t%u\n", uSlotLength);
94
+ return uSlotLength;
95
+ }
96
+
97
+ void ZSign::SlotParseGeneralTailer(uint8_t* pSlotBase, uint32_t uSlotLength)
98
+ {
99
+ ZSHA::PrintData1("\tSHA-1: \t", pSlotBase, uSlotLength);
100
+ ZSHA::PrintData256("\tSHA-256:\t", pSlotBase, uSlotLength);
101
+ }
102
+
103
+ bool ZSign::SlotParseRequirements(uint8_t* pSlotBase, CS_BlobIndex* pbi)
104
+ {
105
+ uint32_t uSlotLength = SlotParseGeneralHeader("CSSLOT_REQUIREMENTS", pSlotBase, pbi);
106
+ if (uSlotLength < 8) {
107
+ return false;
108
+ }
109
+
110
+ #ifndef _WIN32
111
+ if (ZFile::IsFileExists("/usr/bin/csreq")) {
112
+ string strTempFile;
113
+ ZUtil::StringFormatV(strTempFile, "/tmp/Requirements_%llu.blob", ZUtil::GetMicroSecond());
114
+ ZFile::WriteFile(strTempFile.c_str(), (const char*)pSlotBase, uSlotLength);
115
+
116
+ string strCommand;
117
+ ZUtil::StringFormatV(strCommand, "/usr/bin/csreq -r '%s' -t ", strTempFile.c_str());
118
+ char result[1024] = { 0 };
119
+ FILE* cmd = popen(strCommand.c_str(), "r");
120
+ while (NULL != fgets(result, sizeof(result), cmd)) {
121
+ printf("\treqtext: \t%s", result);
122
+ }
123
+ pclose(cmd);
124
+ ZFile::RemoveFile(strTempFile.c_str());
125
+ }
126
+ #endif
127
+
128
+ SlotParseGeneralTailer(pSlotBase, uSlotLength);
129
+
130
+ if (ZLog::IsDebug()) {
131
+ ZFile::WriteFile("./.zsign_debug/Requirements.slot", (const char*)pSlotBase, uSlotLength);
132
+ }
133
+ return true;
134
+ }
135
+
136
+ bool ZSign::SlotBuildRequirements(const string& strBundleID, const string& strSubjectCN, string& strOutput)
137
+ {
138
+ strOutput.clear();
139
+ if (strBundleID.empty() || strSubjectCN.empty()) { //ldid
140
+ uint8_t ldid[] = { 0xfa, 0xde, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00 };
141
+ strOutput.append((const char*)ldid, sizeof(ldid));
142
+ return true;
143
+ }
144
+
145
+ string strPaddedBundleID = strBundleID;
146
+ strPaddedBundleID.append(((strBundleID.size() % 4) ? (4 - (strBundleID.size() % 4)) : 0), 0);
147
+
148
+ string strPaddedSubjectID = strSubjectCN;
149
+ strPaddedSubjectID.append(((strSubjectCN.size() % 4) ? (4 - (strSubjectCN.size() % 4)) : 0), 0);
150
+
151
+ uint8_t magic1[] = { 0xfa, 0xde, 0x0c, 0x01 };
152
+ uint32_t uLength1 = 0;
153
+ uint8_t pack1[] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x14 };
154
+ uint8_t magic2[] = { 0xfa, 0xde, 0x0c, 0x00 };
155
+ uint32_t uLength2 = 0;
156
+ uint8_t pack2[] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02 };
157
+ uint32_t uBundldIDLength = (uint32_t)strBundleID.size();
158
+ //string strPaddedBundleID
159
+ uint8_t pack3[] = { 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0b,
160
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e,
161
+ 0x43, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };
162
+ uint32_t uSubjectCNLength = (uint32_t)strSubjectCN.size();
163
+ //string strPaddedSubjectID
164
+ uint8_t pack4[] = { 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x2a, 0x86, 0x48, 0x86,
165
+ 0xf7, 0x63, 0x64, 0x06, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
166
+
167
+ uLength2 += sizeof(magic2) + sizeof(uLength2) + sizeof(pack2);
168
+ uLength2 += sizeof(uBundldIDLength) + (uint32_t)strPaddedBundleID.size();
169
+ uLength2 += sizeof(pack3);
170
+ uLength2 += sizeof(uSubjectCNLength) + (uint32_t)strPaddedSubjectID.size();
171
+ uLength2 += sizeof(pack4);
172
+
173
+ uLength1 += sizeof(magic1) + sizeof(uLength1) + sizeof(pack1);
174
+ uLength1 += uLength2;
175
+
176
+ uLength1 = BE(uLength1);
177
+ uLength2 = BE(uLength2);
178
+ uBundldIDLength = BE(uBundldIDLength);
179
+ uSubjectCNLength = BE(uSubjectCNLength);
180
+
181
+ strOutput.append((const char*)magic1, sizeof(magic1));
182
+ strOutput.append((const char*)&uLength1, sizeof(uLength1));
183
+ strOutput.append((const char*)pack1, sizeof(pack1));
184
+ strOutput.append((const char*)magic2, sizeof(magic2));
185
+ strOutput.append((const char*)&uLength2, sizeof(uLength2));
186
+ strOutput.append((const char*)pack2, sizeof(pack2));
187
+ strOutput.append((const char*)&uBundldIDLength, sizeof(uBundldIDLength));
188
+ strOutput.append(strPaddedBundleID.data(), strPaddedBundleID.size());
189
+ strOutput.append((const char*)pack3, sizeof(pack3));
190
+ strOutput.append((const char*)&uSubjectCNLength, sizeof(uSubjectCNLength));
191
+ strOutput.append(strPaddedSubjectID.data(), strPaddedSubjectID.size());
192
+ strOutput.append((const char*)pack4, sizeof(pack4));
193
+
194
+ return true;
195
+ }
196
+
197
+ bool ZSign::SlotParseEntitlements(uint8_t* pSlotBase, CS_BlobIndex* pbi)
198
+ {
199
+ uint32_t uSlotLength = SlotParseGeneralHeader("CSSLOT_ENTITLEMENTS", pSlotBase, pbi);
200
+ if (uSlotLength < 8) {
201
+ return false;
202
+ }
203
+
204
+ string strEntitlements = "\t\t\t";
205
+ strEntitlements.append((const char*)pSlotBase + 8, uSlotLength - 8);
206
+ ZUtil::StringReplace(strEntitlements, "\n", "\n\t\t\t");
207
+ ZLog::PrintV("\tentitlements: \n%s\n", strEntitlements.c_str());
208
+
209
+ SlotParseGeneralTailer(pSlotBase, uSlotLength);
210
+
211
+ if (ZLog::IsDebug()) {
212
+ ZFile::WriteFile("./.zsign_debug/Entitlements.slot", (const char*)pSlotBase, uSlotLength);
213
+ ZFile::WriteFile("./.zsign_debug/Entitlements.plist", (const char*)pSlotBase + 8, uSlotLength - 8);
214
+ }
215
+ return true;
216
+ }
217
+
218
+ bool ZSign::SlotParseDerEntitlements(uint8_t* pSlotBase, CS_BlobIndex* pbi)
219
+ {
220
+ uint32_t uSlotLength = SlotParseGeneralHeader("CSSLOT_DER_ENTITLEMENTS", pSlotBase, pbi);
221
+ if (uSlotLength < 8) {
222
+ return false;
223
+ }
224
+
225
+ SlotParseGeneralTailer(pSlotBase, uSlotLength);
226
+
227
+ if (ZLog::IsDebug()) {
228
+ ZFile::WriteFile("./.zsign_debug/Entitlements.der.slot", (const char*)pSlotBase, uSlotLength);
229
+ }
230
+ return true;
231
+ }
232
+
233
+ bool ZSign::SlotBuildEntitlements(const string& strEntitlements, string& strOutput)
234
+ {
235
+ strOutput.clear();
236
+ if (strEntitlements.empty()) {
237
+ return false;
238
+ }
239
+
240
+ uint32_t uMagic = BE((uint32_t)CSMAGIC_EMBEDDED_ENTITLEMENTS);
241
+ uint32_t uLength = BE((uint32_t)strEntitlements.size() + 8);
242
+
243
+ strOutput.append((const char*)&uMagic, sizeof(uMagic));
244
+ strOutput.append((const char*)&uLength, sizeof(uLength));
245
+ strOutput.append(strEntitlements.data(), strEntitlements.size());
246
+
247
+ return true;
248
+ }
249
+
250
+ bool ZSign::SlotBuildDerEntitlements(const string& strEntitlements, string& strOutput)
251
+ {
252
+ strOutput.clear();
253
+ if (strEntitlements.empty()) {
254
+ return false;
255
+ }
256
+
257
+ jvalue jvInfo;
258
+ jvInfo.read_plist(strEntitlements);
259
+
260
+ string strRawEntitlementsData = _DER(jvInfo);
261
+ uint32_t uMagic = BE((uint32_t)CSMAGIC_EMBEDDED_DER_ENTITLEMENTS);
262
+ uint32_t uLength = BE((uint32_t)strRawEntitlementsData.size() + 8);
263
+
264
+ strOutput.append((const char*)&uMagic, sizeof(uMagic));
265
+ strOutput.append((const char*)&uLength, sizeof(uLength));
266
+ strOutput.append(strRawEntitlementsData.data(), strRawEntitlementsData.size());
267
+
268
+ return true;
269
+ }
270
+
271
+ bool ZSign::SlotParseCodeDirectory(uint8_t* pSlotBase, CS_BlobIndex* pbi)
272
+ {
273
+ uint32_t uSlotLength = SlotParseGeneralHeader("CSSLOT_CODEDIRECTORY", pSlotBase, pbi);
274
+ if (uSlotLength < 8) {
275
+ return false;
276
+ }
277
+
278
+ vector<uint8_t*> arrCodeSlots;
279
+ vector<uint8_t*> arrSpecialSlots;
280
+ CS_CodeDirectory cdHeader = *((CS_CodeDirectory*)pSlotBase);
281
+ uint8_t* pHashes = pSlotBase + LE(cdHeader.hashOffset);
282
+ for (uint32_t i = 0; i < LE(cdHeader.nCodeSlots); i++) {
283
+ arrCodeSlots.push_back(pHashes + cdHeader.hashSize * i);
284
+ }
285
+ for (uint32_t i = 0; i < LE(cdHeader.nSpecialSlots); i++) {
286
+ arrSpecialSlots.push_back(pHashes - cdHeader.hashSize * (i + 1));
287
+ }
288
+
289
+ ZLog::PrintV("\tversion: \t0x%x\n", LE(cdHeader.version));
290
+ ZLog::PrintV("\tflags: \t\t%u\n", LE(cdHeader.flags));
291
+ ZLog::PrintV("\thashOffset: \t%u\n", LE(cdHeader.hashOffset));
292
+ ZLog::PrintV("\tidentOffset: \t%u\n", LE(cdHeader.identOffset));
293
+ ZLog::PrintV("\tnSpecialSlots: \t%u\n", LE(cdHeader.nSpecialSlots));
294
+ ZLog::PrintV("\tnCodeSlots: \t%u\n", LE(cdHeader.nCodeSlots));
295
+ ZLog::PrintV("\tcodeLimit: \t%u\n", LE(cdHeader.codeLimit));
296
+ ZLog::PrintV("\thashSize: \t%u\n", cdHeader.hashSize);
297
+ ZLog::PrintV("\thashType: \t%u\n", cdHeader.hashType);
298
+ ZLog::PrintV("\tspare1: \t%u\n", cdHeader.spare1);
299
+ ZLog::PrintV("\tpageSize: \t%u\n", cdHeader.pageSize);
300
+ ZLog::PrintV("\tspare2: \t%u\n", LE(cdHeader.spare2));
301
+
302
+ uint32_t uVersion = LE(cdHeader.version);
303
+ if (uVersion >= 0x20100) {
304
+ ZLog::PrintV("\tscatterOffset: \t%u\n", LE(cdHeader.scatterOffset));
305
+ }
306
+ if (uVersion >= 0x20200) {
307
+ ZLog::PrintV("\tteamOffset: \t%u\n", LE(cdHeader.teamOffset));
308
+ }
309
+ if (uVersion >= 0x20300) {
310
+ ZLog::PrintV("\tspare3: \t%u\n", LE(cdHeader.spare3));
311
+ ZLog::PrintV("\tcodeLimit64: \t%llu\n", LE(cdHeader.codeLimit64));
312
+ }
313
+ if (uVersion >= 0x20400) {
314
+ ZLog::PrintV("\texecSegBase: \t%llu\n", LE(cdHeader.execSegBase));
315
+ ZLog::PrintV("\texecSegLimit: \t%llu\n", LE(cdHeader.execSegLimit));
316
+ ZLog::PrintV("\texecSegFlags: \t%llu\n", LE(cdHeader.execSegFlags));
317
+ }
318
+
319
+ ZLog::PrintV("\tidentifier: \t%s\n", pSlotBase + LE(cdHeader.identOffset));
320
+ if (uVersion >= 0x20200) {
321
+ ZLog::PrintV("\tteamid: \t%s\n", pSlotBase + LE(cdHeader.teamOffset));
322
+ }
323
+
324
+ ZLog::PrintV("\tSpecialSlots:\n");
325
+ for (int i = LE(cdHeader.nSpecialSlots) - 1; i >= 0; i--) {
326
+ const char* suffix = "\t\n";
327
+ switch (i) {
328
+ case 0:
329
+ suffix = "\tInfo.plist\n";
330
+ break;
331
+ case 1:
332
+ suffix = "\tRequirements Slot\n";
333
+ break;
334
+ case 2:
335
+ suffix = "\tCodeResources\n";
336
+ break;
337
+ case 3:
338
+ suffix = "\tApplication Specific\n";
339
+ break;
340
+ case 4:
341
+ suffix = "\tEntitlements Slot\n";
342
+ break;
343
+ case 6:
344
+ suffix = "\tEntitlements(DER) Slot\n";
345
+ break;
346
+ }
347
+ ZSHA::Print("\t\t\t", arrSpecialSlots[i], cdHeader.hashSize, suffix);
348
+ }
349
+
350
+ if (ZLog::IsDebug()) {
351
+ ZLog::Print("\tCodeSlots:\n");
352
+ for (uint32_t i = 0; i < LE(cdHeader.nCodeSlots); i++) {
353
+ ZSHA::Print("\t\t\t", arrCodeSlots[i], cdHeader.hashSize);
354
+ }
355
+ } else {
356
+ ZLog::Print("\tCodeSlots: \tomitted. (use -d option for details)\n");
357
+ }
358
+
359
+ SlotParseGeneralTailer(pSlotBase, uSlotLength);
360
+
361
+ if (ZLog::IsDebug()) {
362
+ if (1 == cdHeader.hashType) {
363
+ ZFile::WriteFile("./.zsign_debug/CodeDirectory_SHA1.slot", (const char*)pSlotBase, uSlotLength);
364
+ } else if (2 == cdHeader.hashType) {
365
+ ZFile::WriteFile("./.zsign_debug/CodeDirectory_SHA256.slot", (const char*)pSlotBase, uSlotLength);
366
+ }
367
+ }
368
+
369
+ return true;
370
+ }
371
+
372
+ bool ZSign::SlotBuildCodeDirectory(bool bAlternate,
373
+ uint8_t* pCodeBase,
374
+ uint32_t uCodeLength,
375
+ uint8_t* pCodeSlotsData,
376
+ uint32_t uCodeSlotsDataLength,
377
+ uint64_t execSegLimit,
378
+ uint64_t execSegFlags,
379
+ const string& strBundleId,
380
+ const string& strTeamId,
381
+ const string& strInfoPlistSHA,
382
+ const string& strRequirementsSlotSHA,
383
+ const string& strCodeResourcesSHA,
384
+ const string& strEntitlementsSlotSHA,
385
+ const string& strDerEntitlementsSlotSHA,
386
+ bool isExecuteArch,
387
+ bool isAdhoc,
388
+ string& strOutput)
389
+ {
390
+ strOutput.clear();
391
+ if (NULL == pCodeBase || uCodeLength <= 0 || strBundleId.empty() || (strTeamId.empty() && !isAdhoc)) {
392
+ return false;
393
+ }
394
+
395
+ uint32_t uVersion = 0x20400;
396
+
397
+ CS_CodeDirectory cdHeader;
398
+ memset(&cdHeader, 0, sizeof(cdHeader));
399
+ cdHeader.magic = BE((uint32_t)CSMAGIC_CODEDIRECTORY);
400
+ cdHeader.length = 0;
401
+ cdHeader.version = BE(uVersion);
402
+ cdHeader.flags = isAdhoc ? BE(static_cast<uint32_t>(CS_SEC_CODESIGNATURE_ADHOC)) : 0U;
403
+ cdHeader.hashOffset = 0;
404
+ cdHeader.identOffset = 0;
405
+ cdHeader.nSpecialSlots = 0;
406
+ cdHeader.nCodeSlots = 0;
407
+ cdHeader.codeLimit = BE(uCodeLength);
408
+ cdHeader.hashSize = bAlternate ? 32 : 20;
409
+ cdHeader.hashType = bAlternate ? 2 : 1;
410
+ cdHeader.spare1 = 0;
411
+ cdHeader.pageSize = 12;
412
+ cdHeader.spare2 = 0;
413
+ cdHeader.scatterOffset = 0;
414
+ cdHeader.teamOffset = 0;
415
+ cdHeader.execSegBase = 0;
416
+ cdHeader.execSegLimit = BE(execSegLimit);
417
+ cdHeader.execSegFlags = BE(execSegFlags);
418
+
419
+ string strEmptySHA;
420
+ strEmptySHA.append(cdHeader.hashSize, 0);
421
+ vector<string> arrSpecialSlots;
422
+
423
+ if (isExecuteArch) {
424
+ arrSpecialSlots.push_back(strDerEntitlementsSlotSHA.empty() ? strEmptySHA : strDerEntitlementsSlotSHA);
425
+ arrSpecialSlots.push_back(strEmptySHA);
426
+ }
427
+ arrSpecialSlots.push_back(strEntitlementsSlotSHA.empty() ? strEmptySHA : strEntitlementsSlotSHA);
428
+ arrSpecialSlots.push_back(strEmptySHA);
429
+ arrSpecialSlots.push_back(strCodeResourcesSHA.empty() ? strEmptySHA : strCodeResourcesSHA);
430
+ arrSpecialSlots.push_back(strRequirementsSlotSHA.empty() ? strEmptySHA : strRequirementsSlotSHA);
431
+ arrSpecialSlots.push_back(strInfoPlistSHA.empty() ? strEmptySHA : strInfoPlistSHA);
432
+
433
+ // Trailing entries whose hash == strEmptySHA in `arrSpecialSlots` can be omitted; erase them.
434
+ // Special slots have negative indexes and come before code slots, i.e. index -1 is the 'Info.plist'
435
+ // slot, and -2 is 'Requirements slot'.
436
+ // Note that in `arrSpecialSlots` is reversed and trailing elements appear at front.
437
+ auto itLastUsedSpecialSlot = std::find_if(arrSpecialSlots.begin(), arrSpecialSlots.end(),
438
+ [&](const string& strSHA) { return strSHA != strEmptySHA; });
439
+ if (itLastUsedSpecialSlot != arrSpecialSlots.begin()) {
440
+ arrSpecialSlots.erase(arrSpecialSlots.begin(), itLastUsedSpecialSlot);
441
+ }
442
+
443
+ uint32_t uPageSize = (uint32_t)pow(2, cdHeader.pageSize);
444
+ uint32_t uPages = uCodeLength / uPageSize;
445
+ uint32_t uRemain = uCodeLength % uPageSize;
446
+ uint32_t uCodeSlots = uPages + (uRemain > 0 ? 1 : 0);
447
+
448
+ uint32_t uHeaderLength = 44;
449
+ if (uVersion >= 0x20100) {
450
+ uHeaderLength += sizeof(cdHeader.scatterOffset);
451
+ }
452
+ if (uVersion >= 0x20200) {
453
+ uHeaderLength += sizeof(cdHeader.teamOffset);
454
+ }
455
+ if (uVersion >= 0x20300) {
456
+ uHeaderLength += sizeof(cdHeader.spare3);
457
+ uHeaderLength += sizeof(cdHeader.codeLimit64);
458
+ }
459
+ if (uVersion >= 0x20400) {
460
+ uHeaderLength += sizeof(cdHeader.execSegBase);
461
+ uHeaderLength += sizeof(cdHeader.execSegLimit);
462
+ uHeaderLength += sizeof(cdHeader.execSegFlags);
463
+ }
464
+
465
+ uint32_t uBundleIDLength = (uint32_t)strBundleId.size() + 1;
466
+ uint32_t uTeamIDLength = (uint32_t)strTeamId.size() + 1;
467
+ uint32_t uSpecialSlotsLength = (uint32_t)arrSpecialSlots.size() * cdHeader.hashSize;
468
+ uint32_t uCodeSlotsLength = uCodeSlots * cdHeader.hashSize;
469
+
470
+ uint32_t uSlotLength = uHeaderLength + uBundleIDLength + uSpecialSlotsLength + uCodeSlotsLength;
471
+ if (uVersion >= 0x20100) {
472
+ //todo
473
+ }
474
+ if (uVersion >= 0x20200 && !strTeamId.empty()) {
475
+ uSlotLength += uTeamIDLength;
476
+ }
477
+
478
+ cdHeader.length = BE(uSlotLength);
479
+ cdHeader.identOffset = BE(uHeaderLength);
480
+ cdHeader.nSpecialSlots = BE((uint32_t)arrSpecialSlots.size());
481
+ cdHeader.nCodeSlots = BE(uCodeSlots);
482
+
483
+ uint32_t uHashOffset = uHeaderLength + uBundleIDLength + uSpecialSlotsLength;
484
+ if (uVersion >= 0x20100) {
485
+ //todo
486
+ }
487
+ // `strTeamId` may be empty for ad-hoc signature; in that case, `cdHeader.teamOffset == 0` and string
488
+ // data is not serialized below.
489
+ if (uVersion >= 0x20200 && !strTeamId.empty()) {
490
+ uHashOffset += uTeamIDLength;
491
+ cdHeader.teamOffset = BE(uHeaderLength + uBundleIDLength);
492
+ }
493
+ cdHeader.hashOffset = BE(uHashOffset);
494
+
495
+ strOutput.append((const char*)&cdHeader, uHeaderLength);
496
+ strOutput.append(strBundleId.data(), strBundleId.size() + 1);
497
+ if (uVersion >= 0x20100) {
498
+ //todo
499
+ }
500
+ if (uVersion >= 0x20200 && !strTeamId.empty()) {
501
+ strOutput.append(strTeamId.data(), strTeamId.size() + 1);
502
+ }
503
+
504
+ for (uint32_t i = 0; i < LE(cdHeader.nSpecialSlots); i++) {
505
+ strOutput.append(arrSpecialSlots[i].data(), arrSpecialSlots[i].size());
506
+ }
507
+
508
+ if (NULL != pCodeSlotsData && (uCodeSlotsDataLength == uCodeSlots * cdHeader.hashSize)) { //use exists
509
+ strOutput.append((const char*)pCodeSlotsData, uCodeSlotsDataLength);
510
+ } else {
511
+ for (uint32_t i = 0; i < uPages; i++) {
512
+ string strSHASum;
513
+ if (1 == cdHeader.hashType) {
514
+ ZSHA::SHA1(pCodeBase + uPageSize * i, uPageSize, strSHASum);
515
+ } else {
516
+ ZSHA::SHA256(pCodeBase + uPageSize * i, uPageSize, strSHASum);
517
+ }
518
+ strOutput.append(strSHASum.data(), strSHASum.size());
519
+ }
520
+ if (uRemain > 0) {
521
+ string strSHASum;
522
+ if (1 == cdHeader.hashType) {
523
+ ZSHA::SHA1(pCodeBase + uPageSize * uPages, uRemain, strSHASum);
524
+ } else {
525
+ ZSHA::SHA256(pCodeBase + uPageSize * uPages, uRemain, strSHASum);
526
+ }
527
+ strOutput.append(strSHASum.data(), strSHASum.size());
528
+ }
529
+ }
530
+
531
+ return true;
532
+ }
533
+
534
+ bool ZSign::SlotParseCMSSignature(uint8_t* pSlotBase, CS_BlobIndex* pbi)
535
+ {
536
+ uint32_t uSlotLength = SlotParseGeneralHeader("CSSLOT_SIGNATURESLOT", pSlotBase, pbi);
537
+ if (uSlotLength < 8) {
538
+ return false;
539
+ }
540
+
541
+ jvalue jvInfo;
542
+ ZSignAsset::GetCMSInfo(pSlotBase + 8, uSlotLength - 8, jvInfo);
543
+ //ZLog::PrintV("%s\n", jvInfo.styleWrite().c_str());
544
+
545
+ ZLog::Print("\tCertificates: \n");
546
+ for (size_t i = 0; i < jvInfo["certs"].size(); i++) {
547
+ ZLog::PrintV("\t\t\t%s\t<=\t%s\n", jvInfo["certs"][i]["Subject"]["CN"].as_cstr(), jvInfo["certs"][i]["Issuer"]["CN"].as_cstr());
548
+ }
549
+
550
+ ZLog::Print("\tSignedAttrs: \n");
551
+ if (jvInfo["attrs"].has("ContentType")) {
552
+ ZLog::PrintV("\t ContentType: \t%s => %s\n", jvInfo["attrs"]["ContentType"]["obj"].as_cstr(), jvInfo["attrs"]["ContentType"]["data"].as_cstr());
553
+ }
554
+
555
+ if (jvInfo["attrs"].has("SigningTime")) {
556
+ ZLog::PrintV("\t SigningTime: \t%s => %s\n", jvInfo["attrs"]["SigningTime"]["obj"].as_cstr(), jvInfo["attrs"]["SigningTime"]["data"].as_cstr());
557
+ }
558
+
559
+ if (jvInfo["attrs"].has("MessageDigest")) {
560
+ ZLog::PrintV("\t MsgDigest: \t%s => %s\n", jvInfo["attrs"]["MessageDigest"]["obj"].as_cstr(), jvInfo["attrs"]["MessageDigest"]["data"].as_cstr());
561
+ }
562
+
563
+ if (jvInfo["attrs"].has("CDHashes")) {
564
+ string strData = jvInfo["attrs"]["CDHashes"]["data"].as_cstr();
565
+ ZUtil::StringReplace(strData, "\n", "\n\t\t\t\t");
566
+ ZLog::PrintV("\t CDHashes: \t%s => \n\t\t\t\t%s\n", jvInfo["attrs"]["CDHashes"]["obj"].as_cstr(), strData.c_str());
567
+ }
568
+
569
+ if (jvInfo["attrs"].has("CDHashes2")) {
570
+ ZLog::PrintV("\t CDHashes2: \t%s => \n", jvInfo["attrs"]["CDHashes2"]["obj"].as_cstr());
571
+ for (size_t i = 0; i < jvInfo["attrs"]["CDHashes2"]["data"].size(); i++) {
572
+ ZLog::PrintV("\t\t\t\t%s\n", jvInfo["attrs"]["CDHashes2"]["data"][i].as_cstr());
573
+ }
574
+ }
575
+
576
+ for (size_t i = 0; i < jvInfo["attrs"]["unknown"].size(); i++) {
577
+ jvalue& jvAttr = jvInfo["attrs"]["unknown"][i];
578
+ ZLog::PrintV("\t UnknownAttr: \t%s => %s, type: %d, count: %d\n", jvAttr["obj"].as_cstr(), jvAttr["name"].as_cstr(), jvAttr["type"].as_int(), jvAttr["count"].as_int());
579
+ }
580
+ ZLog::Print("\n");
581
+
582
+ SlotParseGeneralTailer(pSlotBase, uSlotLength);
583
+
584
+ if (ZLog::IsDebug()) {
585
+ ZFile::WriteFile("./.zsign_debug/CMSSignature.slot", (const char*)pSlotBase, uSlotLength);
586
+ ZFile::WriteFile("./.zsign_debug/CMSSignature.der", (const char*)pSlotBase + 8, uSlotLength - 8);
587
+ }
588
+ return true;
589
+ }
590
+
591
+ bool ZSign::SlotBuildCMSSignature(ZSignAsset* pSignAsset,
592
+ const string& strCodeDirectorySlot,
593
+ const string& strAltnateCodeDirectorySlot,
594
+ string& strOutput)
595
+ {
596
+ strOutput.clear();
597
+ if (pSignAsset->m_bAdhoc) { // The empty CSSLOT_SIGNATURESLOT
598
+ uint8_t ldid[] = { 0xfa, 0xde, 0x0b, 0x01, 0x00, 0x00, 0x00, 0x08 };
599
+ strOutput.append((const char*)ldid, sizeof(ldid));
600
+ return true;
601
+ }
602
+
603
+ jvalue jvHashes;
604
+ string strCDHashesPlist;
605
+ string strCodeDirectorySlotSHA1;
606
+ string strAltnateCodeDirectorySlot256;
607
+ ZSHA::SHA1(strCodeDirectorySlot, strCodeDirectorySlotSHA1);
608
+ ZSHA::SHA256(strAltnateCodeDirectorySlot, strAltnateCodeDirectorySlot256);
609
+
610
+ size_t cdHashSize = strCodeDirectorySlotSHA1.size();
611
+ jvHashes["cdhashes"][0].assign_data(strCodeDirectorySlotSHA1.data(), cdHashSize);
612
+ jvHashes["cdhashes"][1].assign_data(strAltnateCodeDirectorySlot256.data(), cdHashSize);
613
+ jvHashes.style_write_plist(strCDHashesPlist);
614
+
615
+ string strCMSData;
616
+ if (!pSignAsset->GenerateCMS(strCodeDirectorySlot, strCDHashesPlist, strCodeDirectorySlotSHA1, strAltnateCodeDirectorySlot256, strCMSData)) {
617
+ return false;
618
+ }
619
+
620
+ uint32_t uMagic = BE((uint32_t)CSMAGIC_BLOBWRAPPER);
621
+ uint32_t uLength = BE((uint32_t)strCMSData.size() + 8);
622
+
623
+ strOutput.append((const char*)&uMagic, sizeof(uMagic));
624
+ strOutput.append((const char*)&uLength, sizeof(uLength));
625
+ strOutput.append(strCMSData.data(), strCMSData.size());
626
+ return true;
627
+ }
628
+
629
+ uint32_t ZSign::GetCodeSignatureLength(uint8_t* pCSBase)
630
+ {
631
+ CS_SuperBlob* psb = (CS_SuperBlob*)pCSBase;
632
+ if (NULL != psb && CSMAGIC_EMBEDDED_SIGNATURE == LE(psb->magic)) {
633
+ return LE(psb->length);
634
+ }
635
+ return 0;
636
+ }
637
+
638
+ bool ZSign::ParseCodeSignature(uint8_t* pCSBase)
639
+ {
640
+ CS_SuperBlob* psb = (CS_SuperBlob*)pCSBase;
641
+ if (NULL == psb || CSMAGIC_EMBEDDED_SIGNATURE != LE(psb->magic)) {
642
+ return false;
643
+ }
644
+
645
+ ZLog::PrintV("\n>>> CodeSignature Segment: \n");
646
+ ZLog::PrintV("\tmagic: \t\t0x%x\n", LE(psb->magic));
647
+ ZLog::PrintV("\tlength: \t%d\n", LE(psb->length));
648
+ ZLog::PrintV("\tslots: \t\t%d\n", LE(psb->count));
649
+
650
+ CS_BlobIndex* pbi = (CS_BlobIndex*)(pCSBase + sizeof(CS_SuperBlob));
651
+ for (uint32_t i = 0; i < LE(psb->count); i++, pbi++) {
652
+ uint8_t* pSlotBase = pCSBase + LE(pbi->offset);
653
+ switch (LE(pbi->type)) {
654
+ case CSSLOT_CODEDIRECTORY:
655
+ SlotParseCodeDirectory(pSlotBase, pbi);
656
+ break;
657
+ case CSSLOT_REQUIREMENTS:
658
+ SlotParseRequirements(pSlotBase, pbi);
659
+ break;
660
+ case CSSLOT_ENTITLEMENTS:
661
+ SlotParseEntitlements(pSlotBase, pbi);
662
+ break;
663
+ case CSSLOT_DER_ENTITLEMENTS:
664
+ SlotParseDerEntitlements(pSlotBase, pbi);
665
+ break;
666
+ case CSSLOT_ALTERNATE_CODEDIRECTORIES:
667
+ SlotParseCodeDirectory(pSlotBase, pbi);
668
+ break;
669
+ case CSSLOT_SIGNATURESLOT:
670
+ SlotParseCMSSignature(pSlotBase, pbi);
671
+ break;
672
+ case CSSLOT_IDENTIFICATIONSLOT:
673
+ SlotParseGeneralHeader("CSSLOT_IDENTIFICATIONSLOT", pSlotBase, pbi);
674
+ break;
675
+ case CSSLOT_TICKETSLOT:
676
+ SlotParseGeneralHeader("CSSLOT_TICKETSLOT", pSlotBase, pbi);
677
+ break;
678
+ default:
679
+ SlotParseGeneralTailer(pSlotBase, SlotParseGeneralHeader("CSSLOT_UNKNOWN", pSlotBase, pbi));
680
+ break;
681
+ }
682
+ }
683
+
684
+ if (ZLog::IsDebug()) {
685
+ ZFile::WriteFile("./.zsign_debug/CodeSignature.blob", (const char*)pCSBase, LE(psb->length));
686
+ }
687
+ return true;
688
+ }
689
+
690
+ bool ZSign::SlotGetCodeSlotsData(uint8_t* pSlotBase, uint8_t*& pCodeSlots, uint32_t& uCodeSlotsLength)
691
+ {
692
+ uint32_t uSlotLength = LE(*(((uint32_t*)pSlotBase) + 1));
693
+ if (uSlotLength < 8) {
694
+ return false;
695
+ }
696
+ CS_CodeDirectory cdHeader = *((CS_CodeDirectory*)pSlotBase);
697
+ pCodeSlots = pSlotBase + LE(cdHeader.hashOffset);
698
+ uCodeSlotsLength = LE(cdHeader.nCodeSlots) * cdHeader.hashSize;
699
+ return true;
700
+ }
701
+
702
+ bool ZSign::GetCodeSignatureExistsCodeSlotsData(uint8_t* pCSBase,
703
+ uint8_t*& pCodeSlots1Data,
704
+ uint32_t& uCodeSlots1DataLength,
705
+ uint8_t*& pCodeSlots256Data,
706
+ uint32_t& uCodeSlots256DataLength)
707
+ {
708
+ pCodeSlots1Data = NULL;
709
+ pCodeSlots256Data = NULL;
710
+ uCodeSlots1DataLength = 0;
711
+ uCodeSlots256DataLength = 0;
712
+ CS_SuperBlob* psb = (CS_SuperBlob*)pCSBase;
713
+ if (NULL == psb || CSMAGIC_EMBEDDED_SIGNATURE != LE(psb->magic)) {
714
+ return false;
715
+ }
716
+
717
+ CS_BlobIndex* pbi = (CS_BlobIndex*)(pCSBase + sizeof(CS_SuperBlob));
718
+ for (uint32_t i = 0; i < LE(psb->count); i++, pbi++) {
719
+ uint8_t* pSlotBase = pCSBase + LE(pbi->offset);
720
+ switch (LE(pbi->type)) {
721
+ case CSSLOT_CODEDIRECTORY:
722
+ {
723
+ CS_CodeDirectory cdHeader = *((CS_CodeDirectory*)pSlotBase);
724
+ if (LE(cdHeader.length) > 8) {
725
+ pCodeSlots1Data = pSlotBase + LE(cdHeader.hashOffset);
726
+ uCodeSlots1DataLength = LE(cdHeader.nCodeSlots) * cdHeader.hashSize;
727
+ }
728
+ }
729
+ break;
730
+ case CSSLOT_ALTERNATE_CODEDIRECTORIES:
731
+ {
732
+ CS_CodeDirectory cdHeader = *((CS_CodeDirectory*)pSlotBase);
733
+ if (LE(cdHeader.length) > 8) {
734
+ pCodeSlots256Data = pSlotBase + LE(cdHeader.hashOffset);
735
+ uCodeSlots256DataLength = LE(cdHeader.nCodeSlots) * cdHeader.hashSize;
736
+ }
737
+ }
738
+ break;
739
+ default:
740
+ break;
741
+ }
742
+ }
743
+
744
+ return ((NULL != pCodeSlots1Data) && (NULL != pCodeSlots256Data) && uCodeSlots1DataLength > 0 && uCodeSlots256DataLength > 0);
745
+ }