hane 1.0.0 → 1.1.1

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 (381) hide show
  1. package/README.md +32 -32
  2. package/binding.gyp +77 -50
  3. package/deps/win-nodeapi/node_api.def +158 -0
  4. package/deps/win-nodeapi/node_api.lib +0 -0
  5. package/dist/index.js +1 -1
  6. package/package.json +34 -33
  7. package/src/native/addon.cc +247 -207
  8. package/src/native/zsign_driver.cc +87 -87
  9. package/src/native/zsign_driver.h +38 -38
  10. package/vendor/zlib/.cmake-format.yaml +245 -245
  11. package/vendor/zlib/.github/workflows/c-std.yml +230 -230
  12. package/vendor/zlib/.github/workflows/cmake.yml +112 -112
  13. package/vendor/zlib/.github/workflows/configure.yml +136 -136
  14. package/vendor/zlib/.github/workflows/fuzz.yml +25 -25
  15. package/vendor/zlib/.github/workflows/msys-cygwin.yml +77 -77
  16. package/vendor/zlib/BUILD.bazel +134 -134
  17. package/vendor/zlib/CMakeLists.txt +330 -330
  18. package/vendor/zlib/ChangeLog +1621 -1621
  19. package/vendor/zlib/FAQ +367 -367
  20. package/vendor/zlib/INDEX +68 -68
  21. package/vendor/zlib/LICENSE +22 -22
  22. package/vendor/zlib/MODULE.bazel +9 -9
  23. package/vendor/zlib/Makefile.in +419 -419
  24. package/vendor/zlib/README +115 -115
  25. package/vendor/zlib/README-cmake.md +83 -83
  26. package/vendor/zlib/adler32.c +164 -164
  27. package/vendor/zlib/amiga/Makefile.pup +69 -69
  28. package/vendor/zlib/amiga/Makefile.sas +68 -68
  29. package/vendor/zlib/compress.c +75 -75
  30. package/vendor/zlib/configure +966 -966
  31. package/vendor/zlib/contrib/README.contrib +57 -57
  32. package/vendor/zlib/contrib/ada/buffer_demo.adb +106 -106
  33. package/vendor/zlib/contrib/ada/mtest.adb +156 -156
  34. package/vendor/zlib/contrib/ada/read.adb +156 -156
  35. package/vendor/zlib/contrib/ada/readme.txt +65 -65
  36. package/vendor/zlib/contrib/ada/test.adb +463 -463
  37. package/vendor/zlib/contrib/ada/zlib-streams.adb +225 -225
  38. package/vendor/zlib/contrib/ada/zlib-streams.ads +114 -114
  39. package/vendor/zlib/contrib/ada/zlib-thin.adb +142 -142
  40. package/vendor/zlib/contrib/ada/zlib-thin.ads +450 -450
  41. package/vendor/zlib/contrib/ada/zlib.adb +701 -701
  42. package/vendor/zlib/contrib/ada/zlib.ads +328 -328
  43. package/vendor/zlib/contrib/ada/zlib.gpr +20 -20
  44. package/vendor/zlib/contrib/blast/Makefile +8 -8
  45. package/vendor/zlib/contrib/blast/README +4 -4
  46. package/vendor/zlib/contrib/blast/blast.c +466 -466
  47. package/vendor/zlib/contrib/blast/blast.h +83 -83
  48. package/vendor/zlib/contrib/delphi/ZLib.pas +557 -557
  49. package/vendor/zlib/contrib/delphi/ZLibConst.pas +11 -11
  50. package/vendor/zlib/contrib/delphi/readme.txt +76 -76
  51. package/vendor/zlib/contrib/delphi/zlibd32.mak +99 -99
  52. package/vendor/zlib/contrib/gcc_gvmat64/gvmat64.S +574 -574
  53. package/vendor/zlib/contrib/infback9/README +1 -1
  54. package/vendor/zlib/contrib/infback9/infback9.c +603 -603
  55. package/vendor/zlib/contrib/infback9/infback9.h +37 -37
  56. package/vendor/zlib/contrib/infback9/inffix9.h +107 -107
  57. package/vendor/zlib/contrib/infback9/inflate9.h +47 -47
  58. package/vendor/zlib/contrib/infback9/inftree9.c +319 -319
  59. package/vendor/zlib/contrib/infback9/inftree9.h +61 -61
  60. package/vendor/zlib/contrib/iostream/test.cpp +24 -24
  61. package/vendor/zlib/contrib/iostream/zfstream.cpp +329 -329
  62. package/vendor/zlib/contrib/iostream/zfstream.h +128 -128
  63. package/vendor/zlib/contrib/iostream2/zstream.h +307 -307
  64. package/vendor/zlib/contrib/iostream2/zstream_test.cpp +25 -25
  65. package/vendor/zlib/contrib/iostream3/README +35 -35
  66. package/vendor/zlib/contrib/iostream3/TODO +17 -17
  67. package/vendor/zlib/contrib/iostream3/test.cc +50 -50
  68. package/vendor/zlib/contrib/iostream3/zfstream.cc +479 -479
  69. package/vendor/zlib/contrib/iostream3/zfstream.h +466 -466
  70. package/vendor/zlib/contrib/minizip/CMakeLists.txt +380 -380
  71. package/vendor/zlib/contrib/minizip/Makefile +37 -37
  72. package/vendor/zlib/contrib/minizip/Makefile.am +45 -45
  73. package/vendor/zlib/contrib/minizip/MiniZip64_Changes.txt +6 -6
  74. package/vendor/zlib/contrib/minizip/MiniZip64_info.txt +74 -74
  75. package/vendor/zlib/contrib/minizip/configure.ac +32 -32
  76. package/vendor/zlib/contrib/minizip/crypt.h +128 -128
  77. package/vendor/zlib/contrib/minizip/ints.h +57 -57
  78. package/vendor/zlib/contrib/minizip/ioapi.c +231 -231
  79. package/vendor/zlib/contrib/minizip/ioapi.h +183 -183
  80. package/vendor/zlib/contrib/minizip/iowin32.c +448 -448
  81. package/vendor/zlib/contrib/minizip/iowin32.h +28 -28
  82. package/vendor/zlib/contrib/minizip/make_vms.com +25 -25
  83. package/vendor/zlib/contrib/minizip/miniunz.c +647 -647
  84. package/vendor/zlib/contrib/minizip/miniunzip.1 +63 -63
  85. package/vendor/zlib/contrib/minizip/minizip.1 +46 -46
  86. package/vendor/zlib/contrib/minizip/minizip.c +512 -512
  87. package/vendor/zlib/contrib/minizip/minizip.pc.in +12 -12
  88. package/vendor/zlib/contrib/minizip/minizip.pc.txt +13 -13
  89. package/vendor/zlib/contrib/minizip/minizipConfig.cmake.in +35 -35
  90. package/vendor/zlib/contrib/minizip/mztools.c +288 -288
  91. package/vendor/zlib/contrib/minizip/mztools.h +37 -37
  92. package/vendor/zlib/contrib/minizip/skipset.h +361 -361
  93. package/vendor/zlib/contrib/minizip/test/CMakeLists.txt +121 -121
  94. package/vendor/zlib/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in +29 -29
  95. package/vendor/zlib/contrib/minizip/test/add_subdirectory_test.cmake.in +28 -28
  96. package/vendor/zlib/contrib/minizip/test/find_package_test.cmake.in +25 -25
  97. package/vendor/zlib/contrib/minizip/test/test_helper.cm +32 -32
  98. package/vendor/zlib/contrib/minizip/unzip.c +1981 -1981
  99. package/vendor/zlib/contrib/minizip/unzip.h +441 -441
  100. package/vendor/zlib/contrib/minizip/zip.c +2199 -2199
  101. package/vendor/zlib/contrib/minizip/zip.h +370 -370
  102. package/vendor/zlib/contrib/nuget/nuget.csproj +43 -43
  103. package/vendor/zlib/contrib/nuget/nuget.sln +22 -22
  104. package/vendor/zlib/contrib/pascal/example.pas +599 -599
  105. package/vendor/zlib/contrib/pascal/readme.txt +76 -76
  106. package/vendor/zlib/contrib/pascal/zlibd32.mak +99 -99
  107. package/vendor/zlib/contrib/pascal/zlibpas.pas +276 -276
  108. package/vendor/zlib/contrib/puff/Makefile +42 -42
  109. package/vendor/zlib/contrib/puff/README +63 -63
  110. package/vendor/zlib/contrib/puff/puff.c +840 -840
  111. package/vendor/zlib/contrib/puff/puff.h +35 -35
  112. package/vendor/zlib/contrib/puff/pufftest.c +169 -169
  113. package/vendor/zlib/contrib/untgz/Makefile +14 -14
  114. package/vendor/zlib/contrib/untgz/Makefile.msc +17 -17
  115. package/vendor/zlib/contrib/untgz/untgz.c +667 -667
  116. package/vendor/zlib/contrib/vstudio/readme.txt +81 -81
  117. package/vendor/zlib/contrib/vstudio/vc12/miniunz.vcxproj +315 -315
  118. package/vendor/zlib/contrib/vstudio/vc12/minizip.vcxproj +312 -312
  119. package/vendor/zlib/contrib/vstudio/vc12/testzlib.vcxproj +421 -421
  120. package/vendor/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj +315 -315
  121. package/vendor/zlib/contrib/vstudio/vc12/zlib.rc +32 -32
  122. package/vendor/zlib/contrib/vstudio/vc12/zlibstat.vcxproj +458 -458
  123. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.sln +119 -119
  124. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.vcxproj +667 -667
  125. package/vendor/zlib/contrib/vstudio/vc14/miniunz.vcxproj +315 -315
  126. package/vendor/zlib/contrib/vstudio/vc14/minizip.vcxproj +312 -312
  127. package/vendor/zlib/contrib/vstudio/vc14/testzlib.vcxproj +421 -421
  128. package/vendor/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj +315 -315
  129. package/vendor/zlib/contrib/vstudio/vc14/zlib.rc +32 -32
  130. package/vendor/zlib/contrib/vstudio/vc14/zlibstat.vcxproj +458 -458
  131. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.sln +119 -119
  132. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.vcxproj +667 -667
  133. package/vendor/zlib/contrib/vstudio/vc17/miniunz.vcxproj +408 -408
  134. package/vendor/zlib/contrib/vstudio/vc17/minizip.vcxproj +404 -404
  135. package/vendor/zlib/contrib/vstudio/vc17/testzlib.vcxproj +472 -472
  136. package/vendor/zlib/contrib/vstudio/vc17/testzlibdll.vcxproj +408 -408
  137. package/vendor/zlib/contrib/vstudio/vc17/zlib.rc +32 -32
  138. package/vendor/zlib/contrib/vstudio/vc17/zlibstat.vcxproj +601 -601
  139. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.sln +179 -179
  140. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.vcxproj +874 -874
  141. package/vendor/zlib/crc32.c +1049 -1049
  142. package/vendor/zlib/crc32.h +9446 -9446
  143. package/vendor/zlib/deflate.c +2152 -2152
  144. package/vendor/zlib/deflate.h +380 -380
  145. package/vendor/zlib/doc/algorithm.txt +209 -209
  146. package/vendor/zlib/doc/rfc1950.txt +619 -619
  147. package/vendor/zlib/doc/rfc1951.txt +955 -955
  148. package/vendor/zlib/doc/rfc1952.txt +675 -675
  149. package/vendor/zlib/doc/txtvsbin.txt +107 -107
  150. package/vendor/zlib/examples/README.examples +54 -54
  151. package/vendor/zlib/examples/enough.c +597 -597
  152. package/vendor/zlib/examples/fitblk.c +233 -233
  153. package/vendor/zlib/examples/gun.c +702 -702
  154. package/vendor/zlib/examples/gzappend.c +504 -504
  155. package/vendor/zlib/examples/gzjoin.c +449 -449
  156. package/vendor/zlib/examples/gzlog.c +1061 -1061
  157. package/vendor/zlib/examples/gzlog.h +91 -91
  158. package/vendor/zlib/examples/gznorm.c +474 -474
  159. package/vendor/zlib/examples/zlib_how.html +549 -549
  160. package/vendor/zlib/examples/zpipe.c +209 -209
  161. package/vendor/zlib/examples/zran.c +550 -550
  162. package/vendor/zlib/examples/zran.h +53 -53
  163. package/vendor/zlib/gzclose.c +23 -23
  164. package/vendor/zlib/gzguts.h +215 -215
  165. package/vendor/zlib/gzlib.c +585 -585
  166. package/vendor/zlib/gzread.c +603 -603
  167. package/vendor/zlib/gzwrite.c +631 -631
  168. package/vendor/zlib/infback.c +628 -628
  169. package/vendor/zlib/inffast.c +320 -320
  170. package/vendor/zlib/inffast.h +11 -11
  171. package/vendor/zlib/inffixed.h +94 -94
  172. package/vendor/zlib/inflate.c +1526 -1526
  173. package/vendor/zlib/inflate.h +126 -126
  174. package/vendor/zlib/inftrees.c +299 -299
  175. package/vendor/zlib/inftrees.h +62 -62
  176. package/vendor/zlib/make_vms.com +867 -867
  177. package/vendor/zlib/msdos/Makefile.bor +115 -115
  178. package/vendor/zlib/msdos/Makefile.dj2 +104 -104
  179. package/vendor/zlib/msdos/Makefile.emx +69 -69
  180. package/vendor/zlib/msdos/Makefile.msc +112 -112
  181. package/vendor/zlib/msdos/Makefile.tc +100 -100
  182. package/vendor/zlib/nintendods/Makefile +126 -126
  183. package/vendor/zlib/nintendods/README +5 -5
  184. package/vendor/zlib/old/Makefile.emx +69 -69
  185. package/vendor/zlib/old/Makefile.riscos +151 -151
  186. package/vendor/zlib/old/README +3 -3
  187. package/vendor/zlib/old/descrip.mms +48 -48
  188. package/vendor/zlib/old/os2/Makefile.os2 +136 -136
  189. package/vendor/zlib/old/os2/zlib.def +51 -51
  190. package/vendor/zlib/old/visual-basic.txt +160 -160
  191. package/vendor/zlib/os400/README400 +48 -48
  192. package/vendor/zlib/os400/bndsrc +133 -133
  193. package/vendor/zlib/os400/make.sh +366 -366
  194. package/vendor/zlib/os400/zlib.inc +531 -531
  195. package/vendor/zlib/qnx/package.qpg +141 -141
  196. package/vendor/zlib/test/CMakeLists.txt +265 -265
  197. package/vendor/zlib/test/add_subdirectory_exclude_test.cmake.in +29 -29
  198. package/vendor/zlib/test/add_subdirectory_test.cmake.in +28 -28
  199. package/vendor/zlib/test/example.c +552 -552
  200. package/vendor/zlib/test/find_package_test.cmake.in +26 -26
  201. package/vendor/zlib/test/infcover.c +672 -672
  202. package/vendor/zlib/test/minigzip.c +590 -590
  203. package/vendor/zlib/treebuild.xml +116 -116
  204. package/vendor/zlib/trees.c +1119 -1119
  205. package/vendor/zlib/trees.h +128 -128
  206. package/vendor/zlib/uncompr.c +85 -85
  207. package/vendor/zlib/watcom/watcom_f.mak +43 -43
  208. package/vendor/zlib/watcom/watcom_l.mak +43 -43
  209. package/vendor/zlib/win32/DLL_FAQ.txt +381 -381
  210. package/vendor/zlib/win32/Makefile.bor +109 -109
  211. package/vendor/zlib/win32/Makefile.gcc +177 -177
  212. package/vendor/zlib/win32/Makefile.msc +159 -159
  213. package/vendor/zlib/win32/README-WIN32.txt +103 -103
  214. package/vendor/zlib/win32/VisualC.txt +3 -3
  215. package/vendor/zlib/win32/zlib1.rc +37 -37
  216. package/vendor/zlib/zconf.h.in +544 -544
  217. package/vendor/zlib/zlib.3 +149 -149
  218. package/vendor/zlib/zlib.h +1957 -1957
  219. package/vendor/zlib/zlib.map +103 -103
  220. package/vendor/zlib/zlib.pc.cmakein +13 -13
  221. package/vendor/zlib/zlib.pc.in +13 -13
  222. package/vendor/zlib/zlibConfig.cmake.in +26 -26
  223. package/vendor/zlib/zutil.c +299 -299
  224. package/vendor/zlib/zutil.h +257 -257
  225. package/vendor/zsign/.gitattributes +3 -3
  226. package/vendor/zsign/LICENSE +20 -20
  227. package/vendor/zsign/README.md +142 -142
  228. package/vendor/zsign/build/linux/Makefile +43 -43
  229. package/vendor/zsign/build/macos/Makefile +43 -43
  230. package/vendor/zsign/build/windows/vs2022/include/minizip/crypt.h +128 -128
  231. package/vendor/zsign/build/windows/vs2022/include/minizip/ioapi.h +216 -216
  232. package/vendor/zsign/build/windows/vs2022/include/minizip/iowin32.h +28 -28
  233. package/vendor/zsign/build/windows/vs2022/include/minizip/mztools.h +37 -37
  234. package/vendor/zsign/build/windows/vs2022/include/minizip/unzip.h +437 -437
  235. package/vendor/zsign/build/windows/vs2022/include/minizip/zip.h +364 -364
  236. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_EPILOGUE.H +22 -22
  237. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_PROLOGUE.H +26 -26
  238. package/vendor/zsign/build/windows/vs2022/include/openssl/aes.h +111 -111
  239. package/vendor/zsign/build/windows/vs2022/include/openssl/applink.c +153 -153
  240. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1_mac.h +10 -10
  241. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1err.h +142 -142
  242. package/vendor/zsign/build/windows/vs2022/include/openssl/async.h +104 -104
  243. package/vendor/zsign/build/windows/vs2022/include/openssl/asyncerr.h +29 -29
  244. package/vendor/zsign/build/windows/vs2022/include/openssl/bioerr.h +72 -72
  245. package/vendor/zsign/build/windows/vs2022/include/openssl/blowfish.h +78 -78
  246. package/vendor/zsign/build/windows/vs2022/include/openssl/bn.h +590 -590
  247. package/vendor/zsign/build/windows/vs2022/include/openssl/bnerr.h +47 -47
  248. package/vendor/zsign/build/windows/vs2022/include/openssl/buffer.h +62 -62
  249. package/vendor/zsign/build/windows/vs2022/include/openssl/buffererr.h +25 -25
  250. package/vendor/zsign/build/windows/vs2022/include/openssl/camellia.h +117 -117
  251. package/vendor/zsign/build/windows/vs2022/include/openssl/cast.h +71 -71
  252. package/vendor/zsign/build/windows/vs2022/include/openssl/cmac.h +52 -52
  253. package/vendor/zsign/build/windows/vs2022/include/openssl/cmp_util.h +56 -56
  254. package/vendor/zsign/build/windows/vs2022/include/openssl/cmperr.h +131 -131
  255. package/vendor/zsign/build/windows/vs2022/include/openssl/cmserr.h +125 -125
  256. package/vendor/zsign/build/windows/vs2022/include/openssl/comperr.h +38 -38
  257. package/vendor/zsign/build/windows/vs2022/include/openssl/conf_api.h +46 -46
  258. package/vendor/zsign/build/windows/vs2022/include/openssl/conferr.h +52 -52
  259. package/vendor/zsign/build/windows/vs2022/include/openssl/conftypes.h +44 -44
  260. package/vendor/zsign/build/windows/vs2022/include/openssl/core.h +236 -236
  261. package/vendor/zsign/build/windows/vs2022/include/openssl/core_dispatch.h +1022 -1022
  262. package/vendor/zsign/build/windows/vs2022/include/openssl/core_object.h +41 -41
  263. package/vendor/zsign/build/windows/vs2022/include/openssl/crmferr.h +50 -50
  264. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr.h +56 -56
  265. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr_legacy.h +1466 -1466
  266. package/vendor/zsign/build/windows/vs2022/include/openssl/cterr.h +45 -45
  267. package/vendor/zsign/build/windows/vs2022/include/openssl/decoder.h +133 -133
  268. package/vendor/zsign/build/windows/vs2022/include/openssl/decodererr.h +28 -28
  269. package/vendor/zsign/build/windows/vs2022/include/openssl/des.h +211 -211
  270. package/vendor/zsign/build/windows/vs2022/include/openssl/dh.h +339 -339
  271. package/vendor/zsign/build/windows/vs2022/include/openssl/dherr.h +59 -59
  272. package/vendor/zsign/build/windows/vs2022/include/openssl/dsa.h +280 -280
  273. package/vendor/zsign/build/windows/vs2022/include/openssl/dsaerr.h +44 -44
  274. package/vendor/zsign/build/windows/vs2022/include/openssl/dtls1.h +57 -57
  275. package/vendor/zsign/build/windows/vs2022/include/openssl/e_os2.h +310 -310
  276. package/vendor/zsign/build/windows/vs2022/include/openssl/e_ostime.h +38 -38
  277. package/vendor/zsign/build/windows/vs2022/include/openssl/ebcdic.h +39 -39
  278. package/vendor/zsign/build/windows/vs2022/include/openssl/ec.h +1588 -1588
  279. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdh.h +10 -10
  280. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdsa.h +10 -10
  281. package/vendor/zsign/build/windows/vs2022/include/openssl/ecerr.h +104 -104
  282. package/vendor/zsign/build/windows/vs2022/include/openssl/encoder.h +124 -124
  283. package/vendor/zsign/build/windows/vs2022/include/openssl/encodererr.h +28 -28
  284. package/vendor/zsign/build/windows/vs2022/include/openssl/engine.h +833 -833
  285. package/vendor/zsign/build/windows/vs2022/include/openssl/engineerr.h +63 -63
  286. package/vendor/zsign/build/windows/vs2022/include/openssl/esserr.h +32 -32
  287. package/vendor/zsign/build/windows/vs2022/include/openssl/evp.h +2231 -2231
  288. package/vendor/zsign/build/windows/vs2022/include/openssl/evperr.h +140 -140
  289. package/vendor/zsign/build/windows/vs2022/include/openssl/fips_names.h +50 -50
  290. package/vendor/zsign/build/windows/vs2022/include/openssl/hmac.h +62 -62
  291. package/vendor/zsign/build/windows/vs2022/include/openssl/hpke.h +169 -169
  292. package/vendor/zsign/build/windows/vs2022/include/openssl/http.h +118 -118
  293. package/vendor/zsign/build/windows/vs2022/include/openssl/httperr.h +56 -56
  294. package/vendor/zsign/build/windows/vs2022/include/openssl/idea.h +82 -82
  295. package/vendor/zsign/build/windows/vs2022/include/openssl/indicator.h +31 -31
  296. package/vendor/zsign/build/windows/vs2022/include/openssl/kdf.h +138 -138
  297. package/vendor/zsign/build/windows/vs2022/include/openssl/kdferr.h +16 -16
  298. package/vendor/zsign/build/windows/vs2022/include/openssl/macros.h +338 -338
  299. package/vendor/zsign/build/windows/vs2022/include/openssl/md2.h +56 -56
  300. package/vendor/zsign/build/windows/vs2022/include/openssl/md4.h +63 -63
  301. package/vendor/zsign/build/windows/vs2022/include/openssl/md5.h +62 -62
  302. package/vendor/zsign/build/windows/vs2022/include/openssl/mdc2.h +55 -55
  303. package/vendor/zsign/build/windows/vs2022/include/openssl/modes.h +219 -219
  304. package/vendor/zsign/build/windows/vs2022/include/openssl/obj_mac.h +5820 -5820
  305. package/vendor/zsign/build/windows/vs2022/include/openssl/objects.h +184 -184
  306. package/vendor/zsign/build/windows/vs2022/include/openssl/objectserr.h +28 -28
  307. package/vendor/zsign/build/windows/vs2022/include/openssl/ocsperr.h +53 -53
  308. package/vendor/zsign/build/windows/vs2022/include/openssl/opensslconf.h +17 -17
  309. package/vendor/zsign/build/windows/vs2022/include/openssl/ossl_typ.h +16 -16
  310. package/vendor/zsign/build/windows/vs2022/include/openssl/param_build.h +63 -63
  311. package/vendor/zsign/build/windows/vs2022/include/openssl/params.h +160 -160
  312. package/vendor/zsign/build/windows/vs2022/include/openssl/pem.h +543 -543
  313. package/vendor/zsign/build/windows/vs2022/include/openssl/pem2.h +19 -19
  314. package/vendor/zsign/build/windows/vs2022/include/openssl/pemerr.h +58 -58
  315. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs12err.h +46 -46
  316. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs7err.h +63 -63
  317. package/vendor/zsign/build/windows/vs2022/include/openssl/prov_ssl.h +38 -38
  318. package/vendor/zsign/build/windows/vs2022/include/openssl/proverr.h +162 -162
  319. package/vendor/zsign/build/windows/vs2022/include/openssl/provider.h +66 -66
  320. package/vendor/zsign/build/windows/vs2022/include/openssl/quic.h +70 -70
  321. package/vendor/zsign/build/windows/vs2022/include/openssl/rand.h +125 -125
  322. package/vendor/zsign/build/windows/vs2022/include/openssl/randerr.h +69 -69
  323. package/vendor/zsign/build/windows/vs2022/include/openssl/rc2.h +68 -68
  324. package/vendor/zsign/build/windows/vs2022/include/openssl/rc4.h +47 -47
  325. package/vendor/zsign/build/windows/vs2022/include/openssl/rc5.h +79 -79
  326. package/vendor/zsign/build/windows/vs2022/include/openssl/ripemd.h +59 -59
  327. package/vendor/zsign/build/windows/vs2022/include/openssl/rsa.h +615 -615
  328. package/vendor/zsign/build/windows/vs2022/include/openssl/rsaerr.h +107 -107
  329. package/vendor/zsign/build/windows/vs2022/include/openssl/seed.h +113 -113
  330. package/vendor/zsign/build/windows/vs2022/include/openssl/self_test.h +98 -98
  331. package/vendor/zsign/build/windows/vs2022/include/openssl/sha.h +139 -139
  332. package/vendor/zsign/build/windows/vs2022/include/openssl/srtp.h +68 -68
  333. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl2.h +30 -30
  334. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl3.h +357 -357
  335. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr.h +379 -379
  336. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr_legacy.h +467 -467
  337. package/vendor/zsign/build/windows/vs2022/include/openssl/stack.h +90 -90
  338. package/vendor/zsign/build/windows/vs2022/include/openssl/store.h +377 -377
  339. package/vendor/zsign/build/windows/vs2022/include/openssl/storeerr.h +49 -49
  340. package/vendor/zsign/build/windows/vs2022/include/openssl/symhacks.h +39 -39
  341. package/vendor/zsign/build/windows/vs2022/include/openssl/thread.h +31 -31
  342. package/vendor/zsign/build/windows/vs2022/include/openssl/tls1.h +1220 -1220
  343. package/vendor/zsign/build/windows/vs2022/include/openssl/trace.h +320 -320
  344. package/vendor/zsign/build/windows/vs2022/include/openssl/ts.h +522 -522
  345. package/vendor/zsign/build/windows/vs2022/include/openssl/tserr.h +67 -67
  346. package/vendor/zsign/build/windows/vs2022/include/openssl/txt_db.h +63 -63
  347. package/vendor/zsign/build/windows/vs2022/include/openssl/types.h +245 -245
  348. package/vendor/zsign/build/windows/vs2022/include/openssl/uierr.h +38 -38
  349. package/vendor/zsign/build/windows/vs2022/include/openssl/whrlpool.h +62 -62
  350. package/vendor/zsign/build/windows/vs2022/include/openssl/x509err.h +70 -70
  351. package/vendor/zsign/build/windows/vs2022/include/openssl/x509v3err.h +96 -96
  352. package/vendor/zsign/src/archo.cpp +742 -742
  353. package/vendor/zsign/src/archo.h +61 -61
  354. package/vendor/zsign/src/bundle.cpp +589 -589
  355. package/vendor/zsign/src/bundle.h +46 -46
  356. package/vendor/zsign/src/common/archive.cpp +246 -246
  357. package/vendor/zsign/src/common/archive.h +22 -22
  358. package/vendor/zsign/src/common/common.h +56 -56
  359. package/vendor/zsign/src/common/fs.cpp +573 -573
  360. package/vendor/zsign/src/common/fs.h +50 -50
  361. package/vendor/zsign/src/common/log.cpp +145 -145
  362. package/vendor/zsign/src/common/log.h +37 -37
  363. package/vendor/zsign/src/common/mach-o.h +585 -585
  364. package/vendor/zsign/src/common/sha.cpp +133 -133
  365. package/vendor/zsign/src/common/sha.h +24 -24
  366. package/vendor/zsign/src/common/timer.cpp +28 -28
  367. package/vendor/zsign/src/common/timer.h +17 -17
  368. package/vendor/zsign/src/common/util.cpp +185 -185
  369. package/vendor/zsign/src/common/util.h +25 -25
  370. package/vendor/zsign/src/macho.cpp +273 -273
  371. package/vendor/zsign/src/macho.h +38 -38
  372. package/vendor/zsign/src/openssl.cpp +698 -698
  373. package/vendor/zsign/src/openssl.h +71 -71
  374. package/vendor/zsign/src/signing.cpp +745 -745
  375. package/vendor/zsign/src/signing.h +59 -59
  376. package/vendor/zsign/src/zsign.cpp +317 -317
  377. package/vendor/zsign/test/dylib/demo/Makefile +12 -12
  378. package/vendor/zsign/test/dylib/demo/control +9 -9
  379. package/vendor/zsign/test/dylib/demo/demo.m +21 -21
  380. package/vendor/zsign/test/linux/test.sh +19 -19
  381. package/vendor/zsign/test/macos/test.sh +19 -19
@@ -1,361 +1,361 @@
1
- /* skipset.h -- set operations using a skiplist
2
- // Copyright (C) 2024 Mark Adler
3
- // See MiniZip_info.txt for the license.
4
-
5
- // This implements a skiplist set, i.e. just keys, no data, with ~O(log n) time
6
- // insert and search operations. The application defines the type of a key, and
7
- // provides a function to compare two keys.
8
-
9
- // This header is not definitions of functions found in another source file --
10
- // it creates the set functions, with the application's key type, right where
11
- // the #include is. Before this header is #included, these must be defined:
12
- //
13
- // 1. A macro or typedef for set_key_t, the type of a key.
14
- // 2. A macro or function set_cmp(a, b) to compare two keys. The return values
15
- // are < 0 for a < b, 0 for a == b, and > 0 for a > b.
16
- // 3. A macro or function set_drop(s, k) to release the key k's resources, if
17
- // any, when doing a set_end() or set_clear(). s is a pointer to the set
18
- // that key is in, for use with set_free() if desired.
19
- //
20
- // Example usage:
21
- //
22
- // typedef int set_key_t;
23
- // #define set_cmp(a, b) ((a) < (b) ? -1 : (a) == (b) ? 0 : 1)
24
- // #define set_drop(s, k)
25
- // #include "skipset.h"
26
- //
27
- // int test(void) { // return 0: good, 1: bad, -1: out of memory
28
- // set_t set;
29
- // if (setjmp(set.env))
30
- // return -1;
31
- // set_start(&set);
32
- // set_insert(&set, 2);
33
- // set_insert(&set, 1);
34
- // set_insert(&set, 7);
35
- // int bad = !set_found(&set, 2);
36
- // bad = bad || set_found(&set, 5);
37
- // set_end(&set);
38
- // return bad;
39
- // }
40
- //
41
- // Interface summary (see more details below):
42
- // - set_t is the type of the set being operated on (a set_t pointer is passed)
43
- // - set_start() initializes a new, empty set (initialize set.env first)
44
- // - set_insert() inserts a new key into the set, or not if it's already there
45
- // - set_found() determines whether or not a key is in the set
46
- // - set_end() ends the use of the set, freeing all memory
47
- // - set_clear() empties the set, equivalent to set_end() and then set_start()
48
- // - set_ok() checks if set appears to be usable, i.e. started and not ended
49
- //
50
- // Auxiliary functions available to the application:
51
- // - set_alloc() allocates memory with optional tracking (#define SET_TRACK)
52
- // - set_free() deallocates memory allocated by set_alloc()
53
- // - set_rand() returns 32 random bits (seeded by set_start()) */
54
-
55
- #ifndef SKIPSET_H
56
- #define SKIPSET_H
57
-
58
- #include <stdlib.h> /* realloc(), free(), NULL, size_t */
59
- #include <stddef.h> /* ptrdiff_t */
60
- #include <setjmp.h> /* jmp_buf, longjmp() */
61
- #include <errno.h> /* ENOMEM */
62
- #include <time.h> /* time(), clock() */
63
- #include <assert.h> /* assert.h */
64
- #include "ints.h" /* i16_t, ui32_t, ui64_t */
65
-
66
- /* Structures and functions below noted as "--private--" should not be used by
67
- // the application. set_t is partially private and partially public -- see the
68
- // comments there.
69
-
70
- // There is no POSIX random() in MSVC, and rand() is awful. For portability, we
71
- // cannot rely on a library function for random numbers. Instead we use the
72
- // fast and effective algorithm below, invented by Melissa O'Neill.
73
-
74
- // *Really* minimal PCG32 code / (c) 2014 M.E. O'Neill / www.pcg-random.org
75
- // Licensed under Apache License 2.0 (NO WARRANTY, etc. see website)
76
- // --private-- Random number generator state. */
77
- typedef struct {
78
- ui64_t state; /* 64-bit generator state */
79
- ui64_t inc; /* 63-bit sequence id */
80
- } set_rand_t;
81
- /* --private-- Initialize the state *gen using seed and seq. seed seeds the
82
- // advancing 64-bit state. seq is a sequence selection constant. */
83
- void set_seed(set_rand_t *gen, ui64_t seed, ui64_t seq) {
84
- gen->inc = (seq << 1) | 1;
85
- gen->state = (seed + gen->inc) * 6364136223846793005ULL + gen->inc;
86
- }
87
- /* Return 32 random bits, advancing the state *gen. */
88
- ui32_t set_rand(set_rand_t *gen) {
89
- ui64_t state = gen->state;
90
- gen->state = state * 6364136223846793005ULL + gen->inc;
91
- ui32_t mix = (ui32_t)(((state >> 18) ^ state) >> 27);
92
- int rot = state >> 59;
93
- return (mix >> rot) | (mix << ((-rot) & 31));
94
- }
95
- /* End of PCG32 code. */
96
-
97
- /* --private-- Linked-list node. */
98
- typedef struct set_node_s set_node_t;
99
- struct set_node_s {
100
- set_key_t key; /* the key (not used for head or path) */
101
- i16_t size; /* number of allocated pointers in right[] */
102
- i16_t fill; /* number of pointers in right[] filled in */
103
- set_node_t **right; /* pointer for each level, each to the right */
104
- };
105
-
106
- /* A set. The application sets env, may use gen with set_rand(), and may read
107
- // allocs and memory. The remaining variables are --private-- . */
108
- typedef struct set_s {
109
- set_node_t *head; /* skiplist head -- no key, just links */
110
- set_node_t *path; /* right[] is path to key from set_found() */
111
- set_node_t *node; /* node under construction, in case of longjmp() */
112
- i16_t depth; /* maximum depth of the skiplist */
113
- ui64_t ran; /* a precious trove of random bits */
114
- set_rand_t gen; /* random number generator state */
115
- jmp_buf env; /* setjmp() environment for allocation errors */
116
- #ifdef SET_TRACK
117
- size_t allocs; /* number of allocations */
118
- size_t memory; /* total amount of allocated memory (>= requests) */
119
- #endif
120
- } set_t;
121
-
122
- /* Memory allocation and deallocation. set_alloc(set, ptr, size) returns a
123
- // pointer to an allocation of size bytes if ptr is NULL, or the previous
124
- // allocation ptr resized to size bytes. set_alloc() will never return NULL.
125
- // set_free(set, ptr) frees an allocation created by set_alloc(). These may be
126
- // used by the application. e.g. if allocation tracking is desired. */
127
- #ifdef SET_TRACK
128
- /* Track the number of allocations and the total backing memory size. */
129
- # if defined(_WIN32)
130
- # include <malloc.h>
131
- # define SET_ALLOC_SIZE(ptr) _msize(ptr)
132
- # elif defined(__MACH__)
133
- # include <malloc/malloc.h>
134
- # define SET_ALLOC_SIZE(ptr) malloc_size(ptr)
135
- # elif defined(__linux__)
136
- # include <malloc.h>
137
- # define SET_ALLOC_SIZE(ptr) malloc_usable_size(ptr)
138
- # elif defined(__FreeBSD__)
139
- # include <malloc_np.h>
140
- # define SET_ALLOC_SIZE(ptr) malloc_usable_size(ptr)
141
- # elif defined(__NetBSD__)
142
- # include <jemalloc/jemalloc.h>
143
- # define SET_ALLOC_SIZE(ptr) malloc_usable_size(ptr)
144
- # else // e.g. OpenBSD
145
- # define SET_ALLOC_SIZE(ptr) 0
146
- # endif
147
- // With tracking.
148
- void *set_alloc(set_t *set, void *ptr, size_t size) {
149
- size_t had = ptr == NULL ? 0 : SET_ALLOC_SIZE(ptr);
150
- void *mem = realloc(ptr, size);
151
- if (mem == NULL)
152
- longjmp(set->env, ENOMEM);
153
- set->allocs += ptr == NULL;
154
- set->memory += SET_ALLOC_SIZE(mem) - had;
155
- return mem;
156
- }
157
- void set_free(set_t *set, void *ptr) {
158
- if (ptr != NULL) {
159
- set->allocs--;
160
- set->memory -= SET_ALLOC_SIZE(ptr);
161
- free(ptr);
162
- }
163
- }
164
- #else
165
- /* Without tracking. */
166
- void *set_alloc(set_t *set, void *ptr, size_t size) {
167
- void *mem = realloc(ptr, size);
168
- if (mem == NULL)
169
- longjmp(set->env, ENOMEM);
170
- return mem;
171
- }
172
- void set_free(set_t *set, void *ptr) {
173
- (void)set;
174
- free(ptr);
175
- }
176
- #endif
177
-
178
- /* --private-- Grow node's array right[] as needed to be able to hold at least
179
- // want links. If fill is true, assure that the first want links are filled in,
180
- // setting them to set->head if not previously filled in. Otherwise it is
181
- // assumed that the first want links are about to be filled in. */
182
- void set_grow(set_t *set, set_node_t *node, int want, int fill) {
183
- if (node->size < want) {
184
- int more = node->size ? node->size : 1;
185
- while (more < want)
186
- more <<= 1;
187
- node->right = set_alloc(set, node->right, more * sizeof(set_node_t *));
188
- node->size = (i16_t)more;
189
- }
190
- int i;
191
- if (fill)
192
- for (i = node->fill; i < want; i++)
193
- node->right[i] = set->head;
194
- node->fill = (i16_t)want;
195
- }
196
-
197
- /* --private-- Return a new node. key is left uninitialized. */
198
- set_node_t *set_node(set_t *set) {
199
- set_node_t *node = set_alloc(set, NULL, sizeof(set_node_t));
200
- node->size = 0;
201
- node->fill = 0;
202
- node->right = NULL;
203
- return node;
204
- }
205
-
206
- /* --private-- Free the list linked from head, along with the keys. */
207
- void set_sweep(set_t *set) {
208
- set_node_t *step = set->head->right[0];
209
- while (step != set->head) {
210
- set_node_t *next = step->right[0]; /* save link to next node */
211
- set_drop(set, step->key);
212
- set_free(set, step->right);
213
- set_free(set, step);
214
- step = next;
215
- }
216
- }
217
-
218
- /* Initialize a new set. set->env must be initialized using setjmp() before
219
- // set_start() is called. A longjmp(set->env, ENOMEM) will be used to handle a
220
- // memory allocation failure during any of the operations. (See setjmp.h and
221
- // errno.h.) The set can still be used if this happens, assuming that it didn't
222
- // happen during set_start(). Whether set_start() completed or not, set_end()
223
- // can be used to free the set's memory after a longjmp(). */
224
- void set_start(set_t *set) {
225
- #ifdef SET_TRACK
226
- set->allocs = 0;
227
- set->memory = 0;
228
- #endif
229
- set->head = set->path = set->node = NULL; /* in case set_node() fails */
230
- set->path = set_node(set);
231
- set->head = set_node(set);
232
- set_grow(set, set->head, 1, 1); /* one link back to head for an empty set */
233
- *(unsigned char *)&set->head->key = 137; /* set id */
234
- set->depth = 0;
235
- set_seed(&set->gen, ((ui64_t)(ptrdiff_t)set << 32) ^
236
- ((ui64_t)time(NULL) << 12) ^ clock(), 0);
237
- set->ran = 1;
238
- }
239
-
240
- /* Return true if *set appears to be in a usable state. If *set has been zeroed
241
- // out, then set_ok(set) will be false and set_end(set) will be safe. */
242
- int set_ok(set_t *set) {
243
- return set->head != NULL &&
244
- set->head->right != NULL &&
245
- *(unsigned char *)&set->head->key == 137;
246
- }
247
-
248
- /* Empty the set. This frees the memory used for the previous set contents.
249
- // After set_clear(), *set is ready for use, as if after a set_start(). */
250
- void set_clear(set_t *set) {
251
- assert(set_ok(set) && "improper use");
252
-
253
- /* Free all the keys and their nodes. */
254
- set_sweep(set);
255
-
256
- /* Leave the head and path allocations as is. Clear their contents, with
257
- // head pointing to itself and setting depth to zero, for an empty set. */
258
- set->head->right[0] = set->head;
259
- set->head->fill = 1;
260
- set->path->fill = 0;
261
- set->depth = 0;
262
- }
263
-
264
- /* Done using the set -- free all allocations. The only operation on *set
265
- // permitted after this is set_start(). Though another set_end() would do no
266
- // harm. This can be done at any time after a set_start(), or after a longjmp()
267
- // on any allocation failure, including during a set_start(). */
268
- void set_end(set_t *set) {
269
- if (set->head != NULL) {
270
- /* Empty the set and free the head node. */
271
- if (set->head->right != NULL) {
272
- set_sweep(set);
273
- set_free(set, set->head->right);
274
- }
275
- set_free(set, set->head);
276
- set->head = NULL;
277
- }
278
- if (set->path != NULL) {
279
- /* Free the path work area. */
280
- set_free(set, set->path->right);
281
- set_free(set, set->path);
282
- set->path = NULL;
283
- }
284
- if (set->node != NULL) {
285
- /* Free the node that was under construction when longjmp() hit. */
286
- set_drop(set, set->node->key);
287
- set_free(set, set->node->right);
288
- set_free(set, set->node);
289
- set->node = NULL;
290
- }
291
- }
292
-
293
- /* Look for key. Return 1 if found or 0 if not. This also puts the path to get
294
- // there in set->path, for use by set_insert(). */
295
- int set_found(set_t *set, set_key_t key) {
296
- assert(set_ok(set) && "improper use");
297
-
298
- /* Start at depth and work down and right as determined by key comparisons. */
299
- set_node_t *head = set->head, *here = head;
300
- int i = set->depth;
301
- set_grow(set, set->path, i + 1, 0);
302
- do {
303
- while (here->right[i] != head &&
304
- set_cmp(here->right[i]->key, key) < 0)
305
- here = here->right[i];
306
- set->path->right[i] = here;
307
- } while (i--);
308
-
309
- /* See if the key matches. */
310
- here = here->right[0];
311
- return here != head && set_cmp(here->key, key) == 0;
312
- }
313
-
314
- /* Insert the key key. Return 0 on success, or 1 if key is already in the set. */
315
- int set_insert(set_t *set, set_key_t key) {
316
- assert(set_ok(set) && "improper use");
317
-
318
- if (set_found(set, key))
319
- /* That key is already in the set. */
320
- return 1;
321
-
322
- /* Randomly generate a new level-- level 0 with probability 1/2, 1 with
323
- // probability 1/4, 2 with probability 1/8, etc. */
324
- int level = 0;
325
- for (;;) {
326
- if (set->ran == 1)
327
- /* Ran out. Get another 32 random bits. */
328
- set->ran = set_rand(&set->gen) | (1ULL << 32);
329
- int bit = set->ran & 1;
330
- set->ran >>= 1;
331
- if (bit)
332
- break;
333
- assert(level < 32767 &&
334
- "Overhead, without any fuss, the stars were going out.");
335
- level++;
336
- }
337
- if (level > set->depth) {
338
- /* The maximum depth is now deeper. Update the structures. */
339
- set_grow(set, set->path, level + 1, 1);
340
- set_grow(set, set->head, level + 1, 1);
341
- set->depth = (i16_t)level;
342
- }
343
-
344
- /* Make a new node for the provided key, and insert it in the lists up to
345
- // and including level. */
346
- set->node = set_node(set);
347
- set->node->key = key;
348
- set_grow(set, set->node, level + 1, 0);
349
- int i;
350
- for (i = 0; i <= level; i++) {
351
- set->node->right[i] = set->path->right[i]->right[i];
352
- set->path->right[i]->right[i] = set->node;
353
- }
354
- set->node = NULL;
355
- return 0;
356
- }
357
-
358
- #else
359
- #error ** another skiplist set already created here
360
- /* Would need to implement a prefix in order to support multiple sets. */
361
- #endif
1
+ /* skipset.h -- set operations using a skiplist
2
+ // Copyright (C) 2024 Mark Adler
3
+ // See MiniZip_info.txt for the license.
4
+
5
+ // This implements a skiplist set, i.e. just keys, no data, with ~O(log n) time
6
+ // insert and search operations. The application defines the type of a key, and
7
+ // provides a function to compare two keys.
8
+
9
+ // This header is not definitions of functions found in another source file --
10
+ // it creates the set functions, with the application's key type, right where
11
+ // the #include is. Before this header is #included, these must be defined:
12
+ //
13
+ // 1. A macro or typedef for set_key_t, the type of a key.
14
+ // 2. A macro or function set_cmp(a, b) to compare two keys. The return values
15
+ // are < 0 for a < b, 0 for a == b, and > 0 for a > b.
16
+ // 3. A macro or function set_drop(s, k) to release the key k's resources, if
17
+ // any, when doing a set_end() or set_clear(). s is a pointer to the set
18
+ // that key is in, for use with set_free() if desired.
19
+ //
20
+ // Example usage:
21
+ //
22
+ // typedef int set_key_t;
23
+ // #define set_cmp(a, b) ((a) < (b) ? -1 : (a) == (b) ? 0 : 1)
24
+ // #define set_drop(s, k)
25
+ // #include "skipset.h"
26
+ //
27
+ // int test(void) { // return 0: good, 1: bad, -1: out of memory
28
+ // set_t set;
29
+ // if (setjmp(set.env))
30
+ // return -1;
31
+ // set_start(&set);
32
+ // set_insert(&set, 2);
33
+ // set_insert(&set, 1);
34
+ // set_insert(&set, 7);
35
+ // int bad = !set_found(&set, 2);
36
+ // bad = bad || set_found(&set, 5);
37
+ // set_end(&set);
38
+ // return bad;
39
+ // }
40
+ //
41
+ // Interface summary (see more details below):
42
+ // - set_t is the type of the set being operated on (a set_t pointer is passed)
43
+ // - set_start() initializes a new, empty set (initialize set.env first)
44
+ // - set_insert() inserts a new key into the set, or not if it's already there
45
+ // - set_found() determines whether or not a key is in the set
46
+ // - set_end() ends the use of the set, freeing all memory
47
+ // - set_clear() empties the set, equivalent to set_end() and then set_start()
48
+ // - set_ok() checks if set appears to be usable, i.e. started and not ended
49
+ //
50
+ // Auxiliary functions available to the application:
51
+ // - set_alloc() allocates memory with optional tracking (#define SET_TRACK)
52
+ // - set_free() deallocates memory allocated by set_alloc()
53
+ // - set_rand() returns 32 random bits (seeded by set_start()) */
54
+
55
+ #ifndef SKIPSET_H
56
+ #define SKIPSET_H
57
+
58
+ #include <stdlib.h> /* realloc(), free(), NULL, size_t */
59
+ #include <stddef.h> /* ptrdiff_t */
60
+ #include <setjmp.h> /* jmp_buf, longjmp() */
61
+ #include <errno.h> /* ENOMEM */
62
+ #include <time.h> /* time(), clock() */
63
+ #include <assert.h> /* assert.h */
64
+ #include "ints.h" /* i16_t, ui32_t, ui64_t */
65
+
66
+ /* Structures and functions below noted as "--private--" should not be used by
67
+ // the application. set_t is partially private and partially public -- see the
68
+ // comments there.
69
+
70
+ // There is no POSIX random() in MSVC, and rand() is awful. For portability, we
71
+ // cannot rely on a library function for random numbers. Instead we use the
72
+ // fast and effective algorithm below, invented by Melissa O'Neill.
73
+
74
+ // *Really* minimal PCG32 code / (c) 2014 M.E. O'Neill / www.pcg-random.org
75
+ // Licensed under Apache License 2.0 (NO WARRANTY, etc. see website)
76
+ // --private-- Random number generator state. */
77
+ typedef struct {
78
+ ui64_t state; /* 64-bit generator state */
79
+ ui64_t inc; /* 63-bit sequence id */
80
+ } set_rand_t;
81
+ /* --private-- Initialize the state *gen using seed and seq. seed seeds the
82
+ // advancing 64-bit state. seq is a sequence selection constant. */
83
+ void set_seed(set_rand_t *gen, ui64_t seed, ui64_t seq) {
84
+ gen->inc = (seq << 1) | 1;
85
+ gen->state = (seed + gen->inc) * 6364136223846793005ULL + gen->inc;
86
+ }
87
+ /* Return 32 random bits, advancing the state *gen. */
88
+ ui32_t set_rand(set_rand_t *gen) {
89
+ ui64_t state = gen->state;
90
+ gen->state = state * 6364136223846793005ULL + gen->inc;
91
+ ui32_t mix = (ui32_t)(((state >> 18) ^ state) >> 27);
92
+ int rot = state >> 59;
93
+ return (mix >> rot) | (mix << ((-rot) & 31));
94
+ }
95
+ /* End of PCG32 code. */
96
+
97
+ /* --private-- Linked-list node. */
98
+ typedef struct set_node_s set_node_t;
99
+ struct set_node_s {
100
+ set_key_t key; /* the key (not used for head or path) */
101
+ i16_t size; /* number of allocated pointers in right[] */
102
+ i16_t fill; /* number of pointers in right[] filled in */
103
+ set_node_t **right; /* pointer for each level, each to the right */
104
+ };
105
+
106
+ /* A set. The application sets env, may use gen with set_rand(), and may read
107
+ // allocs and memory. The remaining variables are --private-- . */
108
+ typedef struct set_s {
109
+ set_node_t *head; /* skiplist head -- no key, just links */
110
+ set_node_t *path; /* right[] is path to key from set_found() */
111
+ set_node_t *node; /* node under construction, in case of longjmp() */
112
+ i16_t depth; /* maximum depth of the skiplist */
113
+ ui64_t ran; /* a precious trove of random bits */
114
+ set_rand_t gen; /* random number generator state */
115
+ jmp_buf env; /* setjmp() environment for allocation errors */
116
+ #ifdef SET_TRACK
117
+ size_t allocs; /* number of allocations */
118
+ size_t memory; /* total amount of allocated memory (>= requests) */
119
+ #endif
120
+ } set_t;
121
+
122
+ /* Memory allocation and deallocation. set_alloc(set, ptr, size) returns a
123
+ // pointer to an allocation of size bytes if ptr is NULL, or the previous
124
+ // allocation ptr resized to size bytes. set_alloc() will never return NULL.
125
+ // set_free(set, ptr) frees an allocation created by set_alloc(). These may be
126
+ // used by the application. e.g. if allocation tracking is desired. */
127
+ #ifdef SET_TRACK
128
+ /* Track the number of allocations and the total backing memory size. */
129
+ # if defined(_WIN32)
130
+ # include <malloc.h>
131
+ # define SET_ALLOC_SIZE(ptr) _msize(ptr)
132
+ # elif defined(__MACH__)
133
+ # include <malloc/malloc.h>
134
+ # define SET_ALLOC_SIZE(ptr) malloc_size(ptr)
135
+ # elif defined(__linux__)
136
+ # include <malloc.h>
137
+ # define SET_ALLOC_SIZE(ptr) malloc_usable_size(ptr)
138
+ # elif defined(__FreeBSD__)
139
+ # include <malloc_np.h>
140
+ # define SET_ALLOC_SIZE(ptr) malloc_usable_size(ptr)
141
+ # elif defined(__NetBSD__)
142
+ # include <jemalloc/jemalloc.h>
143
+ # define SET_ALLOC_SIZE(ptr) malloc_usable_size(ptr)
144
+ # else // e.g. OpenBSD
145
+ # define SET_ALLOC_SIZE(ptr) 0
146
+ # endif
147
+ // With tracking.
148
+ void *set_alloc(set_t *set, void *ptr, size_t size) {
149
+ size_t had = ptr == NULL ? 0 : SET_ALLOC_SIZE(ptr);
150
+ void *mem = realloc(ptr, size);
151
+ if (mem == NULL)
152
+ longjmp(set->env, ENOMEM);
153
+ set->allocs += ptr == NULL;
154
+ set->memory += SET_ALLOC_SIZE(mem) - had;
155
+ return mem;
156
+ }
157
+ void set_free(set_t *set, void *ptr) {
158
+ if (ptr != NULL) {
159
+ set->allocs--;
160
+ set->memory -= SET_ALLOC_SIZE(ptr);
161
+ free(ptr);
162
+ }
163
+ }
164
+ #else
165
+ /* Without tracking. */
166
+ void *set_alloc(set_t *set, void *ptr, size_t size) {
167
+ void *mem = realloc(ptr, size);
168
+ if (mem == NULL)
169
+ longjmp(set->env, ENOMEM);
170
+ return mem;
171
+ }
172
+ void set_free(set_t *set, void *ptr) {
173
+ (void)set;
174
+ free(ptr);
175
+ }
176
+ #endif
177
+
178
+ /* --private-- Grow node's array right[] as needed to be able to hold at least
179
+ // want links. If fill is true, assure that the first want links are filled in,
180
+ // setting them to set->head if not previously filled in. Otherwise it is
181
+ // assumed that the first want links are about to be filled in. */
182
+ void set_grow(set_t *set, set_node_t *node, int want, int fill) {
183
+ if (node->size < want) {
184
+ int more = node->size ? node->size : 1;
185
+ while (more < want)
186
+ more <<= 1;
187
+ node->right = set_alloc(set, node->right, more * sizeof(set_node_t *));
188
+ node->size = (i16_t)more;
189
+ }
190
+ int i;
191
+ if (fill)
192
+ for (i = node->fill; i < want; i++)
193
+ node->right[i] = set->head;
194
+ node->fill = (i16_t)want;
195
+ }
196
+
197
+ /* --private-- Return a new node. key is left uninitialized. */
198
+ set_node_t *set_node(set_t *set) {
199
+ set_node_t *node = set_alloc(set, NULL, sizeof(set_node_t));
200
+ node->size = 0;
201
+ node->fill = 0;
202
+ node->right = NULL;
203
+ return node;
204
+ }
205
+
206
+ /* --private-- Free the list linked from head, along with the keys. */
207
+ void set_sweep(set_t *set) {
208
+ set_node_t *step = set->head->right[0];
209
+ while (step != set->head) {
210
+ set_node_t *next = step->right[0]; /* save link to next node */
211
+ set_drop(set, step->key);
212
+ set_free(set, step->right);
213
+ set_free(set, step);
214
+ step = next;
215
+ }
216
+ }
217
+
218
+ /* Initialize a new set. set->env must be initialized using setjmp() before
219
+ // set_start() is called. A longjmp(set->env, ENOMEM) will be used to handle a
220
+ // memory allocation failure during any of the operations. (See setjmp.h and
221
+ // errno.h.) The set can still be used if this happens, assuming that it didn't
222
+ // happen during set_start(). Whether set_start() completed or not, set_end()
223
+ // can be used to free the set's memory after a longjmp(). */
224
+ void set_start(set_t *set) {
225
+ #ifdef SET_TRACK
226
+ set->allocs = 0;
227
+ set->memory = 0;
228
+ #endif
229
+ set->head = set->path = set->node = NULL; /* in case set_node() fails */
230
+ set->path = set_node(set);
231
+ set->head = set_node(set);
232
+ set_grow(set, set->head, 1, 1); /* one link back to head for an empty set */
233
+ *(unsigned char *)&set->head->key = 137; /* set id */
234
+ set->depth = 0;
235
+ set_seed(&set->gen, ((ui64_t)(ptrdiff_t)set << 32) ^
236
+ ((ui64_t)time(NULL) << 12) ^ clock(), 0);
237
+ set->ran = 1;
238
+ }
239
+
240
+ /* Return true if *set appears to be in a usable state. If *set has been zeroed
241
+ // out, then set_ok(set) will be false and set_end(set) will be safe. */
242
+ int set_ok(set_t *set) {
243
+ return set->head != NULL &&
244
+ set->head->right != NULL &&
245
+ *(unsigned char *)&set->head->key == 137;
246
+ }
247
+
248
+ /* Empty the set. This frees the memory used for the previous set contents.
249
+ // After set_clear(), *set is ready for use, as if after a set_start(). */
250
+ void set_clear(set_t *set) {
251
+ assert(set_ok(set) && "improper use");
252
+
253
+ /* Free all the keys and their nodes. */
254
+ set_sweep(set);
255
+
256
+ /* Leave the head and path allocations as is. Clear their contents, with
257
+ // head pointing to itself and setting depth to zero, for an empty set. */
258
+ set->head->right[0] = set->head;
259
+ set->head->fill = 1;
260
+ set->path->fill = 0;
261
+ set->depth = 0;
262
+ }
263
+
264
+ /* Done using the set -- free all allocations. The only operation on *set
265
+ // permitted after this is set_start(). Though another set_end() would do no
266
+ // harm. This can be done at any time after a set_start(), or after a longjmp()
267
+ // on any allocation failure, including during a set_start(). */
268
+ void set_end(set_t *set) {
269
+ if (set->head != NULL) {
270
+ /* Empty the set and free the head node. */
271
+ if (set->head->right != NULL) {
272
+ set_sweep(set);
273
+ set_free(set, set->head->right);
274
+ }
275
+ set_free(set, set->head);
276
+ set->head = NULL;
277
+ }
278
+ if (set->path != NULL) {
279
+ /* Free the path work area. */
280
+ set_free(set, set->path->right);
281
+ set_free(set, set->path);
282
+ set->path = NULL;
283
+ }
284
+ if (set->node != NULL) {
285
+ /* Free the node that was under construction when longjmp() hit. */
286
+ set_drop(set, set->node->key);
287
+ set_free(set, set->node->right);
288
+ set_free(set, set->node);
289
+ set->node = NULL;
290
+ }
291
+ }
292
+
293
+ /* Look for key. Return 1 if found or 0 if not. This also puts the path to get
294
+ // there in set->path, for use by set_insert(). */
295
+ int set_found(set_t *set, set_key_t key) {
296
+ assert(set_ok(set) && "improper use");
297
+
298
+ /* Start at depth and work down and right as determined by key comparisons. */
299
+ set_node_t *head = set->head, *here = head;
300
+ int i = set->depth;
301
+ set_grow(set, set->path, i + 1, 0);
302
+ do {
303
+ while (here->right[i] != head &&
304
+ set_cmp(here->right[i]->key, key) < 0)
305
+ here = here->right[i];
306
+ set->path->right[i] = here;
307
+ } while (i--);
308
+
309
+ /* See if the key matches. */
310
+ here = here->right[0];
311
+ return here != head && set_cmp(here->key, key) == 0;
312
+ }
313
+
314
+ /* Insert the key key. Return 0 on success, or 1 if key is already in the set. */
315
+ int set_insert(set_t *set, set_key_t key) {
316
+ assert(set_ok(set) && "improper use");
317
+
318
+ if (set_found(set, key))
319
+ /* That key is already in the set. */
320
+ return 1;
321
+
322
+ /* Randomly generate a new level-- level 0 with probability 1/2, 1 with
323
+ // probability 1/4, 2 with probability 1/8, etc. */
324
+ int level = 0;
325
+ for (;;) {
326
+ if (set->ran == 1)
327
+ /* Ran out. Get another 32 random bits. */
328
+ set->ran = set_rand(&set->gen) | (1ULL << 32);
329
+ int bit = set->ran & 1;
330
+ set->ran >>= 1;
331
+ if (bit)
332
+ break;
333
+ assert(level < 32767 &&
334
+ "Overhead, without any fuss, the stars were going out.");
335
+ level++;
336
+ }
337
+ if (level > set->depth) {
338
+ /* The maximum depth is now deeper. Update the structures. */
339
+ set_grow(set, set->path, level + 1, 1);
340
+ set_grow(set, set->head, level + 1, 1);
341
+ set->depth = (i16_t)level;
342
+ }
343
+
344
+ /* Make a new node for the provided key, and insert it in the lists up to
345
+ // and including level. */
346
+ set->node = set_node(set);
347
+ set->node->key = key;
348
+ set_grow(set, set->node, level + 1, 0);
349
+ int i;
350
+ for (i = 0; i <= level; i++) {
351
+ set->node->right[i] = set->path->right[i]->right[i];
352
+ set->path->right[i]->right[i] = set->node;
353
+ }
354
+ set->node = NULL;
355
+ return 0;
356
+ }
357
+
358
+ #else
359
+ #error ** another skiplist set already created here
360
+ /* Would need to implement a prefix in order to support multiple sets. */
361
+ #endif