[{"data":1,"prerenderedAt":585},["ShallowReactive",2],{"navigation_docs":3,"-zero-knowledge-cryptography-verify-before-decrypt":234,"-zero-knowledge-cryptography-verify-before-decrypt-surround":580},[4,26,47,68,89,114,135,164,181,210],{"title":5,"path":6,"stem":7,"children":8,"page":25},"1. Getting Started & Pricing","\u002Fgetting-started","01.getting-started",[9,13,17,21],{"title":10,"path":11,"stem":12},"1.1 5-Minute Quickstart","\u002Fgetting-started\u002Fquickstart","01.getting-started\u002F1.quickstart",{"title":14,"path":15,"stem":16},"1.2 Project Boards Setup","\u002Fgetting-started\u002Fboard-init","01.getting-started\u002F2.board-init",{"title":18,"path":19,"stem":20},"1.3 GitHub Actions & GitLab CI Runner Setup","\u002Fgetting-started\u002Fci-runners","01.getting-started\u002F3.ci-runners",{"title":22,"path":23,"stem":24},"1.4 Organization Credit Pool & Per-Function Credit Pricing","\u002Fgetting-started\u002Forg-credits-and-slack","01.getting-started\u002F4.org-credits-and-slack",false,{"title":27,"path":28,"stem":29,"children":30,"page":25},"2. Pair & Triad Programming","\u002Fpair-and-triad-programming","02.pair-and-triad-programming",[31,35,39,43],{"title":32,"path":33,"stem":34},"2.1 Cross-Model Pair & Triad Programming","\u002Fpair-and-triad-programming\u002Foverview","02.pair-and-triad-programming\u002F1.overview",{"title":36,"path":37,"stem":38},"2.2 Isolated Shadow Workspaces","\u002Fpair-and-triad-programming\u002Fshadow-jj-workspaces","02.pair-and-triad-programming\u002F2.shadow-jj-workspaces",{"title":40,"path":41,"stem":42},"2.3 Cryptographic File-Scope Leases & Small-Diff Gates","\u002Fpair-and-triad-programming\u002Ffile-scope-leases","02.pair-and-triad-programming\u002F3.file-scope-leases",{"title":44,"path":45,"stem":46},"2.4 Sub-Issue to Subagent Fan-Out & Delta Velocity","\u002Fpair-and-triad-programming\u002Fsub-issue-fanout","02.pair-and-triad-programming\u002F4.sub-issue-fanout",{"title":48,"path":49,"stem":50,"children":51,"page":25},"3. Declarative Workflow Policy","\u002Fworkflow-policy","03.workflow-policy",[52,56,60,64],{"title":53,"path":54,"stem":55},"3.1 Declarative Workflow Policy Schema","\u002Fworkflow-policy\u002Fschema-reference","03.workflow-policy\u002F1.schema-reference",{"title":57,"path":58,"stem":59},"3.2 Cryptographic Conformance Matrix & Memory Tombstones","\u002Fworkflow-policy\u002Fwp-01-to-wp-15-matrix","03.workflow-policy\u002F2.wp-01-to-wp-15-matrix",{"title":61,"path":62,"stem":63},"3.3 Two-Tier Organization Governance Lattice","\u002Fworkflow-policy\u002Forg-policy-floor","03.workflow-policy\u002F3.org-policy-floor",{"title":65,"path":66,"stem":67},"3.4 Trusted Handoff Hooks & Independent Verification","\u002Fworkflow-policy\u002Fhandoff-hooks-h1-to-h5","03.workflow-policy\u002F4.handoff-hooks-h1-to-h5",{"title":69,"path":70,"stem":71,"children":72,"page":25},"4. Visual Geometry & Copy Gates","\u002Fvisual-and-copy-tribunals","04.visual-and-copy-tribunals",[73,77,81,85],{"title":74,"path":75,"stem":76},"12-Tuple DOM Geometry (176\u002F176)","\u002Fvisual-and-copy-tribunals\u002Fui-gate-geometry","04.visual-and-copy-tribunals\u002F1.ui-gate-geometry",{"title":78,"path":79,"stem":80},"Vision-3 Geometry & Auto-Patch","\u002Fvisual-and-copy-tribunals\u002Fcross-model-design-tribunal","04.visual-and-copy-tribunals\u002F2.cross-model-design-tribunal",{"title":82,"path":83,"stem":84},"64\u002F64 Declaration Copy Gate","\u002Fvisual-and-copy-tribunals\u002Fdeclaration-copy-gate","04.visual-and-copy-tribunals\u002F3.declaration-copy-gate",{"title":86,"path":87,"stem":88},"Synthetic CI Canary","\u002Fvisual-and-copy-tribunals\u002Fsynthetic-ci-canary","04.visual-and-copy-tribunals\u002F4.synthetic-ci-canary",{"title":90,"path":91,"stem":92,"children":93,"page":25},"5. Autonomous AI Program Manager","\u002Fdelivery-program-manager","05.delivery-program-manager",[94,98,102,106,110],{"title":95,"path":96,"stem":97},"Overview: Dual-Brain AI PM","\u002Fdelivery-program-manager\u002Foverview","05.delivery-program-manager\u002F1.overview",{"title":99,"path":100,"stem":101},"Executable Tickets & Auto-Splitting","\u002Fdelivery-program-manager\u002Fchinwag-tasks-and-never-stop","05.delivery-program-manager\u002F2.chinwag-tasks-and-never-stop",{"title":103,"path":104,"stem":105},".codegraph & FinOps Routing","\u002Fdelivery-program-manager\u002Fcodegraph-and-finops-arbitrage","05.delivery-program-manager\u002F3.codegraph-and-finops-arbitrage",{"title":107,"path":108,"stem":109},"++ Triage & CI Recovery","\u002Fdelivery-program-manager\u002Fplus-plus-ci-triage","05.delivery-program-manager\u002F4.plus-plus-ci-triage",{"title":111,"path":112,"stem":113},"Flight Deck & Trajectory Time-Travel","\u002Fdelivery-program-manager\u002Fflight-deck-and-time-travel","05.delivery-program-manager\u002F5.flight-deck-and-time-travel",{"title":115,"path":116,"stem":117,"children":118,"page":25},"6. The Chinwag Way & Scrimmages","\u002Fthe-chinwag-way","06.the-chinwag-way",[119,123,127,131],{"title":120,"path":121,"stem":122},"Academic Foundations","\u002Fthe-chinwag-way\u002Facademic-foundations","06.the-chinwag-way\u002F1.academic-foundations",{"title":124,"path":125,"stem":126},"Chips (◈) & 7-Day Survival","\u002Fthe-chinwag-way\u002Fchips-and-7day-survival","06.the-chinwag-way\u002F2.chips-and-7day-survival",{"title":128,"path":129,"stem":130},"Sealed Card (.cwcard.png) Drills","\u002Fthe-chinwag-way\u002Fsealed-card-handoff-drills","06.the-chinwag-way\u002F3.sealed-card-handoff-drills",{"title":132,"path":133,"stem":134},"Calibration Scrimmages","\u002Fthe-chinwag-way\u002Fcalibration-scrimmages","06.the-chinwag-way\u002F4.calibration-scrimmages",{"title":136,"path":137,"stem":138,"children":139,"page":25},"7. Zero-Knowledge Cryptography","\u002Fzero-knowledge-cryptography","07.zero-knowledge-cryptography",[140,144,148,152,156,160],{"title":141,"path":142,"stem":143},"PQ-HPKE Wire Envelope","\u002Fzero-knowledge-cryptography\u002Fpq-hpke-envelope","07.zero-knowledge-cryptography\u002F1.pq-hpke-envelope",{"title":145,"path":146,"stem":147},"Verify-Before-Decrypt (K1+K2)","\u002Fzero-knowledge-cryptography\u002Fverify-before-decrypt","07.zero-knowledge-cryptography\u002F2.verify-before-decrypt",{"title":149,"path":150,"stem":151},"Blinded Commitments & 128B Flywheel","\u002Fzero-knowledge-cryptography\u002Fblind-commitments","07.zero-knowledge-cryptography\u002F3.blind-commitments",{"title":153,"path":154,"stem":155},"Local Viewer & CISO DPA","\u002Fzero-knowledge-cryptography\u002Flocal-viewer-and-dpa","07.zero-knowledge-cryptography\u002F4.local-viewer-and-dpa",{"title":157,"path":158,"stem":159},"A.509 Agent Passports","\u002Fzero-knowledge-cryptography\u002Fa509-agent-pkix","07.zero-knowledge-cryptography\u002F5.a509-agent-pkix",{"title":161,"path":162,"stem":163},"chinwag-acu & CISO Kill Switch","\u002Fzero-knowledge-cryptography\u002Fchinwag-acu","07.zero-knowledge-cryptography\u002F6.chinwag-acu",{"title":165,"path":166,"stem":167,"children":168,"page":25},"8. E2EE Mesh & Extension SDK","\u002Fmesh-and-extensions","08.mesh-and-extensions",[169,173,177],{"title":170,"path":171,"stem":172},"chinwag-mesh & 3-Repo Time Machine","\u002Fmesh-and-extensions\u002Fsdk-and-cwcard-png-transport","08.mesh-and-extensions\u002F1.sdk-and-cwcard-png-transport",{"title":174,"path":175,"stem":176},"warroom & whisper Extensions","\u002Fmesh-and-extensions\u002Fwarroom-and-whisper","08.mesh-and-extensions\u002F2.warroom-and-whisper",{"title":178,"path":179,"stem":180},"teleport, shroud & vault","\u002Fmesh-and-extensions\u002Fgit-bundle-and-vault","08.mesh-and-extensions\u002F3.git-bundle-and-vault",{"title":182,"path":183,"stem":184,"children":185,"page":25},"9. CLI & GraphQL Reference","\u002Fcli-and-graphql-reference","09.cli-and-graphql-reference",[186,190,194,198,202,206],{"title":187,"path":188,"stem":189},"chinwag tasks & task","\u002Fcli-and-graphql-reference\u002Fchinwag-task","09.cli-and-graphql-reference\u002F1.chinwag-task",{"title":191,"path":192,"stem":193},"chinwag board & GraphQL","\u002Fcli-and-graphql-reference\u002Fchinwag-board","09.cli-and-graphql-reference\u002F2.chinwag-board",{"title":195,"path":196,"stem":197},"chinwag pair & triad","\u002Fcli-and-graphql-reference\u002Fchinwag-pair-and-triad","09.cli-and-graphql-reference\u002F3.chinwag-pair-and-triad",{"title":199,"path":200,"stem":201},"chinwag bus","\u002Fcli-and-graphql-reference\u002Fchinwag-bus","09.cli-and-graphql-reference\u002F4.chinwag-bus",{"title":203,"path":204,"stem":205},"chinwag-ci, fork-run & ui-gate","\u002Fcli-and-graphql-reference\u002Fchinwag-ci-and-uigate","09.cli-and-graphql-reference\u002F5.chinwag-ci-and-uigate",{"title":207,"path":208,"stem":209},"chinwag memory & tombstone","\u002Fcli-and-graphql-reference\u002Fchinwag-memory","09.cli-and-graphql-reference\u002F6.chinwag-memory",{"title":211,"path":212,"stem":213,"children":214,"page":-1},"10. Architecture PRDs","\u002Fprds","10.prds",[215,218,222,226,230],{"title":216,"path":212,"stem":217},"10.0 Ratified Architecture PRDs","10.prds\u002Findex",{"title":219,"path":220,"stem":221},"10.1 Ephemeral Tart Cleanroom VMs & Declarative Nix","\u002Fprds\u002Ftart-cleanroom-vms","10.prds\u002F1.tart-cleanroom-vms",{"title":223,"path":224,"stem":225},"10.2 Executable Delivery Boards & Proof-of-Green","\u002Fprds\u002Fdelivery-executable-boards","10.prds\u002F2.delivery-executable-boards",{"title":227,"path":228,"stem":229},"10.3 Cursor Agent SDK Importer & Sanitizer","\u002Fprds\u002Fcursor-agent-sdk-importer","10.prds\u002F3.cursor-agent-sdk-importer",{"title":231,"path":232,"stem":233},"10.4 Chinwag Local Web App & Command Center","\u002Fprds\u002Fhuman-command-center-ui","10.prds\u002F4.human-command-center-ui",{"id":235,"title":236,"body":237,"command":250,"description":573,"extension":574,"links":575,"meta":576,"navigation":577,"path":146,"seo":578,"stem":147,"__hash__":579},"docs\u002F07.zero-knowledge-cryptography\u002F2.verify-before-decrypt.md","7.2 Verify-Before-Decrypt Dual Ed25519 Signatures",{"type":238,"value":239,"toc":565},"minimark",[240,244,251,258,294,297,302,312,314,324,393,395,402,416,434,521,523,527,561],[241,242,236],"h1",{"id":243},"_72-verify-before-decrypt-dual-ed25519-signatures",[245,246,247],"p",{},[248,249,250],"code",{},"SignedHpkeBlobV1 · OriginSigV1 + CloudRelayBlobSigV1 (0.09ms)",[245,252,253,254,257],{},"Many encrypted protocols attempt key decapsulation first and only check sender authenticity after decrypting the inner payload. That ordering exposes the endpoint's lattice decapsulator (",[248,255,256],{},"ML-KEM-768","), heap allocator, and parser to unauthenticated network packets · creating a denial-of-service and chosen-ciphertext oracle surface.",[245,259,260,261,264,265,293],{},"Chinwag enforces a strict cryptographic invariant (",[248,262,263],{},"INV-VERIFY-BEFORE-DECRYPT-01","): ",[266,267,268,269,272,273,276,277,280,281,284,285,288,289,292],"strong",{},"no frame is ever passed to ",[248,270,271],{},"X25519MLKEM768::decap()"," or ",[248,274,275],{},"ChaCha20Poly1305::open()"," until both outer ",[248,278,279],{},"Ed25519"," signatures (",[248,282,283],{},"K1"," Origin + ",[248,286,287],{},"K2"," Relay\u002FDomain) verify in strict non-malleable mode (",[248,290,291],{},"0.09ms",")",".",[295,296],"hr",{},[298,299,301],"h2",{"id":300},"sign-then-encrypt-then-dual-sign-pipeline","Sign-then-Encrypt-then-Dual-Sign Pipeline",[303,304,310],"pre",{"className":305,"code":307,"language":308,"meta":309},[306],"language-text","SENDER WORKSTATION \u002F CI RUNNER\n  1. Construct canonical 7-field payload (sender \u003CSEAT>#\u003CINSTANCE>, recipient, task, body, ts)\n  2. Sign plaintext canonical digest with K1 (Seat Ed25519 Key) -> Inner Authenticity Binding\n  3. Seal payload with X25519MLKEM768 + ChaCha20Poly1305 (RFC 9180 HPKE)\n  4. Sign outer header (Bytes 0..1252) || BLAKE3(ciphertext) with K1 -> OriginSigV1 (64 B)\n  5. Attach K2 Org\u002FRelay Domain Attestation Signature -> CloudRelayBlobSigV1 (64 B)\n  │\n  ▼ (Wire Transmission over iroh QUIC \u002F Cloudflare Edge \u002F .cwcard.png)\n  │\nRECIPIENT WORKSTATION \u002F AGENT DAEMON\n  1. Check 8-byte Magic (\"CHWGHPKE\") & monotonic sequence window (\u003C 0.005ms)\n  2. Verify K1 OriginSigV1 + K2 CloudRelayBlobSigV1 via ed25519-dalek verify_strict (0.09ms)\n     ├──► IF INVALID: Drop frame at socket boundary! Zero heap allocation, zero HPKE decap.\n     └──► IF VALID:   Proceed to Step 3.\n  3. Decapsulate X25519MLKEM768 shared secret & open ChaCha20Poly1305 AEAD (0.41ms)\n  4. Verify inner 7-field sender \u003CSEAT>#\u003CINSTANCE> matches outer K1 certificate subject.\n","text","",[248,311,307],{"__ignoreMap":309},[295,313],{},[298,315,317,318,320,321,323],{"id":316},"why-dual-signatures-k1-k2","Why Dual Signatures (",[248,319,283],{}," + ",[248,322,287],{},")?",[325,326,327,344],"table",{},[328,329,330],"thead",{},[331,332,333,338,341],"tr",{},[334,335,337],"th",{"align":336},"left","Signature Slot",[334,339,340],{"align":336},"Signer Key",[334,342,343],{"align":336},"What It Proves",[345,346,347,376],"tbody",{},[331,348,349,360,369],{},[350,351,352],"td",{"align":336},[266,353,354,356,357,292],{},[248,355,283],{}," (",[248,358,359],{},"OriginSigV1",[350,361,362,363,365,366,292],{"align":336},"Hardware\u002FOS Keychain ",[248,364,279],{}," key of the sending human developer or agent seat (",[248,367,368],{},"~\u002F.chinwag\u002Fsigning\u002F\u003Cseat>_ed25519",[350,370,371,372,375],{"align":336},"Proves that the specific authorized seat in ",[248,373,374],{},".chinwag\u002Fallowed_signers"," authored and sealed this exact ciphertext.",[331,377,378,387,390],{},[350,379,380],{"align":336},[266,381,382,356,384,292],{},[248,383,287],{},[248,385,386],{},"CloudRelayBlobSigV1",[350,388,389],{"align":336},"Organization Enrollment Key or Edge Ingress Attestation Key",[350,391,392],{"align":336},"Proves tenant membership, rate-limit token validity, and ingress timestamp ordering so cross-tenant replay packets are rejected at the edge.",[295,394],{},[298,396,398,399,292],{"id":397},"strict-non-malleability-verify_strict","Strict Non-Malleability (",[248,400,401],{},"verify_strict",[245,403,404,405,407,408,411,412,415],{},"All ",[248,406,279],{}," verifications in ",[248,409,410],{},"chinwag-crypto"," use ",[248,413,414],{},"ed25519_dalek::VerifyingKey::verify_strict"," (RFC 8032 cofactorless verification with small-order point rejection):",[417,418,419,427],"ul",{},[420,421,422,423,426],"li",{},"Rejects small-order public keys (",[248,424,425],{},"8-torsion"," points) that could otherwise validate forged signatures.",[420,428,429,430,433],{},"Enforces canonical scalar encoding ",[248,431,432],{},"S \u003C L"," to prevent signature malleability attacks on signed task receipts.",[303,435,439],{"className":436,"code":437,"language":438,"meta":309,"style":309},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pub fn verify_before_decrypt(\n    frame: &SignedHpkeBlobV1,\n    allowed_signers: &AllowedSignersRing,\n) -> Result\u003CVerifiedCiphertextRef\u003C'_>, CryptoError> {\n    let k1_vk = allowed_signers.lookup_strict(&frame.sender_key_id)?;\n    let k2_vk = allowed_signers.lookup_domain_strict(&frame.domain_key_id)?;\n\n    let transcript = frame.signing_transcript_blake3();\n    k1_vk.verify_strict(&transcript, &frame.origin_sig_k1)?;\n    k2_vk.verify_strict(&transcript, &frame.relay_sig_k2)?;\n\n    Ok(frame.as_verified_ciphertext())\n}\n","rust",[248,440,441,449,455,461,467,473,479,486,492,498,504,509,515],{"__ignoreMap":309},[442,443,446],"span",{"class":444,"line":445},"line",1,[442,447,448],{},"pub fn verify_before_decrypt(\n",[442,450,452],{"class":444,"line":451},2,[442,453,454],{},"    frame: &SignedHpkeBlobV1,\n",[442,456,458],{"class":444,"line":457},3,[442,459,460],{},"    allowed_signers: &AllowedSignersRing,\n",[442,462,464],{"class":444,"line":463},4,[442,465,466],{},") -> Result\u003CVerifiedCiphertextRef\u003C'_>, CryptoError> {\n",[442,468,470],{"class":444,"line":469},5,[442,471,472],{},"    let k1_vk = allowed_signers.lookup_strict(&frame.sender_key_id)?;\n",[442,474,476],{"class":444,"line":475},6,[442,477,478],{},"    let k2_vk = allowed_signers.lookup_domain_strict(&frame.domain_key_id)?;\n",[442,480,482],{"class":444,"line":481},7,[442,483,485],{"emptyLinePlaceholder":484},true,"\n",[442,487,489],{"class":444,"line":488},8,[442,490,491],{},"    let transcript = frame.signing_transcript_blake3();\n",[442,493,495],{"class":444,"line":494},9,[442,496,497],{},"    k1_vk.verify_strict(&transcript, &frame.origin_sig_k1)?;\n",[442,499,501],{"class":444,"line":500},10,[442,502,503],{},"    k2_vk.verify_strict(&transcript, &frame.relay_sig_k2)?;\n",[442,505,507],{"class":444,"line":506},11,[442,508,485],{"emptyLinePlaceholder":484},[442,510,512],{"class":444,"line":511},12,[442,513,514],{},"    Ok(frame.as_verified_ciphertext())\n",[442,516,518],{"class":444,"line":517},13,[442,519,520],{},"}\n",[295,522],{},[298,524,526],{"id":525},"next-steps","Next Steps",[417,528,529,547],{},[420,530,531,534,535],{},[266,532,533],{},"Next:"," ",[536,537,538,539,542,543,546],"a",{"href":150},"Keyed ",[248,540,541],{},"BLAKE3"," Blinded Commitments & The ",[248,544,545],{},"128-Byte"," Zero-Leak Learning Flywheel",[420,548,549,534,555],{},[266,550,551,552,554],{},"Ready for ",[248,553,291],{}," cryptographic provenance on every agent action?",[536,556,560],{"href":557,"rel":558},"https:\u002F\u002Fchinwag.sh\u002Fpricing",[559],"nofollow","Reserve Your Organization Credit Pack →",[562,563,564],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":309,"searchDepth":451,"depth":451,"links":566},[567,568,570,572],{"id":300,"depth":451,"text":301},{"id":316,"depth":451,"text":569},"Why Dual Signatures (K1 + K2)?",{"id":397,"depth":451,"text":571},"Strict Non-Malleability (verify_strict)",{"id":525,"depth":451,"text":526},"Why Chinwag enforces Sign-then-Encrypt-then-Dual-Sign (INV-VERIFY-BEFORE-DECRYPT-01) so untrusted network frames never reach the ML-KEM-768 decapsulator.","md",null,{},{"title":145},{"title":236,"description":573},"dk7BtlXBxylHGONJNYE-3oa0O9TML7epYsAxFsWLDY8",[581,583],{"title":141,"path":142,"stem":143,"description":582,"children":-1},"Complete byte-level specification of Chinwag's +1,408-byte hybrid post-quantum RFC 9180 HPKE envelope (X25519MLKEM768 + HKDF-SHA256 + ChaCha20Poly1305).",{"title":149,"path":150,"stem":151,"description":584,"children":-1},"How Chinwag routes encrypted frames using blinded 32-byte BLAKE3 commitments (T_coalesce) and improves model routing with a 128-byte zero-code telemetry struct.",1794371826571]