geospec-engine 0.0.0 → 0.1.0-next.114

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 (181) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +99 -0
  3. package/README.md +150 -0
  4. package/dist/bindings/mixed-wasm/geospec_engine_native.mjs +2 -0
  5. package/dist/bindings/mixed-wasm/geospec_engine_native.wasm +0 -0
  6. package/dist/host-types.d.mts +48 -0
  7. package/dist/host-types.mjs +1 -0
  8. package/dist/index.d.mts +3 -0
  9. package/dist/index.mjs +1 -0
  10. package/dist/mixed-wasm-loader.d.mts +16 -0
  11. package/dist/mixed-wasm-loader.mjs +3 -0
  12. package/dist/native/index.js +708 -0
  13. package/dist/node.d.mts +97 -0
  14. package/dist/node.mjs +1 -0
  15. package/dist/wasm.d.mts +93 -0
  16. package/dist/wasm.mjs +1 -0
  17. package/licenses/FreeType-FTL.txt +169 -0
  18. package/licenses/GeoSpec-LICENSE.txt +201 -0
  19. package/licenses/Manifold-Rust-LICENSE.txt +201 -0
  20. package/licenses/NOTICE.txt +99 -0
  21. package/licenses/OCCT-LGPL-2.1.txt +502 -0
  22. package/licenses/OCCT-LGPL-exception.txt +10 -0
  23. package/licenses/RapidJSON-LICENSE.txt +57 -0
  24. package/licenses/SOURCE-RELINK.json +123 -0
  25. package/licenses/SOURCE-RELINK.md +22 -0
  26. package/licenses/THIRD-PARTY-NOTICES.txt +1080 -0
  27. package/licenses/cargo/01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f-COPYING +3 -0
  28. package/licenses/cargo/0621878e61f0d0fda054bcbe02df75192c28bde1ecc8289cbd86aeba2dd72720-LICENSE-MIT +25 -0
  29. package/licenses/cargo/0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594-LICENSE-APACHE +177 -0
  30. package/licenses/cargo/0e6c282dfcb08a031c37b8f851fe5813fad63612e88a29dbe5121d727d67bbf2-LICENSE-MIT +26 -0
  31. package/licenses/cargo/0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f-LICENSE-MIT +21 -0
  32. package/licenses/cargo/123a331b5dbf04c30097fa43b8f858bc85df671fe776de498d01f3d6b7c1f69e-LICENSE-MIT +25 -0
  33. package/licenses/cargo/13ce2fb7da9c6c3a5a16e86877a604e80237f076b9258115d8f0444127f6a281-NOTICE.md +41 -0
  34. package/licenses/cargo/20fe7b00e904ed690e3b9fd6073784d3fc428141dbd10b81c01fd143d0797f58-LICENSE-APACHE +176 -0
  35. package/licenses/cargo/23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3-LICENSE-MIT +23 -0
  36. package/licenses/cargo/275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427-LICENSE-APACHE +202 -0
  37. package/licenses/cargo/27995d58ad5c1145c1a8cd86244ce844886958a35eb2b78c6b772748669999ac-LICENSE-MIT +25 -0
  38. package/licenses/cargo/30fefc3a7d6a0041541858293bcbea2dde4caa4c0a5802f996a7f7e8c0085652-LICENSE-MIT +23 -0
  39. package/licenses/cargo/36516aefdc84c5d5a1e7485425913a22dbda69eb1930c5e84d6ae4972b5194b9-LICENSE-MIT +23 -0
  40. package/licenses/cargo/3708458dee7f359ac6c9c5558023ed481be87e5372c43ebd7f2ca7ad23c12026-LICENSE-APACHE +202 -0
  41. package/licenses/cargo/378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397-LICENSE-MIT +25 -0
  42. package/licenses/cargo/3f8a05fc8617c5ce569fa5a4f2301cd847fe00fa011bdaa8f353fd55a2691a54-LICENSE-MIT +21 -0
  43. package/licenses/cargo/42fa16951ce7f24b5a467a40e5b449a1d41e662f97ca779864f053f39e097737-LICENSE-MIT +26 -0
  44. package/licenses/cargo/4455bf75a91154108304cb283e0fea9948c14f13e20d60887cf2552449dea3b1-LICENSE-MIT +21 -0
  45. package/licenses/cargo/516b24e051bf5630880ebbd55c40a25ce9552ebaf8970a53e8976eb70e522406-LICENSE-APACHE +201 -0
  46. package/licenses/cargo/553fffcd9b1cb158bc3e9edc35da85ca5c3b3d7d2e61c883ebcfa8a65814b583-LICENSE-APACHE +13 -0
  47. package/licenses/cargo/62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a-LICENSE-APACHE +176 -0
  48. package/licenses/cargo/6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb-LICENSE-MIT +25 -0
  49. package/licenses/cargo/6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd-LICENSE-MIT +26 -0
  50. package/licenses/cargo/70c9d40f1f9545c3f133b8a67206e89da850f6468eed072281bb3701514114a9-LICENSE-MIT +25 -0
  51. package/licenses/cargo/7365cc8878a1d7ce155a58c4ca09c3d7a6be413efa5334a80ea842912b669349-LICENSE-MIT +25 -0
  52. package/licenses/cargo/7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0-LICENSE-MIT +25 -0
  53. package/licenses/cargo/7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c-UNLICENSE +24 -0
  54. package/licenses/cargo/831e0f43ad0bf014c1c4fec5767aae470434c1d66d6e671be2d823e729063e25-LICENSE-MIT +28 -0
  55. package/licenses/cargo/8ce0830173fdac609dfb4ea603fdc002c2f4af0dc9b1a005653f5da9cf534b18-LICENSE +25 -0
  56. package/licenses/cargo/91585c36e4fb9ab4ca0d3dfac5d66d3c0c62cc51f640a0e1196542daf2267eae-LICENSE-MIT +25 -0
  57. package/licenses/cargo/95bd3988beee069fa2848f648dab43cc6e0b2add2ad6bcb17360caf749802bcc-LICENSE-APACHE +176 -0
  58. package/licenses/cargo/98181e7249d0c01737645ec982499ce99a0f07eb8f7d625b8840d799d10dbc01-LICENSE-MIT +25 -0
  59. package/licenses/cargo/98b52ccf20010b67d8fd3bdf151f50ecdfc01f25d6de190e015dd436d9f7ea0b-LICENSE +201 -0
  60. package/licenses/cargo/9e0dfd2dd4173a530e238cb6adb37aa78c34c6bc7444e0e10c1ab5d8881f63ba-LICENSE-MIT +25 -0
  61. package/licenses/cargo/a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2-LICENSE-APACHE +201 -0
  62. package/licenses/cargo/a825bd853ab71619a4923d7b4311221427848070ff44d990da39b0b274c1683f-LICENSE-MIT +21 -0
  63. package/licenses/cargo/a8ad31b1c3f40dca5a84119351b8fa8ddc868edd77fad8a8ebf6d8f2d16fa4ae-LICENSE-APACHE +201 -0
  64. package/licenses/cargo/a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5-LICENSE-APACHE +201 -0
  65. package/licenses/cargo/aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf-LICENSE-APACHE +201 -0
  66. package/licenses/cargo/ae9baa7beea910273c2f384c2a6b721fb7bd02bda3436074a1072e4ee689f985-LICENSE-MIT +25 -0
  67. package/licenses/cargo/aed7b1758e35afa0cd0fde059d61950747ca11cd0e5e169cb21c11608daed772-LICENSE +21 -0
  68. package/licenses/cargo/af59cea35d7f5e2777a713b8d155d65efa2c339eb43f3c14e868c6ac8506edad-LICENSE-MIT +26 -0
  69. package/licenses/cargo/b1181a40b2a7b25cf66fd01481713bc1005df082c53ef73e851e55071b102744-LICENSE +19 -0
  70. package/licenses/cargo/b29f8b01452350c20dd1af16ef83b598fea3053578ccc1c7a0ef40e57be2620f-LICENSE +12 -0
  71. package/licenses/cargo/bccaa8b6c09f94e81f06696e179dbe058464bbdfbc823b6d49cada1d71e84ac3-LICENSE-MIT +5 -0
  72. package/licenses/cargo/beb8e42e9d6b4284e03304d05a81a0755200a965fc8d0a5e0aea1e84cf805d6e-LICENSE +23 -0
  73. package/licenses/cargo/c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4-LICENSE +201 -0
  74. package/licenses/cargo/c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566-LICENSE-BOOST +23 -0
  75. package/licenses/cargo/cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30-LICENSE-APACHE +202 -0
  76. package/licenses/cargo/d2e7ec5355c96eeade56b09187ceb48a6a30299da3ce7531a66d3d11405ab963-LICENSE-MIT +25 -0
  77. package/licenses/cargo/db11fec9946737df39ca3898d9cd8c10ec6f6c3a884a6802b0ad0b81b4e8f23a-LICENSE +1 -0
  78. package/licenses/cargo/e36d55837170195cdf934aa6a48c0ad6efba1bde3f5b4a1b9259c171d5aeb647-LICENSE-APACHE +201 -0
  79. package/licenses/cargo/ea084a2373ebc1f0902c09266e7bf25a05ab3814c1805bb017ffa7308f90c061-LICENSE-MIT +21 -0
  80. package/licenses/cargo/ec353d4fecf7963b4c054384557e5dbc3c7a717997eb4a3815b315721a6aa75a-LICENSE-MIT +18 -0
  81. package/licenses/cargo/f71fd5946d6674af304514dc7b3b4272aa9117052dd347fb3a9dc9679f33d95f-LICENSE-MIT +26 -0
  82. package/licenses/cargo/f7db81051789b729fea528a63ec4c938fdcb93d9d61d97dc8cc2e9df6d47f2a1-LICENSE-UNICODE +39 -0
  83. package/licenses/cargo/fe5c9498374de7953275f83f35565b289f377ceab4a28d04c7da87723e02a372-LICENSE +20 -0
  84. package/licenses/cargo/ff8f68cb076caf8cefe7a6430d4ac086ce6af2ca8ce2c4e5a2004d4552ef52a2-LICENSE-MIT +25 -0
  85. package/licenses/components.json +5805 -0
  86. package/licenses/fallback/MIT.txt +21 -0
  87. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/backtrace/LICENSE-APACHE +201 -0
  88. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/backtrace/LICENSE-MIT +25 -0
  89. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/compiler-builtins/LICENSE.txt +275 -0
  90. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/compiler-builtins/libm/LICENSE.txt +258 -0
  91. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/portable-simd/LICENSE-APACHE +202 -0
  92. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/portable-simd/LICENSE-MIT +19 -0
  93. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/portable-simd/crates/core_simd/LICENSE-APACHE +202 -0
  94. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/portable-simd/crates/core_simd/LICENSE-MIT +19 -0
  95. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/LICENSE-APACHE +201 -0
  96. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/LICENSE-MIT +25 -0
  97. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/crates/core_arch/LICENSE-APACHE +201 -0
  98. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/crates/core_arch/LICENSE-MIT +25 -0
  99. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/crates/intrinsic-test/LICENSE-APACHE +201 -0
  100. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/crates/intrinsic-test/LICENSE-MIT +25 -0
  101. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/addr2line-0.27.1/LICENSE-APACHE +201 -0
  102. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/addr2line-0.27.1/LICENSE-MIT +25 -0
  103. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/adler2-2.0.1/LICENSE-0BSD +12 -0
  104. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/adler2-2.0.1/LICENSE-APACHE +201 -0
  105. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/adler2-2.0.1/LICENSE-MIT +23 -0
  106. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/cc-1.2.0/LICENSE-APACHE +201 -0
  107. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/cc-1.2.0/LICENSE-MIT +25 -0
  108. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/cfg-if-1.0.4/LICENSE-APACHE +201 -0
  109. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/cfg-if-1.0.4/LICENSE-MIT +25 -0
  110. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/dlmalloc-0.2.14/LICENSE-APACHE +201 -0
  111. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/dlmalloc-0.2.14/LICENSE-MIT +25 -0
  112. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/foldhash-0.2.0/LICENSE +19 -0
  113. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/getopts-0.2.24/LICENSE-APACHE +201 -0
  114. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/getopts-0.2.24/LICENSE-MIT +25 -0
  115. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/gimli-0.34.0/LICENSE-APACHE +201 -0
  116. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/gimli-0.34.0/LICENSE-MIT +25 -0
  117. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/hashbrown-0.17.1/LICENSE-APACHE +201 -0
  118. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/hashbrown-0.17.1/LICENSE-MIT +25 -0
  119. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/hermit-abi-0.5.2/LICENSE-APACHE +201 -0
  120. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/hermit-abi-0.5.2/LICENSE-MIT +23 -0
  121. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/libc-0.2.189/LICENSE-APACHE +176 -0
  122. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/libc-0.2.189/LICENSE-MIT +25 -0
  123. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/memchr-2.8.3/COPYING +3 -0
  124. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/memchr-2.8.3/LICENSE-MIT +21 -0
  125. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/memchr-2.8.3/UNLICENSE +24 -0
  126. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.9.1/LICENSE +25 -0
  127. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.9.1/LICENSE-APACHE.md +177 -0
  128. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.9.1/LICENSE-MIT.md +24 -0
  129. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.9.1/LICENSE-ZLIB.md +14 -0
  130. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/moto-rt-0.16.3/LICENSE-APACHE +201 -0
  131. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/moto-rt-0.16.3/LICENSE-MIT +25 -0
  132. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/object-0.39.1/LICENSE-APACHE +201 -0
  133. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/object-0.39.1/LICENSE-MIT +25 -0
  134. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/r-efi-5.3.0/AUTHORS +74 -0
  135. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/r-efi-alloc-2.1.0/AUTHORS +62 -0
  136. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand-0.9.5/COPYRIGHT +12 -0
  137. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand-0.9.5/LICENSE-APACHE +176 -0
  138. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand-0.9.5/LICENSE-MIT +26 -0
  139. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_core-0.9.5/COPYRIGHT +12 -0
  140. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_core-0.9.5/LICENSE-APACHE +187 -0
  141. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_core-0.9.5/LICENSE-MIT +26 -0
  142. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_xorshift-0.4.0/COPYRIGHT +12 -0
  143. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_xorshift-0.4.0/LICENSE-APACHE +176 -0
  144. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_xorshift-0.4.0/LICENSE-MIT +26 -0
  145. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rustc-demangle-0.1.28/LICENSE-APACHE +201 -0
  146. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rustc-demangle-0.1.28/LICENSE-MIT +25 -0
  147. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rustc-literal-escaper-0.0.8/LICENSE-APACHE +176 -0
  148. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rustc-literal-escaper-0.0.8/LICENSE-MIT +23 -0
  149. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/shlex-1.3.0/LICENSE-APACHE +13 -0
  150. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/shlex-1.3.0/LICENSE-MIT +21 -0
  151. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/unwinding-0.2.10/LICENSE-APACHE +176 -0
  152. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/unwinding-0.2.10/LICENSE-MIT +23 -0
  153. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip2-1.0.4+wasi-0.2.12/LICENSE-APACHE +201 -0
  154. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip2-1.0.4+wasi-0.2.12/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
  155. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip2-1.0.4+wasi-0.2.12/LICENSE-MIT +23 -0
  156. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip3-0.7.1+wasi-0.3.0/LICENSE-APACHE +201 -0
  157. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip3-0.7.1+wasi-0.3.0/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
  158. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip3-0.7.1+wasi-0.3.0/LICENSE-MIT +23 -0
  159. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wit-bindgen-0.57.1/LICENSE-APACHE +201 -0
  160. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wit-bindgen-0.57.1/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
  161. package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wit-bindgen-0.57.1/LICENSE-MIT +23 -0
  162. package/licenses/mixed-tools/rustPrefix/share/doc/rust/COPYRIGHT-library.html +29378 -0
  163. package/licenses/mixed-tools/sdkPrefix/emscripten/AUTHORS +607 -0
  164. package/licenses/mixed-tools/sdkPrefix/emscripten/LICENSE +102 -0
  165. package/licenses/mixed-tools/sdkPrefix/emscripten/system/include/SDL/COPYING +24 -0
  166. package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/compiler-rt/LICENSE.TXT +311 -0
  167. package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/libc/musl/COPYRIGHT +193 -0
  168. package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/libcxx/LICENSE.TXT +311 -0
  169. package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/libcxxabi/LICENSE.TXT +311 -0
  170. package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/libunwind/LICENSE.TXT +311 -0
  171. package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/llvm-libc/LICENSE.TXT +278 -0
  172. package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/mimalloc/LICENSE +21 -0
  173. package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/openmp/LICENSE.TXT +361 -0
  174. package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/openmp/src/thirdparty/ittnotify/LICENSE.txt +8 -0
  175. package/package.json +85 -4
  176. package/trust/README.md +42 -0
  177. package/trust/canonicalize.mjs +37 -0
  178. package/trust/evaluate-worker.mjs +164 -0
  179. package/trust/index.d.mts +112 -0
  180. package/trust/run.mjs +850 -0
  181. package/trust/verify.py +470 -0
@@ -0,0 +1,470 @@
1
+ #!/usr/bin/env python3
2
+ """Verify one bounded GeoSpec DSSE/in-toto record against an external policy."""
3
+
4
+ import base64
5
+ import hashlib
6
+ import json
7
+ import pathlib
8
+ import subprocess
9
+ import sys
10
+ import tempfile
11
+
12
+
13
+ class Rejection(Exception):
14
+ def __init__(self, code):
15
+ super().__init__(code)
16
+ self.code = code
17
+
18
+
19
+ def require(condition, code):
20
+ if not condition:
21
+ raise Rejection(code)
22
+
23
+
24
+ def pairs(items):
25
+ result = {}
26
+ for key, value in items:
27
+ require(key not in result, "MALFORMED_JSON")
28
+ result[key] = value
29
+ return result
30
+
31
+
32
+ def parse(data):
33
+ return json.loads(
34
+ data.decode("utf-8", errors="strict"),
35
+ object_pairs_hook=pairs,
36
+ parse_constant=lambda value: (_ for _ in ()).throw(ValueError(value)),
37
+ )
38
+
39
+
40
+ def exact_keys(value, keys, code="MALFORMED_RECORD"):
41
+ require(isinstance(value, dict) and set(value) == set(keys), code)
42
+
43
+
44
+ def digest(data):
45
+ return hashlib.sha256(data).hexdigest()
46
+
47
+
48
+ def decode64(value):
49
+ require(isinstance(value, str), "MALFORMED_ENVELOPE")
50
+ try:
51
+ encoded = value.encode("ascii")
52
+ decoded = base64.b64decode(encoded, validate=True)
53
+ require(base64.b64encode(decoded) == encoded, "MALFORMED_ENVELOPE")
54
+ return decoded
55
+ except (ValueError, UnicodeError):
56
+ raise Rejection("MALFORMED_ENVELOPE") from None
57
+
58
+
59
+ def read_artifact(closure, entry, limit):
60
+ exact_keys(entry, ["byteLength", "name", "sha256"])
61
+ name = entry["name"]
62
+ require(isinstance(name, str), "ARTIFACT_SET")
63
+ relative = pathlib.PurePosixPath(name)
64
+ require(not relative.is_absolute() and ".." not in relative.parts, "ARTIFACT_SET")
65
+ target = closure.joinpath(*relative.parts)
66
+ require(target.is_file() and not target.is_symlink(), "ARTIFACT_MISSING")
67
+ resolved = target.resolve(strict=True)
68
+ require(closure.resolve(strict=True) in resolved.parents, "ARTIFACT_SET")
69
+ require(target.stat().st_size <= limit, "RESOURCE_LIMIT")
70
+ data = target.read_bytes()
71
+ require(len(data) == entry["byteLength"] and digest(data) == entry["sha256"], "ARTIFACT_DIGEST")
72
+ return data
73
+
74
+
75
+ def main():
76
+ envelope_path, policy_path, closure_path, openssl = sys.argv[1:]
77
+ closure = pathlib.Path(closure_path)
78
+ policy = parse(pathlib.Path(policy_path).read_bytes())
79
+ exact_keys(
80
+ policy,
81
+ [
82
+ "approvedPlanSha256",
83
+ "cacheMode",
84
+ "canonicalProfile",
85
+ "engineManifestSha256",
86
+ "evaluatorId",
87
+ "evaluatorMode",
88
+ "expectedClaimIds",
89
+ "expectedJobChallenge",
90
+ "expectedSubjects",
91
+ "isolationClass",
92
+ "maxArtifactBytes",
93
+ "maxEnvelopeBytes",
94
+ "numericProfile",
95
+ "payloadType",
96
+ "predicateType",
97
+ "protocolVersion",
98
+ "publicKeyPem",
99
+ "registryVersion",
100
+ "requirementRevision",
101
+ "requireFreshChallenge",
102
+ "runnerManifestSha256",
103
+ "schema",
104
+ "trustedKeyId",
105
+ ],
106
+ "MALFORMED_POLICY",
107
+ )
108
+ require(policy["schema"] == "geospec-trusted-verifier-policy-v3", "MALFORMED_POLICY")
109
+ require(
110
+ policy["predicateType"] == "https://taucad.dev/attestation/geospec-trusted-evaluation/v3",
111
+ "MALFORMED_POLICY",
112
+ )
113
+ require(policy["evaluatorMode"] == "signed-local-record" and policy["isolationClass"] == "none", "EVALUATOR_BINDING")
114
+ require(policy["maxArtifactBytes"] == 67108864, "MALFORMED_POLICY")
115
+ require(policy["maxEnvelopeBytes"] == 4194304, "MALFORMED_POLICY")
116
+ envelope_file = pathlib.Path(envelope_path)
117
+ require(envelope_file.stat().st_size <= policy["maxEnvelopeBytes"], "RESOURCE_LIMIT")
118
+ envelope = parse(envelope_file.read_bytes())
119
+ exact_keys(envelope, ["payload", "payloadType", "signatures"], "MALFORMED_ENVELOPE")
120
+ require(envelope["payloadType"] == policy["payloadType"], "PAYLOAD_TYPE")
121
+ require(isinstance(envelope["signatures"], list) and len(envelope["signatures"]) == 1, "MALFORMED_ENVELOPE")
122
+ signature_record = envelope["signatures"][0]
123
+ exact_keys(signature_record, ["keyid", "sig"], "MALFORMED_ENVELOPE")
124
+ require(signature_record["keyid"] == policy["trustedKeyId"], "TRUST_POLICY_KEY")
125
+ payload = decode64(envelope["payload"])
126
+ signature = decode64(signature_record["sig"])
127
+ payload_type = envelope["payloadType"].encode("utf-8")
128
+ pae = (
129
+ b"DSSEv1 "
130
+ + str(len(payload_type)).encode("ascii")
131
+ + b" "
132
+ + payload_type
133
+ + b" "
134
+ + str(len(payload)).encode("ascii")
135
+ + b" "
136
+ + payload
137
+ )
138
+ with tempfile.TemporaryDirectory(prefix="geospec-verification-") as temporary:
139
+ directory = pathlib.Path(temporary)
140
+ public_key = directory / "public.pem"
141
+ pae_file = directory / "pae.bin"
142
+ signature_file = directory / "signature.bin"
143
+ public_key.write_text(policy["publicKeyPem"])
144
+ pae_file.write_bytes(pae)
145
+ signature_file.write_bytes(signature)
146
+ public_der = subprocess.run(
147
+ [openssl, "pkey", "-pubin", "-in", str(public_key), "-outform", "DER"],
148
+ capture_output=True,
149
+ timeout=5,
150
+ check=False,
151
+ )
152
+ require(public_der.returncode == 0 and digest(public_der.stdout) == policy["trustedKeyId"], "TRUST_POLICY_KEY")
153
+ verified = subprocess.run(
154
+ [
155
+ openssl,
156
+ "pkeyutl",
157
+ "-verify",
158
+ "-pubin",
159
+ "-inkey",
160
+ str(public_key),
161
+ "-rawin",
162
+ "-in",
163
+ str(pae_file),
164
+ "-sigfile",
165
+ str(signature_file),
166
+ ],
167
+ capture_output=True,
168
+ timeout=5,
169
+ check=False,
170
+ )
171
+ require(verified.returncode == 0, "SIGNATURE_INVALID")
172
+
173
+ statement = parse(payload)
174
+ exact_keys(statement, ["_type", "predicate", "predicateType", "subject"])
175
+ require(statement["_type"] == "https://in-toto.io/Statement/v1", "PAYLOAD_TYPE")
176
+ require(statement["predicateType"] == policy["predicateType"], "PAYLOAD_TYPE")
177
+ predicate = statement["predicate"]
178
+ exact_keys(
179
+ predicate,
180
+ [
181
+ "artifacts",
182
+ "assurance",
183
+ "cache",
184
+ "claims",
185
+ "complete",
186
+ "engine",
187
+ "evaluator",
188
+ "profiles",
189
+ "requirements",
190
+ "run",
191
+ "runner",
192
+ "schema",
193
+ "subjects",
194
+ ],
195
+ )
196
+ require(predicate["schema"] == "geospec-trusted-evaluation-predicate-v3", "MALFORMED_RECORD")
197
+ require(predicate["complete"] is True, "INCOMPLETE_RUN")
198
+ require(predicate["cache"] == {"mode": policy["cacheMode"], "persistent": False}, "CACHE_BINDING")
199
+ require(
200
+ predicate["evaluator"]
201
+ == {"id": policy["evaluatorId"], "isolationClass": "none", "mode": "signed-local-record"},
202
+ "EVALUATOR_BINDING",
203
+ )
204
+ require(
205
+ predicate["assurance"]
206
+ == {
207
+ "geometryTruth": "trusted-evaluator-assertion",
208
+ "heldSecurityEvaluation": "open-s10",
209
+ "scope": "authenticated-complete-record-not-independent-geometry-proof",
210
+ },
211
+ "ASSURANCE_BINDING",
212
+ )
213
+ require(
214
+ predicate["profiles"]
215
+ == {
216
+ "canonical": policy["canonicalProfile"],
217
+ "numeric": policy["numericProfile"],
218
+ "protocolVersion": policy["protocolVersion"],
219
+ "registryVersion": policy["registryVersion"],
220
+ },
221
+ "PROFILE_BINDING",
222
+ )
223
+ requirements = predicate["requirements"]
224
+ require(requirements["approvedPlanSha256"] == policy["approvedPlanSha256"], "REQUIREMENT_BINDING")
225
+ require(requirements["requirementRevision"] == policy["requirementRevision"], "REQUIREMENT_BINDING")
226
+ require(predicate["engine"]["manifestSha256"] == policy["engineManifestSha256"], "ENGINE_BINDING")
227
+ require(predicate["runner"]["manifestSha256"] == policy["runnerManifestSha256"], "RUNNER_BINDING")
228
+ require(
229
+ not policy["requireFreshChallenge"]
230
+ or (
231
+ predicate["run"]["freshChallengeRequired"] is True
232
+ and predicate["run"]["jobChallenge"] == policy["expectedJobChallenge"]
233
+ ),
234
+ "FRESHNESS_BINDING",
235
+ )
236
+
237
+ artifacts = {}
238
+ for entry in predicate["artifacts"]:
239
+ require(entry["name"] not in artifacts, "ARTIFACT_SET")
240
+ artifacts[entry["name"]] = read_artifact(closure, entry, policy["maxArtifactBytes"])
241
+ require(digest(artifacts["plan.json"]) == policy["approvedPlanSha256"], "REQUIREMENT_BINDING")
242
+ require(digest(artifacts["engine.json"]) == policy["engineManifestSha256"], "ENGINE_BINDING")
243
+ require(digest(artifacts["runner.json"]) == policy["runnerManifestSha256"], "RUNNER_BINDING")
244
+
245
+ expected_subjects = policy["expectedSubjects"]
246
+ require(
247
+ statement["subject"]
248
+ == [{"digest": {"sha256": row["sha256"]}, "name": row["name"]} for row in expected_subjects],
249
+ "SUBJECT_BINDING",
250
+ )
251
+ for row in expected_subjects:
252
+ require(digest(artifacts[row["name"]]) == row["sha256"], "SUBJECT_BINDING")
253
+
254
+ plan = parse(artifacts["plan.json"])
255
+ canonical_plan = parse(artifacts["canonical-plan.json"])
256
+ canonical_result = parse(artifacts["canonical-result.json"])
257
+ raw = parse(artifacts["raw-evaluation.json"])
258
+ engine = parse(artifacts["engine.json"])
259
+ runner = parse(artifacts["runner.json"])
260
+ require(plan["schema"] == "geospec-approved-evaluation-plan-v2", "REQUIREMENT_BINDING")
261
+ require(
262
+ plan["authority"]
263
+ == {
264
+ "canonicalProfile": policy["canonicalProfile"],
265
+ "protocolVersion": policy["protocolVersion"],
266
+ "registryVersion": policy["registryVersion"],
267
+ "requirementRevision": policy["requirementRevision"],
268
+ },
269
+ "REQUIREMENT_BINDING",
270
+ )
271
+ expected_subject_artifacts = []
272
+ for subject in plan["subjects"]:
273
+ ingest = subject["ingestRequest"]
274
+ require(ingest["canonicalProfile"] == policy["canonicalProfile"], "SUBJECT_BINDING")
275
+ require(ingest["protocolVersion"] == policy["protocolVersion"], "SUBJECT_BINDING")
276
+ require(ingest["registryVersion"] == policy["registryVersion"], "SUBJECT_BINDING")
277
+ require(ingest["method"] == "ingestSubject", "SUBJECT_BINDING")
278
+ require(ingest["format"] == subject["format"], "SUBJECT_BINDING")
279
+ require(ingest["frame"] == subject["frame"], "SUBJECT_BINDING")
280
+ require(ingest["primaryByteLength"] == subject["primary"]["byteLength"], "SUBJECT_BINDING")
281
+ require(
282
+ ingest["resources"]
283
+ == [{"byteLength": item["byteLength"], "name": item["name"]} for item in subject["resources"]],
284
+ "SUBJECT_BINDING",
285
+ )
286
+ expected_subject_artifacts.append(
287
+ {
288
+ "name": f"subjects/{subject['slot']}/primary.{subject['format']}",
289
+ "sha256": subject["primary"]["sha256"],
290
+ }
291
+ )
292
+ primary_name = f"subjects/{subject['slot']}/primary.{subject['format']}"
293
+ require(len(artifacts[primary_name]) == subject["primary"]["byteLength"], "SUBJECT_BINDING")
294
+ require(digest(artifacts[primary_name]) == subject["primary"]["sha256"], "SUBJECT_BINDING")
295
+ expected_subject_artifacts.extend(
296
+ {
297
+ "name": f"subjects/{subject['slot']}/resources/{item['name']}",
298
+ "sha256": item["sha256"],
299
+ }
300
+ for item in subject["resources"]
301
+ )
302
+ for item in subject["resources"]:
303
+ resource_name = f"subjects/{subject['slot']}/resources/{item['name']}"
304
+ require(len(artifacts[resource_name]) == item["byteLength"], "SUBJECT_BINDING")
305
+ require(digest(artifacts[resource_name]) == item["sha256"], "SUBJECT_BINDING")
306
+ expected_subject_artifacts.sort(key=lambda item: item["name"])
307
+ require(expected_subjects == expected_subject_artifacts, "SUBJECT_BINDING")
308
+ expected_predicate_subjects = [
309
+ {
310
+ "expectedIdentity": subject["expectedIdentity"],
311
+ "format": subject["format"],
312
+ "frame": subject["frame"],
313
+ "identityField": subject["identityField"],
314
+ "primarySha256": subject["primary"]["sha256"],
315
+ "resourceSha256": [item["sha256"] for item in subject["resources"]],
316
+ "slot": subject["slot"],
317
+ }
318
+ for subject in plan["subjects"]
319
+ ]
320
+ require(predicate["subjects"] == expected_predicate_subjects, "SUBJECT_BINDING")
321
+ require(raw["schema"] == "geospec-trusted-native-evaluation-v2" and raw["complete"] is True, "INCOMPLETE_RUN")
322
+ require(raw["cache"] == {"mode": policy["cacheMode"], "persistent": False}, "CACHE_BINDING")
323
+ initialization = raw["initialization"]
324
+ exact_keys(
325
+ initialization,
326
+ ["base64", "canonicalProfile", "numericProfile", "protocolVersion", "registryVersion", "sha256"],
327
+ )
328
+ require(initialization["canonicalProfile"] == policy["canonicalProfile"], "PROFILE_BINDING")
329
+ require(initialization["numericProfile"] == policy["numericProfile"], "PROFILE_BINDING")
330
+ require(initialization["protocolVersion"] == policy["protocolVersion"], "PROFILE_BINDING")
331
+ require(initialization["registryVersion"] == policy["registryVersion"], "PROFILE_BINDING")
332
+ initialization_bytes = decode64(initialization["base64"])
333
+ require(digest(initialization_bytes) == initialization["sha256"], "PROFILE_BINDING")
334
+ initialization_response = parse(initialization_bytes)
335
+ require(initialization_response["requestId"] == "trusted-evaluator-initialize", "PROFILE_BINDING")
336
+ require(initialization_response["result"]["canonicalProfile"] == policy["canonicalProfile"], "PROFILE_BINDING")
337
+ require(initialization_response["result"]["numericProfile"] == policy["numericProfile"], "PROFILE_BINDING")
338
+ require(initialization_response["result"]["protocolVersion"] == policy["protocolVersion"], "PROFILE_BINDING")
339
+ require(initialization_response["result"]["registryVersion"] == policy["registryVersion"], "PROFILE_BINDING")
340
+ require(raw["canonicalPlan"]["sha256"] == digest(artifacts["canonical-plan.json"]), "RESULT_BINDING")
341
+ require(raw["canonicalResult"]["sha256"] == digest(artifacts["canonical-result.json"]), "RESULT_BINDING")
342
+ require(decode64(raw["canonicalPlan"]["base64"]) == artifacts["canonical-plan.json"], "RESULT_BINDING")
343
+ require(decode64(raw["canonicalResult"]["base64"]) == artifacts["canonical-result.json"], "RESULT_BINDING")
344
+ require(canonical_plan["numericProfile"] == policy["numericProfile"], "PROFILE_BINDING")
345
+ require(canonical_result["numericProfile"] == policy["numericProfile"], "PROFILE_BINDING")
346
+ require(canonical_plan["canonicalProfile"] == policy["canonicalProfile"], "PROFILE_BINDING")
347
+ require(canonical_plan["protocolVersion"] == policy["protocolVersion"], "PROFILE_BINDING")
348
+ require(canonical_plan["registryVersion"] == policy["registryVersion"], "PROFILE_BINDING")
349
+ require(
350
+ canonical_plan["plan"]["subjects"]
351
+ == [
352
+ {"slot": subject["slot"], subject["identityField"]: subject["expectedIdentity"]}
353
+ for subject in plan["subjects"]
354
+ ],
355
+ "SUBJECT_BINDING",
356
+ )
357
+
358
+ expected_ids = policy["expectedClaimIds"]
359
+ claims = canonical_plan["plan"]["claims"]
360
+ results = canonical_result["results"]
361
+ require([claim["claimId"] for claim in claims] == expected_ids, "CLAIM_SET")
362
+ require([result["claimId"] for result in results] == expected_ids, "INCOMPLETE_RESULTS")
363
+ require(len(set(expected_ids)) == len(expected_ids) == len(raw["rows"]), "CLAIM_SET")
364
+ require(predicate["claims"]["count"] == len(expected_ids), "CLAIM_SET")
365
+ require(predicate["claims"]["expectedClaimIds"] == expected_ids, "CLAIM_SET")
366
+ require([entry["claim"] for entry in plan["claims"]] == claims, "CLAIM_BINDING")
367
+ inventory = []
368
+ for ordinal, (approved, claim, result, row) in enumerate(zip(plan["claims"], claims, results, raw["rows"], strict=True)):
369
+ claim_bytes = decode64(row["canonicalClaim"])
370
+ result_bytes = decode64(row["canonicalResult"])
371
+ require(parse(claim_bytes) == claim and digest(claim_bytes) == row["canonicalClaimSha256"], "CLAIM_BINDING")
372
+ require(row["canonicalClaimSha256"] == approved["canonicalClaimSha256"], "CLAIM_BINDING")
373
+ require(parse(result_bytes) == result and digest(result_bytes) == row["canonicalResultSha256"], "RESULT_BINDING")
374
+ require(row["ordinal"] == ordinal and row["claimId"] == approved["claim"]["claimId"], "CLAIM_BINDING")
375
+ require(row["polarity"] == claim["polarity"], "POLARITY_BINDING")
376
+ require(row["status"] == result["status"] and result["status"] in ["passed", "failed", "refused"], "RESULT_BINDING")
377
+ inventory.append(
378
+ {
379
+ "canonicalClaimSha256": row["canonicalClaimSha256"],
380
+ "canonicalResultSha256": row["canonicalResultSha256"],
381
+ "claimId": row["claimId"],
382
+ "ordinal": ordinal,
383
+ "polarity": row["polarity"],
384
+ "status": row["status"],
385
+ }
386
+ )
387
+ require(predicate["claims"]["inventory"] == inventory, "RESULT_BINDING")
388
+
389
+ require(len(raw["subjects"]) == len(plan["subjects"]), "SUBJECT_BINDING")
390
+ for approved, observed in zip(plan["subjects"], raw["subjects"], strict=True):
391
+ exact_keys(observed, ["actualIdentity", "admission", "identityField", "ingestRequest", "slot"])
392
+ require(observed["slot"] == approved["slot"], "SUBJECT_BINDING")
393
+ require(observed["identityField"] == approved["identityField"], "SUBJECT_BINDING")
394
+ require(observed["actualIdentity"] == approved["expectedIdentity"], "SUBJECT_BINDING")
395
+ exact_keys(observed["ingestRequest"], ["base64", "sha256"])
396
+ ingest_bytes = decode64(observed["ingestRequest"]["base64"])
397
+ require(digest(ingest_bytes) == observed["ingestRequest"]["sha256"], "SUBJECT_BINDING")
398
+ require(observed["ingestRequest"]["sha256"] == approved["ingestRequestSha256"], "SUBJECT_BINDING")
399
+ require(parse(ingest_bytes) == approved["ingestRequest"], "SUBJECT_BINDING")
400
+ exact_keys(observed["admission"], ["base64", "sha256"])
401
+ admission_bytes = decode64(observed["admission"]["base64"])
402
+ require(digest(admission_bytes) == observed["admission"]["sha256"], "SUBJECT_BINDING")
403
+ admission = parse(admission_bytes)
404
+ require(admission["requestId"] == approved["ingestRequest"]["requestId"], "SUBJECT_BINDING")
405
+ admitted = admission["result"]["subject"]
406
+ require(admitted[approved["identityField"]] == approved["expectedIdentity"], "SUBJECT_BINDING")
407
+ require(admitted["format"] == approved["format"], "SUBJECT_BINDING")
408
+ descriptor = admitted["descriptor"]
409
+ require(descriptor["format"] == approved["format"], "SUBJECT_BINDING")
410
+ require(
411
+ descriptor["primary"]
412
+ == {"byteLength": approved["primary"]["byteLength"], "sha256": approved["primary"]["sha256"]},
413
+ "SUBJECT_BINDING",
414
+ )
415
+ require(
416
+ descriptor["resources"]
417
+ == [
418
+ {"byteLength": item["byteLength"], "name": item["name"], "sha256": item["sha256"]}
419
+ for item in approved["resources"]
420
+ ],
421
+ "SUBJECT_BINDING",
422
+ )
423
+
424
+ require(engine["schema"] == "geospec-engine-artifact-manifest-v2", "ENGINE_BINDING")
425
+ require(engine["platformPackage"] == "geospec-engine-darwin-arm64", "ENGINE_BINDING")
426
+ retained = engine["retainedArtifacts"]
427
+ for entry in retained:
428
+ require(entry["name"] in artifacts, "ENGINE_BINDING")
429
+ require(
430
+ len(artifacts[entry["name"]]) == entry["byteLength"]
431
+ and digest(artifacts[entry["name"]]) == entry["sha256"],
432
+ "ENGINE_BINDING",
433
+ )
434
+ require(runner["schema"] == "geospec-evaluator-runner-manifest-v1", "RUNNER_BINDING")
435
+ for entry in runner["retainedArtifacts"]:
436
+ require(entry["name"] in artifacts, "RUNNER_BINDING")
437
+ require(
438
+ len(artifacts[entry["name"]]) == entry["byteLength"]
439
+ and digest(artifacts[entry["name"]]) == entry["sha256"],
440
+ "RUNNER_BINDING",
441
+ )
442
+ required_artifacts = {
443
+ "plan.json",
444
+ "engine.json",
445
+ "runner.json",
446
+ "canonical-plan.json",
447
+ "canonical-result.json",
448
+ "raw-evaluation.json",
449
+ *[row["name"] for row in expected_subjects],
450
+ *[entry["name"] for entry in retained],
451
+ *[entry["name"] for entry in runner["retainedArtifacts"]],
452
+ }
453
+ require(set(artifacts) == required_artifacts, "ARTIFACT_SET")
454
+ return {
455
+ "code": "VERIFIED",
456
+ "freshChallengeRequired": policy["requireFreshChallenge"],
457
+ "scope": "Authenticated complete record under independently supplied test policy; not independent geometry proof or hostile-host certification",
458
+ "statuses": [row["status"] for row in inventory],
459
+ "trustedKeyId": policy["trustedKeyId"],
460
+ }
461
+
462
+
463
+ try:
464
+ print(json.dumps(main(), separators=(",", ":")))
465
+ except Rejection as error:
466
+ print(json.dumps({"code": error.code}, separators=(",", ":")))
467
+ sys.exit(2)
468
+ except Exception as error:
469
+ print(json.dumps({"code": "MALFORMED_RECORD", "errorType": type(error).__name__}, separators=(",", ":")))
470
+ sys.exit(2)