# Spec 7: AerePQ-Screen (post-quantum compliance passport) - SUMMARY ## What was built Institution-grade post-quantum compliance passport for Aere Network, built ON the existing compliance stack (AereZKScreen, AereCompliancePool, AereSanctionsRegistry, AerePQCKeyRegistry) without modifying any deployed contract. Three new contracts + 1 test + 1 doc. ### Files (all new) - `aerenew/contracts/contracts/compliance/AereTrustRegistry.sol` - `aerenew/contracts/contracts/compliance/AereVerifiableCredential.sol` - `aerenew/contracts/contracts/compliance/AereBitstringStatusList.sol` - `aerenew/contracts/test/aere-pq-screen.test.js` - `aerenew/docs/AERE-PQ-SCREEN.md` ### 1. AereTrustRegistry (federated accredited issuers, eIDAS-2.0-in-spirit) - Foundation (Ownable, OZ v4.9.6) = trusted-list operator. Federated SET of accredited issuers. - Issuer entry: controller/address (issuer id), did:aere DID, scope (bytes32 credential-type tags), status (None/Active/Suspended/Revoked), optional Falcon-512 pqcKeyId in live AerePQCKeyRegistry. - Fail-closed isAccredited; append-only status + scope history (no silent rewrite); terminal revocation. - verifyIssuerSignature() routes Falcon-512 verify to live AerePQCKeyRegistry.verifyWithKey -> 0x0AE1. ### 2. AereVerifiableCredential (W3C VC 2.0 anchor + verify) - Credential struct: issuerId, subjectDidHash (did:aere, hash only, no PII), credentialType, validFrom/ validUntil, statusListId+statusIndex (W3C BitstringStatusListEntry), claimsHash (off-chain claims commit). - verifyPresented / isValid check: accredited + Falcon-512 sig via 0x0AE1 + within-validity + not-revoked. - anchorCredential fail-closed, relayable (authorship = PQC sig); isValid re-checks live (flips on suspend/revoke). anchorCredentialWithDid binds+emits did:aere string (enforces prefix + hash match). ### 3. AereBitstringStatusList (W3C Bitstring Status List + zk non-revocation) - On-chain bitset (256-bit words), Revocation (monotonic/terminal) or Suspension (reversible) purpose. - Controller-only mutation, no silent no-op. getWord exposes raw words for off-chain commitment. - zk non-revocation: INonRevocationVerifier (SP1 gateway ABI: verifyProof reverts on invalid), public-input shape DEFINED (chainId, statusListContract, statusListId, statusRoot, credentialCommitment, purpose), on-chain freshness binding (statusRoot==publishedRoot AND rootEpoch==epoch), fail-closed NonRevocationNotConfigured. The SP1 CIRCUIT itself = [MEASURE]. ## REAL test result `npx hardhat test test/aere-pq-screen.test.js` from aerenew/contracts: **12 passing (2s).** solc 0.8.23. Uses repo MockPQCPrecompile at 0x0AE1 (scheme 1 Falcon-512) via hardhat_setCode, same as erc8004-adapters test. Covers: accreditation lifecycle + append-only history + terminal revocation + fail-closed accreditation; PQC-signed credential verify+anchor (0x0AE1), relayable; revocation via status list flips verify to false; wrong-scope issuer cannot issue; tampered Falcon sig fails closed (nothing anchored); issuer-suspension fail-closed + reinstatement recovery; expiry rejection; did:aere subject binding (mismatch + non-aere rejected); zk non-revocation stub shape + freshness (mock SP1) + fail-closed unconfigured path. ## [MEASURE] flags - SP1 non-revocation circuit NOT implemented (interface + public-input shape + freshness binding are). - Bitstring status root is controller-attested via publishStatusRoot; on-chain/in-VM derivation pending. ## [VERIFY] flags - Exact W3C VC 2.0 JSON serialization / member names. - ONCHAINID claim-topic <-> credentialType mapping for concrete ERC-3643 interop. - Finalized did:aere method registration + full DID Core syntax validation. - W3C-recommended minimum status-list size (herd privacy) at deployment. ## Scope honesty - PQC signature path is REAL (Falcon-512 via live 0x0AE1); consensus stays classical ECDSA QBFT. - No PII on chain (DIDs are identifiers; claims committed by hash; status list is anonymous bitset). - Institutional ADOPTION / eIDAS accreditation is a partnership/regulatory matter, NOT claimed in code. - No em-dashes in prose; brand "Aere Network"/"Aere", ticker AERE.