|
1 | 1 | # SPDX-License-Identifier: PMPL-1.0-or-later |
2 | | -# ============================================================================= |
3 | | -# A2ML Trustfile for ECHIDNA |
4 | | -# Neurosymbolic Theorem Proving Platform |
5 | | -# ============================================================================= |
6 | | - |
7 | | ---- |
8 | | -### [META] |
9 | | -id: "did:web:github.com:hyperpolymath:echidna" |
10 | | -version: "2026.3.6-final" |
11 | | -context: |
12 | | - - "https://a2ml.org/ns/v2" |
13 | | - - "https://leanprover-community.github.io/lean4" |
14 | | - - "https://hypatia.scans/ns/v1" |
15 | | - - "https://w3id.org/security/v4" |
16 | | - - "https://w3id.org/transparency/v1" |
17 | | -meta: |
18 | | - generated: "2026-03-06T00:00:00Z" |
19 | | - expires: "2027-03-06T00:00:00Z" |
20 | | - signature: |
21 | | - algorithm: "Ed448+Dilithium5" |
22 | | - value: | |
23 | | - -----BEGIN HYBRID SIGNATURE----- |
24 | | - BASE64_Ed448+Dilithium5_SIGNATURE_OF_THIS_FILE |
25 | | - -----END HYBRID SIGNATURE----- |
26 | | - signedBy: "did:web:github.com:hyperpolymath:echidna#primary-sig" |
27 | | - proof: "https://github.com/hyperpolymath/echidna/proofs/meta.lean" |
28 | | - fallbackSignature: |
29 | | - algorithm: "SPHINCS+" |
30 | | - value: | |
31 | | - -----BEGIN SPHINCS+ SIGNATURE----- |
32 | | - BASE64_SPHINCS+_SIGNATURE_OF_THIS_FILE |
33 | | - -----END SPHINCS+ SIGNATURE----- |
34 | | - integrity: |
35 | | - sha3-512: "HEX_SHA3_512_OF_THIS_FILE" |
36 | | - shake256: "BASE32_SHAKE256_OF_THIS_FILE" |
37 | | - ci_cd: |
38 | | - github_actions: "https://github.com/hyperpolymath/echidna/blob/main/.github/workflows/hypatia-scan.yml" |
39 | | - gitbot_fleet: "https://gitbot-fleet.hyperpolymath.dev/hooks/echidna" |
40 | | - hypatia_scan: "https://hypatia.scans/repos/echidna" |
41 | | - automation: |
42 | | - hashing: ["SHA3-512", "SHAKE256", "BLAKE3"] |
43 | | - diffing: "alert-on-unexpected-changes" |
44 | | - integrity: ["lean-proof-validity", "transparency-log-continuity"] |
45 | | - |
46 | | ---- |
47 | | -### [THREAT_MODEL] |
48 | | -adversaries: |
49 | | - - type: "APT" |
50 | | - mitigations: |
51 | | - - "Capability-based auth - No lateral movement." |
52 | | - - "Formal verification (30 provers) - No exploit primitives." |
53 | | - - "Transparency logs - Immediate detection." |
54 | | - - type: "Ransomware" |
55 | | - mitigations: |
56 | | - - "Sandboxed prover execution (Podman/Bubblewrap) - No breakout." |
57 | | - - "Immutable proof certificates - Instant verification." |
58 | | - - type: "Quantum Adversary" |
59 | | - mitigations: |
60 | | - - "Kyber1024 + Dilithium5 - PQ-resistant crypto." |
61 | | - - "SPHINCS+ fallback - Crypto agility." |
62 | | - - "GitBot-Fleet - Automated key rotation." |
63 | | - - type: "Supply Chain" |
64 | | - mitigations: |
65 | | - - "Chainguard Wolfi base images - CVE-free, rebuilt daily." |
66 | | - - "cerro-torre .ctp bundles - Signed and verified." |
67 | | - - "svalinn gateway - Rejects unsigned containers." |
68 | | - - type: "Proof Forgery" |
69 | | - mitigations: |
70 | | - - "Multi-prover cross-verification - No single point of trust." |
71 | | - - "5-level trust hierarchy - Confidence scoring." |
72 | | - - "Axiom usage tracking - 4 danger levels active." |
73 | | - |
74 | | ---- |
75 | | -### [TRUSTFILE] |
76 | | -issuer: "did:web:github.com:hyperpolymath:echidna" |
77 | | -keys: |
78 | | - - id: "#primary-sig" |
79 | | - type: "HybridKey2024" |
80 | | - classical: |
81 | | - algorithm: "Ed448" |
82 | | - publicKeyJwk: |
83 | | - kty: "OKP" |
84 | | - crv: "Ed448" |
85 | | - x: "BASE64URL_Ed448_PUBLIC_KEY" |
86 | | - postQuantum: |
87 | | - algorithm: "Dilithium5" |
88 | | - publicKeyJwk: |
89 | | - kty: "OKP" |
90 | | - crv: "Dilithium5" |
91 | | - x: "BASE64URL_Dilithium5_PUBLIC_KEY" |
92 | | - fallback: |
93 | | - algorithm: "SPHINCS+" |
94 | | - publicKeyJwk: |
95 | | - kty: "OKP" |
96 | | - crv: "SPHINCS+" |
97 | | - x: "BASE64URL_SPHINCS+_PUBLIC_KEY" |
98 | | - usage: ["authentication", "assertion"] |
99 | | -algorithms: |
100 | | - hashing: ["SHA3-512", "SHAKE256", "BLAKE3"] |
101 | | - kdf: "HKDF-SHAKE512" |
102 | | - rng: "ChaCha20-DRBG" |
103 | | -fallbacks: |
104 | | - signatures: ["Ed448+Dilithium5", "SPHINCS+"] |
105 | | - keyExchange: ["Kyber1024-X25519", "X25519"] |
106 | | - |
107 | | ---- |
108 | | -### [SSL/TLS] |
109 | | -ciphers: |
110 | | - - "TLS_AES_256_GCM_SHA384" |
111 | | - - "TLS_CHACHA20_POLY1305_SHA256" |
112 | | -groups: |
113 | | - - "X25519Kyber768Draft00" |
114 | | - - "secp256r1" |
115 | | -protocols: |
116 | | - - "TLSv1.3" |
117 | | -minimum_version: "1.2" |
118 | | -features: |
119 | | - ocspStapling: true |
120 | | - signedCertTimestamps: true |
121 | | - certificateTransparency: |
122 | | - monitoring: true |
123 | | - opportunistic_encryption: true |
124 | | - automatic_https_rewrites: true |
125 | | - always_use_https: true |
126 | | - |
127 | | ---- |
128 | | -### [NETWORK] |
129 | | -http2: true |
130 | | -http3: true |
131 | | -quic: true |
132 | | -zero_rtt: true |
133 | | -websockets: true |
134 | | -onion_routing: true |
135 | | -ipv6_compatibility: true |
136 | | -brotli: true |
137 | | - |
138 | | ---- |
139 | | -### [RESPONSE_HEADERS] |
140 | | -managed_transforms: |
141 | | - add: |
142 | | - - "X-Content-Type-Options: nosniff" |
143 | | - - "X-Frame-Options: SAMEORIGIN" |
144 | | - - "Referrer-Policy: strict-origin-when-cross-origin" |
145 | | - remove: |
146 | | - - "Server" |
147 | | - - "X-Powered-By" |
148 | | -custom_headers: |
149 | | - - name: "Permissions-Policy" |
150 | | - value: "camera=(), microphone=(), geolocation=(), payment=()" |
151 | | - - name: "Content-Security-Policy" |
152 | | - value: "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-ancestors 'self'; base-uri 'self'; form-action 'self'" |
153 | | - - name: "Cross-Origin-Opener-Policy" |
154 | | - value: "same-origin" |
155 | | - - name: "Cross-Origin-Embedder-Policy" |
156 | | - value: "require-corp" |
157 | | - - name: "Cross-Origin-Resource-Policy" |
158 | | - value: "same-origin" |
159 | | - |
160 | | ---- |
161 | | -### [CONTAINER_SUPPLY_CHAIN] |
162 | | -overview: | |
163 | | - Container supply-chain verification via the stapeln ecosystem. |
164 | | - All container images are built with Podman on Chainguard Wolfi base |
165 | | - images, signed as .ctp bundles via cerro-torre, and governed by |
166 | | - svalinn edge gateway policies. Runtime monitoring provided by vordr. |
167 | | - |
168 | | -runtime: |
169 | | - engine: "Podman" |
170 | | - policy: "Rootless containers only. Never Docker." |
171 | | - |
172 | | -base_images: |
173 | | - provider: "Chainguard" |
174 | | - registry: "cgr.dev/chainguard/" |
175 | | - allowed: |
176 | | - - "cgr.dev/chainguard/wolfi-base:latest" |
177 | | - - "cgr.dev/chainguard/static:latest" |
178 | | - policy: "Only Chainguard images permitted as base." |
179 | | - |
180 | | -verified_bundles: |
181 | | - format: ".ctp" |
182 | | - tool: "cerro-torre" |
183 | | - operations: |
184 | | - pack: "ct pack <image> -o <bundle.ctp>" |
185 | | - sign: "cerro-sign sign <bundle.ctp> --key-id echidna-release" |
186 | | - verify: "ct verify <bundle.ctp>" |
187 | | - attestations: |
188 | | - required: ["source-signature", "sbom-complete"] |
189 | | - recommended: ["security-audit", "reproducible-build"] |
190 | | - |
191 | | -gateway: |
192 | | - tool: "svalinn" |
193 | | - policy_file: "container/.gatekeeper.yaml" |
194 | | - capabilities: |
195 | | - - "JWT/OAuth2 authentication" |
196 | | - - "Rate limiting (per-client, per-endpoint)" |
197 | | - - "Container trust enforcement (.ctp signature verification)" |
198 | | - - "Request validation (body size, NaN/Inf rejection)" |
199 | | - - "CORS policy enforcement" |
200 | | - - "Audit logging for write operations" |
201 | | - |
202 | | -monitoring: |
203 | | - tool: "vordr" |
204 | | - config_file: "container/vordr.toml" |
205 | | - capabilities: |
206 | | - - "Health endpoint monitoring" |
207 | | - - "Container crash detection" |
208 | | - - "Resource usage thresholds (CPU, memory, disk)" |
209 | | - - "Structured JSON log output" |
210 | | - |
211 | | -signing: |
212 | | - algorithm: "Ed25519" |
213 | | - tool: "cerro-torre sign / cerro-sign" |
214 | | - key_id: "echidna-release" |
215 | | - |
216 | | -deployment: |
217 | | - tool: "k9-svc" |
218 | | - spec_file: "container/deploy.k9.ncl" |
219 | | - trust_level: "Hunt" |
220 | | - |
221 | | ---- |
222 | | -### [CI_CD] |
223 | | -github_actions: |
224 | | - name: "Trustfile Validation" |
225 | | - on: ["push", "pull_request"] |
226 | | - jobs: |
227 | | - validate: |
228 | | - runs-on: "ubuntu-latest" |
229 | | - steps: |
230 | | - - uses: "actions/checkout@v4" |
231 | | - - name: "Validate A2ML" |
232 | | - run: "a2ml validate .machine_readable/contractiles/trust/Trustfile.a2ml" |
233 | | - - name: "Hypatia Scan" |
234 | | - run: "hypatia scan --config hypatia.yml" |
235 | | -gitbot_fleet: |
236 | | - hooks: |
237 | | - - type: "pre-commit" |
238 | | - script: "a2ml validate .machine_readable/contractiles/trust/Trustfile.a2ml" |
239 | | - |
240 | | ---- |
241 | | -### [AUTOMATION] |
242 | | -hashing: |
243 | | - tool: "GitBot-Fleet" |
244 | | - triggers: ["pre-commit", "post-merge"] |
245 | | - algorithms: ["SHA3-512", "SHAKE256", "BLAKE3"] |
246 | | -diffing: |
247 | | - tool: "GitBot-Fleet" |
248 | | - rules: |
249 | | - - "alert-on-unexpected-changes" |
250 | | - - "require-proof-updates-for-crypto-changes" |
251 | | -integrity: |
252 | | - tool: "Hypatia + LEAN4" |
253 | | - checks: |
254 | | - - "transparency-log-continuity" |
255 | | - - "lean-proof-validity" |
256 | | - |
257 | | ---- |
258 | | -### [SIGNATURE_BLOCK] |
259 | | -primary: |
260 | | - algorithm: "Ed448+Dilithium5" |
261 | | - signature: | |
262 | | - -----BEGIN HYBRID SIGNATURE----- |
263 | | - BASE64_Ed448+Dilithium5_SIGNATURE_OF_THIS_FILE |
264 | | - -----END HYBRID SIGNATURE----- |
265 | | - signedBy: "did:web:github.com:hyperpolymath:echidna#primary-sig" |
266 | | -fallback: |
267 | | - algorithm: "SPHINCS+" |
268 | | - signature: | |
269 | | - -----BEGIN SPHINCS+ SIGNATURE----- |
270 | | - BASE64_SPHINCS+_SIGNATURE_OF_THIS_FILE |
271 | | - -----END SPHINCS+ SIGNATURE----- |
| 2 | +# Trustfile (A2ML Canonical) |
| 3 | +# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) |
| 4 | + |
| 5 | +@abstract: |
| 6 | +Trust and provenance verification for Echidna. |
| 7 | +Maximal trust by default — LLM may read, build, test, lint, format. |
| 8 | +@end |
| 9 | + |
| 10 | +@trust-level: maximal |
| 11 | +@trust-boundary: repo |
| 12 | +@trust-actions: [read, build, test, lint, format] |
| 13 | +@trust-deny: [delete-branch, force-push, modify-ci-secrets, publish] |
| 14 | + |
| 15 | +## Integrity |
| 16 | + |
| 17 | +### license-content |
| 18 | +- description: LICENSE contains expected SPDX identifier |
| 19 | +- run: grep -q 'SPDX\|License\|MIT\|Apache\|PMPL\|MPL' LICENSE |
| 20 | +- severity: critical |
| 21 | + |
| 22 | +### no-secrets-committed |
| 23 | +- description: No .env or credential files in repo |
| 24 | +- run: test ! -f .env && test ! -f credentials.json && test ! -f .env.local |
| 25 | +- severity: critical |
0 commit comments