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.
- package/LICENSE +201 -0
- package/NOTICE +99 -0
- package/README.md +150 -0
- package/dist/bindings/mixed-wasm/geospec_engine_native.mjs +2 -0
- package/dist/bindings/mixed-wasm/geospec_engine_native.wasm +0 -0
- package/dist/host-types.d.mts +48 -0
- package/dist/host-types.mjs +1 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.mjs +1 -0
- package/dist/mixed-wasm-loader.d.mts +16 -0
- package/dist/mixed-wasm-loader.mjs +3 -0
- package/dist/native/index.js +708 -0
- package/dist/node.d.mts +97 -0
- package/dist/node.mjs +1 -0
- package/dist/wasm.d.mts +93 -0
- package/dist/wasm.mjs +1 -0
- package/licenses/FreeType-FTL.txt +169 -0
- package/licenses/GeoSpec-LICENSE.txt +201 -0
- package/licenses/Manifold-Rust-LICENSE.txt +201 -0
- package/licenses/NOTICE.txt +99 -0
- package/licenses/OCCT-LGPL-2.1.txt +502 -0
- package/licenses/OCCT-LGPL-exception.txt +10 -0
- package/licenses/RapidJSON-LICENSE.txt +57 -0
- package/licenses/SOURCE-RELINK.json +123 -0
- package/licenses/SOURCE-RELINK.md +22 -0
- package/licenses/THIRD-PARTY-NOTICES.txt +1080 -0
- package/licenses/cargo/01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f-COPYING +3 -0
- package/licenses/cargo/0621878e61f0d0fda054bcbe02df75192c28bde1ecc8289cbd86aeba2dd72720-LICENSE-MIT +25 -0
- package/licenses/cargo/0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594-LICENSE-APACHE +177 -0
- package/licenses/cargo/0e6c282dfcb08a031c37b8f851fe5813fad63612e88a29dbe5121d727d67bbf2-LICENSE-MIT +26 -0
- package/licenses/cargo/0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f-LICENSE-MIT +21 -0
- package/licenses/cargo/123a331b5dbf04c30097fa43b8f858bc85df671fe776de498d01f3d6b7c1f69e-LICENSE-MIT +25 -0
- package/licenses/cargo/13ce2fb7da9c6c3a5a16e86877a604e80237f076b9258115d8f0444127f6a281-NOTICE.md +41 -0
- package/licenses/cargo/20fe7b00e904ed690e3b9fd6073784d3fc428141dbd10b81c01fd143d0797f58-LICENSE-APACHE +176 -0
- package/licenses/cargo/23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3-LICENSE-MIT +23 -0
- package/licenses/cargo/275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427-LICENSE-APACHE +202 -0
- package/licenses/cargo/27995d58ad5c1145c1a8cd86244ce844886958a35eb2b78c6b772748669999ac-LICENSE-MIT +25 -0
- package/licenses/cargo/30fefc3a7d6a0041541858293bcbea2dde4caa4c0a5802f996a7f7e8c0085652-LICENSE-MIT +23 -0
- package/licenses/cargo/36516aefdc84c5d5a1e7485425913a22dbda69eb1930c5e84d6ae4972b5194b9-LICENSE-MIT +23 -0
- package/licenses/cargo/3708458dee7f359ac6c9c5558023ed481be87e5372c43ebd7f2ca7ad23c12026-LICENSE-APACHE +202 -0
- package/licenses/cargo/378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397-LICENSE-MIT +25 -0
- package/licenses/cargo/3f8a05fc8617c5ce569fa5a4f2301cd847fe00fa011bdaa8f353fd55a2691a54-LICENSE-MIT +21 -0
- package/licenses/cargo/42fa16951ce7f24b5a467a40e5b449a1d41e662f97ca779864f053f39e097737-LICENSE-MIT +26 -0
- package/licenses/cargo/4455bf75a91154108304cb283e0fea9948c14f13e20d60887cf2552449dea3b1-LICENSE-MIT +21 -0
- package/licenses/cargo/516b24e051bf5630880ebbd55c40a25ce9552ebaf8970a53e8976eb70e522406-LICENSE-APACHE +201 -0
- package/licenses/cargo/553fffcd9b1cb158bc3e9edc35da85ca5c3b3d7d2e61c883ebcfa8a65814b583-LICENSE-APACHE +13 -0
- package/licenses/cargo/62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a-LICENSE-APACHE +176 -0
- package/licenses/cargo/6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb-LICENSE-MIT +25 -0
- package/licenses/cargo/6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd-LICENSE-MIT +26 -0
- package/licenses/cargo/70c9d40f1f9545c3f133b8a67206e89da850f6468eed072281bb3701514114a9-LICENSE-MIT +25 -0
- package/licenses/cargo/7365cc8878a1d7ce155a58c4ca09c3d7a6be413efa5334a80ea842912b669349-LICENSE-MIT +25 -0
- package/licenses/cargo/7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0-LICENSE-MIT +25 -0
- package/licenses/cargo/7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c-UNLICENSE +24 -0
- package/licenses/cargo/831e0f43ad0bf014c1c4fec5767aae470434c1d66d6e671be2d823e729063e25-LICENSE-MIT +28 -0
- package/licenses/cargo/8ce0830173fdac609dfb4ea603fdc002c2f4af0dc9b1a005653f5da9cf534b18-LICENSE +25 -0
- package/licenses/cargo/91585c36e4fb9ab4ca0d3dfac5d66d3c0c62cc51f640a0e1196542daf2267eae-LICENSE-MIT +25 -0
- package/licenses/cargo/95bd3988beee069fa2848f648dab43cc6e0b2add2ad6bcb17360caf749802bcc-LICENSE-APACHE +176 -0
- package/licenses/cargo/98181e7249d0c01737645ec982499ce99a0f07eb8f7d625b8840d799d10dbc01-LICENSE-MIT +25 -0
- package/licenses/cargo/98b52ccf20010b67d8fd3bdf151f50ecdfc01f25d6de190e015dd436d9f7ea0b-LICENSE +201 -0
- package/licenses/cargo/9e0dfd2dd4173a530e238cb6adb37aa78c34c6bc7444e0e10c1ab5d8881f63ba-LICENSE-MIT +25 -0
- package/licenses/cargo/a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2-LICENSE-APACHE +201 -0
- package/licenses/cargo/a825bd853ab71619a4923d7b4311221427848070ff44d990da39b0b274c1683f-LICENSE-MIT +21 -0
- package/licenses/cargo/a8ad31b1c3f40dca5a84119351b8fa8ddc868edd77fad8a8ebf6d8f2d16fa4ae-LICENSE-APACHE +201 -0
- package/licenses/cargo/a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5-LICENSE-APACHE +201 -0
- package/licenses/cargo/aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf-LICENSE-APACHE +201 -0
- package/licenses/cargo/ae9baa7beea910273c2f384c2a6b721fb7bd02bda3436074a1072e4ee689f985-LICENSE-MIT +25 -0
- package/licenses/cargo/aed7b1758e35afa0cd0fde059d61950747ca11cd0e5e169cb21c11608daed772-LICENSE +21 -0
- package/licenses/cargo/af59cea35d7f5e2777a713b8d155d65efa2c339eb43f3c14e868c6ac8506edad-LICENSE-MIT +26 -0
- package/licenses/cargo/b1181a40b2a7b25cf66fd01481713bc1005df082c53ef73e851e55071b102744-LICENSE +19 -0
- package/licenses/cargo/b29f8b01452350c20dd1af16ef83b598fea3053578ccc1c7a0ef40e57be2620f-LICENSE +12 -0
- package/licenses/cargo/bccaa8b6c09f94e81f06696e179dbe058464bbdfbc823b6d49cada1d71e84ac3-LICENSE-MIT +5 -0
- package/licenses/cargo/beb8e42e9d6b4284e03304d05a81a0755200a965fc8d0a5e0aea1e84cf805d6e-LICENSE +23 -0
- package/licenses/cargo/c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4-LICENSE +201 -0
- package/licenses/cargo/c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566-LICENSE-BOOST +23 -0
- package/licenses/cargo/cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30-LICENSE-APACHE +202 -0
- package/licenses/cargo/d2e7ec5355c96eeade56b09187ceb48a6a30299da3ce7531a66d3d11405ab963-LICENSE-MIT +25 -0
- package/licenses/cargo/db11fec9946737df39ca3898d9cd8c10ec6f6c3a884a6802b0ad0b81b4e8f23a-LICENSE +1 -0
- package/licenses/cargo/e36d55837170195cdf934aa6a48c0ad6efba1bde3f5b4a1b9259c171d5aeb647-LICENSE-APACHE +201 -0
- package/licenses/cargo/ea084a2373ebc1f0902c09266e7bf25a05ab3814c1805bb017ffa7308f90c061-LICENSE-MIT +21 -0
- package/licenses/cargo/ec353d4fecf7963b4c054384557e5dbc3c7a717997eb4a3815b315721a6aa75a-LICENSE-MIT +18 -0
- package/licenses/cargo/f71fd5946d6674af304514dc7b3b4272aa9117052dd347fb3a9dc9679f33d95f-LICENSE-MIT +26 -0
- package/licenses/cargo/f7db81051789b729fea528a63ec4c938fdcb93d9d61d97dc8cc2e9df6d47f2a1-LICENSE-UNICODE +39 -0
- package/licenses/cargo/fe5c9498374de7953275f83f35565b289f377ceab4a28d04c7da87723e02a372-LICENSE +20 -0
- package/licenses/cargo/ff8f68cb076caf8cefe7a6430d4ac086ce6af2ca8ce2c4e5a2004d4552ef52a2-LICENSE-MIT +25 -0
- package/licenses/components.json +5805 -0
- package/licenses/fallback/MIT.txt +21 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/backtrace/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/backtrace/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/compiler-builtins/LICENSE.txt +275 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/compiler-builtins/libm/LICENSE.txt +258 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/portable-simd/LICENSE-APACHE +202 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/portable-simd/LICENSE-MIT +19 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/portable-simd/crates/core_simd/LICENSE-APACHE +202 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/portable-simd/crates/core_simd/LICENSE-MIT +19 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/crates/core_arch/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/crates/core_arch/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/crates/intrinsic-test/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/stdarch/crates/intrinsic-test/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/addr2line-0.27.1/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/addr2line-0.27.1/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/adler2-2.0.1/LICENSE-0BSD +12 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/adler2-2.0.1/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/adler2-2.0.1/LICENSE-MIT +23 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/cc-1.2.0/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/cc-1.2.0/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/cfg-if-1.0.4/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/cfg-if-1.0.4/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/dlmalloc-0.2.14/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/dlmalloc-0.2.14/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/foldhash-0.2.0/LICENSE +19 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/getopts-0.2.24/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/getopts-0.2.24/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/gimli-0.34.0/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/gimli-0.34.0/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/hashbrown-0.17.1/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/hashbrown-0.17.1/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/hermit-abi-0.5.2/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/hermit-abi-0.5.2/LICENSE-MIT +23 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/libc-0.2.189/LICENSE-APACHE +176 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/libc-0.2.189/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/memchr-2.8.3/COPYING +3 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/memchr-2.8.3/LICENSE-MIT +21 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/memchr-2.8.3/UNLICENSE +24 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.9.1/LICENSE +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.9.1/LICENSE-APACHE.md +177 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.9.1/LICENSE-MIT.md +24 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.9.1/LICENSE-ZLIB.md +14 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/moto-rt-0.16.3/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/moto-rt-0.16.3/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/object-0.39.1/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/object-0.39.1/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/r-efi-5.3.0/AUTHORS +74 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/r-efi-alloc-2.1.0/AUTHORS +62 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand-0.9.5/COPYRIGHT +12 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand-0.9.5/LICENSE-APACHE +176 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand-0.9.5/LICENSE-MIT +26 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_core-0.9.5/COPYRIGHT +12 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_core-0.9.5/LICENSE-APACHE +187 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_core-0.9.5/LICENSE-MIT +26 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_xorshift-0.4.0/COPYRIGHT +12 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_xorshift-0.4.0/LICENSE-APACHE +176 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rand_xorshift-0.4.0/LICENSE-MIT +26 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rustc-demangle-0.1.28/LICENSE-APACHE +201 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rustc-demangle-0.1.28/LICENSE-MIT +25 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rustc-literal-escaper-0.0.8/LICENSE-APACHE +176 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/rustc-literal-escaper-0.0.8/LICENSE-MIT +23 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/shlex-1.3.0/LICENSE-APACHE +13 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/shlex-1.3.0/LICENSE-MIT +21 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/unwinding-0.2.10/LICENSE-APACHE +176 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/unwinding-0.2.10/LICENSE-MIT +23 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip2-1.0.4+wasi-0.2.12/LICENSE-APACHE +201 -0
- 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
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip2-1.0.4+wasi-0.2.12/LICENSE-MIT +23 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip3-0.7.1+wasi-0.3.0/LICENSE-APACHE +201 -0
- 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
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wasip3-0.7.1+wasi-0.3.0/LICENSE-MIT +23 -0
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wit-bindgen-0.57.1/LICENSE-APACHE +201 -0
- 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
- package/licenses/mixed-tools/rustPrefix/lib/rustlib/src/rust/library/vendor/wit-bindgen-0.57.1/LICENSE-MIT +23 -0
- package/licenses/mixed-tools/rustPrefix/share/doc/rust/COPYRIGHT-library.html +29378 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/AUTHORS +607 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/LICENSE +102 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/include/SDL/COPYING +24 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/compiler-rt/LICENSE.TXT +311 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/libc/musl/COPYRIGHT +193 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/libcxx/LICENSE.TXT +311 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/libcxxabi/LICENSE.TXT +311 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/libunwind/LICENSE.TXT +311 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/llvm-libc/LICENSE.TXT +278 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/mimalloc/LICENSE +21 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/openmp/LICENSE.TXT +361 -0
- package/licenses/mixed-tools/sdkPrefix/emscripten/system/lib/openmp/src/thirdparty/ittnotify/LICENSE.txt +8 -0
- package/package.json +85 -4
- package/trust/README.md +42 -0
- package/trust/canonicalize.mjs +37 -0
- package/trust/evaluate-worker.mjs +164 -0
- package/trust/index.d.mts +112 -0
- package/trust/run.mjs +850 -0
- package/trust/verify.py +470 -0
package/trust/verify.py
ADDED
|
@@ -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)
|