From 9184f528874cbd35be2451ebca9ec861324ccca5 Mon Sep 17 00:00:00 2001 From: rongquan1 Date: Tue, 16 Jun 2026 10:24:12 +0800 Subject: [PATCH] test: add OpenAttestation v2 + W3C VC verification e2e suites Adds read-only verification e2e coverage (no MetaMask) for issuer identity, document status, and document integrity across OA v2 (DNS-TXT document store / token registry, DNS-DID, OCSP, revocation store) and W3C VCs (ecdsa-sd-2023, bbs-2023, BitstringStatusList, TransferableRecords), with happy + error cases. - Local Hardhat fixtures + setup scripts (separate document-store deployer; token-registry mints) and DNS/OCSP route mocks - Dedicated Playwright config + GitHub Actions workflow (kept separate from the existing transferable-record e2e suite) - App: skip network-select for OCSP/DID-signed docs, use embedded chainId, clean error classification, and surface W3C TransferableRecords reasons verbatim in the error card; renderer test ids - package.json e2e:verify script; trustvc ^2.14.1 Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/e2e-verify.yml | 78 +++ .github/workflows/e2e.yml | 2 - .../oa/oa_v2_dnsdid_identity_invalid.json | 42 ++ e2e/fixtures/local/oa/oa_v2_dnsdid_ocsp.json | 43 ++ ...v2_dnsdid_revocationstore_no_contract.json | 47 ++ ...v2_dnsdid_revocationstore_not_revoked.json | 47 ++ .../oa_v2_dnsdid_revocationstore_revoked.json | 47 ++ .../local/oa/oa_v2_dnsdid_tampered.json | 42 ++ e2e/fixtures/local/oa/oa_v2_dnsdid_valid.json | 42 ++ .../oa/oa_v2_dnstxt_docstore_no_contract.json | 33 ++ .../oa/oa_v2_dnstxt_docstore_not_issued.json | 34 ++ .../oa/oa_v2_dnstxt_docstore_revoked.json | 34 ++ .../oa/oa_v2_dnstxt_docstore_tampered.json | 34 ++ .../local/oa/oa_v2_dnstxt_docstore_valid.json | 34 ++ .../oa/oa_v2_dnstxt_identity_invalid.json | 33 ++ ...a_v2_dnstxt_tokenregistry_no_contract.json | 33 ++ ...oa_v2_dnstxt_tokenregistry_not_minted.json | 33 ++ .../oa/oa_v2_dnstxt_tokenregistry_valid.json | 33 ++ ...idweb_ecdsa_tokenregistry_no_contract.json | 57 ++ ...didweb_ecdsa_tokenregistry_not_minted.json | 57 ++ ...c_tr_didweb_ecdsa_tokenregistry_valid.json | 57 ++ .../w3c/w3c_vc_didweb_bbs2023_tampered.json | 46 ++ .../w3c/w3c_vc_didweb_bbs2023_valid.json | 46 ++ ...vc_didweb_ecdsa_bitstring_not_revoked.json | 54 ++ ...w3c_vc_didweb_ecdsa_bitstring_revoked.json | 54 ++ .../w3c_vc_didweb_ecdsa_identity_invalid.json | 47 ++ .../w3c/w3c_vc_didweb_ecdsa_tampered.json | 47 ++ .../local/w3c/w3c_vc_didweb_ecdsa_valid.json | 47 ++ e2e/helpers/verify.ts | 139 +++++ e2e/playwright.config.ts | 2 + e2e/playwright.verify.config.ts | 32 + e2e/setup-contracts.cjs | 12 + e2e/setup-document-store.cjs | 86 +++ e2e/tests/verify-oa.spec.ts | 117 ++++ e2e/tests/verify-w3c.spec.ts | 70 +++ package-lock.json | 549 ++++++------------ package.json | 7 +- .../home/VerifySection/DocumentRenderer.tsx | 11 +- .../home/VerifySection/VerifyError.tsx | 10 +- .../home/VerifySection/VerifySection.tsx | 7 +- .../home/VerifySection/useVerify.test.ts | 216 ++++++- .../home/VerifySection/useVerify.ts | 173 +++++- 42 files changed, 2241 insertions(+), 393 deletions(-) create mode 100644 .github/workflows/e2e-verify.yml create mode 100644 e2e/fixtures/local/oa/oa_v2_dnsdid_identity_invalid.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnsdid_ocsp.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_no_contract.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_not_revoked.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_revoked.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnsdid_tampered.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnsdid_valid.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_no_contract.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_not_issued.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_revoked.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_tampered.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_valid.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnstxt_identity_invalid.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_no_contract.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_not_minted.json create mode 100644 e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_valid.json create mode 100644 e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_no_contract.json create mode 100644 e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_not_minted.json create mode 100644 e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_valid.json create mode 100644 e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_tampered.json create mode 100644 e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_valid.json create mode 100644 e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_not_revoked.json create mode 100644 e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_revoked.json create mode 100644 e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_identity_invalid.json create mode 100644 e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_tampered.json create mode 100644 e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_valid.json create mode 100644 e2e/helpers/verify.ts create mode 100644 e2e/playwright.verify.config.ts create mode 100644 e2e/setup-document-store.cjs create mode 100644 e2e/tests/verify-oa.spec.ts create mode 100644 e2e/tests/verify-w3c.spec.ts diff --git a/.github/workflows/e2e-verify.yml b/.github/workflows/e2e-verify.yml new file mode 100644 index 0000000..33c2083 --- /dev/null +++ b/.github/workflows/e2e-verify.yml @@ -0,0 +1,78 @@ +name: E2E Verification Tests + +on: + pull_request: + branches: [main, develop] + workflow_dispatch: + +# Read-only document verification suite (OA + W3C VC). No MetaMask, runs headless. +jobs: + e2e-verify: + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Install Playwright browsers + run: npx playwright install chromium --with-deps + + # ── Local chain + contracts ────────────────────────────────────────── + - name: Start Hardhat node + run: npx hardhat node & + env: + NODE_OPTIONS: --max-old-space-size=4096 + + - name: Wait for Hardhat node + run: npx wait-on http://127.0.0.1:8545 --timeout 180000 + + # Token registry (token-registry fixtures) + document store (doc-store fixtures) + - name: Deploy contracts and mint tokens + run: node e2e/setup-contracts.cjs + + - name: Deploy document store + run: node e2e/setup-document-store.cjs + + # ── Dev server ─────────────────────────────────────────────────────── + - name: Start dev server + run: npm run dev & + env: + VITE_APP_NETWORK: local + VITE_NETWORK_TYPE: testnet + VITE_RPC_URL_1337: http://127.0.0.1:8545 + + - name: Wait for dev server + run: npx wait-on http://localhost:5173 --timeout 180000 + + # ── Verification tests (headless, no MetaMask) ─────────────────────── + - name: Run verification E2E tests + run: npm run e2e:verify + env: + CI: 'true' + + - name: Upload Playwright report + if: always() + uses: actions/upload-artifact@v4 + with: + name: playwright-report-verify + path: playwright-report-verify/ + retention-days: 7 + + - name: Upload screenshots on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: verify-test-results + path: test-results/ + retention-days: 7 + if-no-files-found: ignore diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index e63706c..8ff985e 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -1,8 +1,6 @@ name: E2E Tests on: - push: - branches: [main, develop] pull_request: branches: [main, develop] workflow_dispatch: # allow manual trigger diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_identity_invalid.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_identity_invalid.json new file mode 100644 index 0000000..e09a353 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_identity_invalid.json @@ -0,0 +1,42 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "1b342155-ae58-460d-8f41-8dea520a2126:string:EMBEDDED_RENDERER", + "name": "0c7723fd-b370-4e05-951c-fd79a4bce3a6:string:CHAFTA_COO", + "url": "c642e700-25af-48d2-a84a-316d3a866489:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "08c78bbc-2bc4-4ba3-a2a3-b1818613a639:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "4ff2f582-363b-463f-a3a3-bceb62124600:string:My Test Issuer", + "revocation": { + "type": "9fa71f1e-58fe-490f-ba97-27cb1edacb0a:string:NONE" + }, + "identityProof": { + "type": "903996ec-0287-452b-8695-03413955f1ea:string:DNS-DID", + "location": "5e5a824c-2167-4964-a7ff-2fc959e0274f:string:demo-invalid-identity.tradetrust.io", + "key": "638f054c-b2bc-4f90-991b-f9ff854bff89:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "recipient": { + "name": "d2e13886-5e36-4f72-8e93-ca75c3fe6958:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "87ba72e7e1047c1e3b177ade8f8066f9c20ad1a67922ab13127cc7d6c6cbb4e2", + "proof": [], + "merkleRoot": "87ba72e7e1047c1e3b177ade8f8066f9c20ad1a67922ab13127cc7d6c6cbb4e2" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-10T07:20:50.260Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0xda86a67b0217bb162d2d1f8003b42231c89df3b924c8aab410cee9089516321826aeff00d516f3024af96f87bd30361f111b85e0b8b62537e01ba2a1225c5f2e1c" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_ocsp.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_ocsp.json new file mode 100644 index 0000000..4e61740 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_ocsp.json @@ -0,0 +1,43 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "8b65fbfd-95fe-43da-83ea-166651b0d42e:string:EMBEDDED_RENDERER", + "name": "11390281-0707-416f-8dff-9bf2affc0502:string:CHAFTA_COO", + "url": "215657ae-6c5a-4486-8348-36876ee6048a:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "35b4a5e9-43a9-4726-9110-8bd5dc1a1bcb:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "d045c76b-c85b-4d30-b700-1e319016973d:string:My Test Issuer", + "revocation": { + "type": "2d5e29c4-1708-4363-9975-254988772f0a:string:OCSP_RESPONDER", + "location": "7f65a7a9-aa58-4fcf-9258-96e03317b892:string:https://ocsp.example.com" + }, + "identityProof": { + "type": "a83ea305-ab4e-4a14-9e90-f85f74b1ab54:string:DNS-DID", + "location": "980fdfcd-323e-4285-81a5-a2325dc1e061:string:example.tradetrust.io", + "key": "06855d31-09d6-455a-8675-e61a773a1ccd:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "recipient": { + "name": "74539e12-f986-4f44-b4ab-f9a8b066fdb7:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "b2c5fb52c6f2a85638c0ebf488fab92453e22e5728a5ea0e3d8d5076f39279b4", + "proof": [], + "merkleRoot": "b2c5fb52c6f2a85638c0ebf488fab92453e22e5728a5ea0e3d8d5076f39279b4" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-10T07:21:02.257Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x41d751c6da151a8d215b957a09d112cf7afa686559695cdeb9e10b4efaceb153619be2ffc2dcd4f6a7665478d74a21ae254198b57fc10d6d2877557e9f4707c91b" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_no_contract.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_no_contract.json new file mode 100644 index 0000000..f3f615f --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_no_contract.json @@ -0,0 +1,47 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "24b31182-8fc5-42b5-bd3a-682406a275bd:string:EMBEDDED_RENDERER", + "name": "aae74ca8-98ea-4350-91cb-b22422bd9c88:string:CHAFTA_COO", + "url": "52e15512-769e-4aa0-a237-28cc8fedfbe1:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "2a8696cf-5fac-470b-b060-d4abe482c996:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "a84fbd45-0dec-4f4c-a81f-58b363609ecd:string:X", + "revocation": { + "type": "36ae7a9f-c426-409c-9932-447e6ae15e36:string:REVOCATION_STORE", + "location": "7cd4e446-bd9c-47f0-8ce7-b01a29d027d0:string:0x000000000000000000000000000000000000bEEF" + }, + "identityProof": { + "type": "74616d86-0f3b-4db1-b84c-e0ee60ecfffe:string:DNS-DID", + "location": "eeae5cd8-f674-489c-a117-ad89b5c64c84:string:example.tradetrust.io", + "key": "bbf3c814-3a34-4779-becb-888adbf507bd:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "network": { + "chain": "964da269-6bd6-4417-9b87-35838851e5e5:string:ETH", + "chainId": "6af3d1a2-ce8f-4dcb-8f85-a45e58a0891a:string:1337" + }, + "recipient": { + "name": "2429d6b5-09a4-41a2-b07a-3c9800d051f2:string:x" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "88b79390bcb1386a5beae170c39c68ce6b8112459e41c60829289169507b4c23", + "proof": [], + "merkleRoot": "88b79390bcb1386a5beae170c39c68ce6b8112459e41c60829289169507b4c23" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-15T09:17:59.589Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x795fab7fa9090837ad0eced7c5854bd90a91f8bfe999c90d4fee287c1861766931e44e6042017c4bc7c1dc09617affc06b0921dceb3db4402292f8ae3dc81a1f1b" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_not_revoked.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_not_revoked.json new file mode 100644 index 0000000..a5801e7 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_not_revoked.json @@ -0,0 +1,47 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "ce7bdb69-539e-428c-8528-d6ad178dbc51:string:EMBEDDED_RENDERER", + "name": "6d3a8381-f4ba-4be9-8c36-fa175cf67e21:string:CHAFTA_COO", + "url": "86779cea-34d0-4d91-ae3a-ed2c9240ef86:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "cfe068a5-ee6c-4611-9827-d94ba8a1f43a:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "ae235687-1dec-4f7d-b305-bf02b12ab6b4:string:X", + "revocation": { + "type": "51756339-e828-4d18-8104-cc7f683ea070:string:REVOCATION_STORE", + "location": "60a92a70-2dea-494c-ae03-30209af13611:string:0x057ef64E23666F000b34aE31332854aCBd1c8544" + }, + "identityProof": { + "type": "3605b23e-12d9-4962-a71d-4963b68b152a:string:DNS-DID", + "location": "117c957e-1d1f-4d96-a19b-d97bfc510952:string:example.tradetrust.io", + "key": "385ce41f-7300-4c2a-ab77-d2330b947714:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "network": { + "chain": "ebf5a03e-999d-4af5-ae34-1f08abbcf57d:string:ETH", + "chainId": "13dfc1be-dc7a-44eb-a13d-85356e4a4160:string:1337" + }, + "recipient": { + "name": "35cda349-7e04-497a-a0da-059d40e06198:string:REVSTORE-NOT-REVOKED" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "ebf9daa3ba4bb4c497a30e765e63fa37d2c234eedd9a30c23b1d84763f39e046", + "proof": [], + "merkleRoot": "ebf9daa3ba4bb4c497a30e765e63fa37d2c234eedd9a30c23b1d84763f39e046" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-15T08:46:03.121Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x593dee6b3cbbc29113c838b76e40b2dcbe2891c6f8f3b70c8dc3f76771c558597ff9916a54d731af9f3d68120678ea952ee86a8fc623e757b1279ba0690a5d801b" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_revoked.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_revoked.json new file mode 100644 index 0000000..45af54b --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_revoked.json @@ -0,0 +1,47 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "00163bbe-aca5-4bcb-b8c9-38f5b0ca30f2:string:EMBEDDED_RENDERER", + "name": "6628b470-fd0e-4671-b0d7-75e3b26021e8:string:CHAFTA_COO", + "url": "58d993f1-7cd9-46dc-9fa7-dfd693e578d4:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "4493dbcd-4631-4840-84d9-ba309a6785ff:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "488158b6-9e24-4a3e-ba1b-1819c641c2f6:string:X", + "revocation": { + "type": "99bf29b8-8fa3-4b32-b446-fe49868086ad:string:REVOCATION_STORE", + "location": "f42022c2-12f5-4e13-8f04-885cb7d78e43:string:0x057ef64E23666F000b34aE31332854aCBd1c8544" + }, + "identityProof": { + "type": "9b6163a7-8449-4228-a247-4a8b659dff18:string:DNS-DID", + "location": "34cdf779-3daf-469b-a18a-b83ba847f057:string:example.tradetrust.io", + "key": "ee0e0350-b723-4de4-be6c-5b35516daa07:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "network": { + "chain": "8ecf5849-a5e6-4ceb-abad-b4e1f4ad452a:string:ETH", + "chainId": "7f360e4a-7c44-4ac7-871a-72b38dbe42d6:string:1337" + }, + "recipient": { + "name": "48f79c7e-2f15-4ec6-815a-e3d3b34fa462:string:REVSTORE-REVOKED" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "1edea2001ccb702ed3484b3cbd07366c79c870c803bbf379b96486bca9e97ff6", + "proof": [], + "merkleRoot": "1edea2001ccb702ed3484b3cbd07366c79c870c803bbf379b96486bca9e97ff6" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-15T08:46:03.114Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x9370c759347ea6acd2837daf7fb69f538dfc4c6b8ac08d6ce273920b5b8670f25c57e0bbdd08cc3e43d8cc5f56d4870bcc6a251325b9dc22d09e9eb2deeceb4a1b" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_tampered.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_tampered.json new file mode 100644 index 0000000..190298d --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_tampered.json @@ -0,0 +1,42 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "234694b2-4d93-46ab-8ae0-2c4eaf58576b:string:EMBEDDED_RENDERER", + "name": "326e60c5-26bc-4cb3-90a7-fedd88d0a405:string:CHAFTA_COO", + "url": "3b4bdcb0-fa82-4ed9-99c1-4c228d7e8a07:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "80627005-ef95-4433-9713-8a5e096f5ccd:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "ddca0c96-faa9-4f5c-8256-7422b36df1fe:string:My Test Issuer", + "revocation": { + "type": "2511ad28-b5e2-472a-883f-76f7bb5acba2:string:NONE" + }, + "identityProof": { + "type": "3e3a43f9-d70c-4a8e-ab7a-811a185c61b7:string:DNS-DID", + "location": "eb845f4f-e7b7-4811-af9a-3dcbcdb922fd:string:example.tradetrust.io", + "key": "11cf1638-fd0f-464b-921d-a2c4ce0cc7d3:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "recipient": { + "name": "7ad580a1-79d4-41aa-83f2-88715703f9d6:string:TAMPERED VALUE" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "226d0b680a1140241f5cc10039a295c4ad84719c61e9dfa3431e82fd30de5caa", + "proof": [], + "merkleRoot": "226d0b680a1140241f5cc10039a295c4ad84719c61e9dfa3431e82fd30de5caa" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-10T08:57:04.774Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0xf6a6c35491b64064addf912e77192b7b02bdf414746497064c17f39f36fa1aba4367b691de25afa8195b78e37d505bf87c24ceff00024a95cfe543fe0127a30a1c" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_valid.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_valid.json new file mode 100644 index 0000000..33f0718 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_valid.json @@ -0,0 +1,42 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "234694b2-4d93-46ab-8ae0-2c4eaf58576b:string:EMBEDDED_RENDERER", + "name": "326e60c5-26bc-4cb3-90a7-fedd88d0a405:string:CHAFTA_COO", + "url": "3b4bdcb0-fa82-4ed9-99c1-4c228d7e8a07:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "80627005-ef95-4433-9713-8a5e096f5ccd:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "ddca0c96-faa9-4f5c-8256-7422b36df1fe:string:My Test Issuer", + "revocation": { + "type": "2511ad28-b5e2-472a-883f-76f7bb5acba2:string:NONE" + }, + "identityProof": { + "type": "3e3a43f9-d70c-4a8e-ab7a-811a185c61b7:string:DNS-DID", + "location": "eb845f4f-e7b7-4811-af9a-3dcbcdb922fd:string:example.tradetrust.io", + "key": "11cf1638-fd0f-464b-921d-a2c4ce0cc7d3:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "recipient": { + "name": "7ad580a1-79d4-41aa-83f2-88715703f9d6:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "226d0b680a1140241f5cc10039a295c4ad84719c61e9dfa3431e82fd30de5caa", + "proof": [], + "merkleRoot": "226d0b680a1140241f5cc10039a295c4ad84719c61e9dfa3431e82fd30de5caa" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-10T08:57:04.774Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0xf6a6c35491b64064addf912e77192b7b02bdf414746497064c17f39f36fa1aba4367b691de25afa8195b78e37d505bf87c24ceff00024a95cfe543fe0127a30a1c" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_no_contract.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_no_contract.json new file mode 100644 index 0000000..305f0ff --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_no_contract.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "6aff1491-30d0-4481-a2fd-9a7009c68775:string:EMBEDDED_RENDERER", + "name": "a8b368cd-1d0e-411f-99dd-f5865fc66db7:string:CHAFTA_COO", + "url": "534d1e8d-a1c1-4c59-93d5-edeef6af9626:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "7a8a3f9b-0d82-4277-83f7-fb240c9d0834:string:X", + "documentStore": "0f2dce91-e954-4599-b82d-dc98dc597821:string:0x000000000000000000000000000000000000bEEF", + "identityProof": { + "type": "7b1096af-8490-4dc3-8078-365b550e6909:string:DNS-TXT", + "location": "b217eff6-5d5f-4388-a22d-ecfb930b4588:string:issuer.example" + } + } + ], + "network": { + "chain": "87c19dbd-952d-4974-9a00-3169124325e2:string:ETH", + "chainId": "c09cfddf-5826-4f2f-a873-95d300a5ab0e:string:1337" + }, + "recipient": { + "name": "4dd09d19-a24d-441e-9f27-2a44c3810d86:string:x" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "b39012d7890d8c0d8a1061a3e1028016c151825d4f45df7c07eec014c81583ac", + "proof": [], + "merkleRoot": "b39012d7890d8c0d8a1061a3e1028016c151825d4f45df7c07eec014c81583ac" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_not_issued.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_not_issued.json new file mode 100644 index 0000000..1797958 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_not_issued.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "e8a988ca-d964-4314-8cbc-045ff6d56a99:string:EMBEDDED_RENDERER", + "name": "1020a1b0-602f-4267-bc4f-cb50265e44e4:string:CHAFTA_COO", + "url": "1aa57ba3-d9c2-49be-8670-2d9e91ed0101:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "f3240360-4a8d-4a71-b23d-4617d6891738:string:My Test Issuer", + "documentStore": "630eaf2e-b725-4057-9807-e28257049f84:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "7df7f6e5-ca1c-491f-93bf-65c122e48138:string:DNS-TXT", + "location": "e647fd92-ac54-404b-8258-de7a469d3302:string:issuer.example" + } + } + ], + "network": { + "chain": "2ba1e15a-9dc9-4b35-8241-efac80b9c457:string:ETH", + "chainId": "700dacc1-8e34-445b-8944-e44ef7d39265:string:1337" + }, + "recipient": { + "name": "bc582725-a658-41a6-affd-98d51dfa3e6c:string:TrustVC E2E Test" + }, + "cooId": "79265eb8-bf56-4350-88c4-87d0078ff330:string:COO-NOTISSUED-001" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "1a442765be78cc6c706a4a637cea7faa63a2841cc92b1715418d00fd6b76b895", + "proof": [], + "merkleRoot": "1a442765be78cc6c706a4a637cea7faa63a2841cc92b1715418d00fd6b76b895" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_revoked.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_revoked.json new file mode 100644 index 0000000..4942355 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_revoked.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "397d740b-25d8-4d9e-bb50-9f844e418803:string:EMBEDDED_RENDERER", + "name": "10151114-ef33-4cb0-89ac-c441c5619d82:string:CHAFTA_COO", + "url": "b031c3d5-9feb-4c87-a6a4-1de38e4a03eb:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "9c200e72-f70a-49e6-a086-8c0775dbcfea:string:My Test Issuer", + "documentStore": "41b8e593-6f0e-4eec-a4a2-f13a0ea1e63a:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "4720516a-39f1-42ab-9990-974f2761cbe5:string:DNS-TXT", + "location": "f0030d99-4d08-41aa-b433-fec0ce0318a2:string:issuer.example" + } + } + ], + "network": { + "chain": "0fcaff66-ba86-44f0-9080-b4edfc8ac56a:string:ETH", + "chainId": "39c7599f-475d-4f50-865e-f8375d746f55:string:1337" + }, + "recipient": { + "name": "e67eec6e-24f1-4b07-bb97-c651a23be2bb:string:TrustVC E2E Test" + }, + "cooId": "7adb192e-f98e-452f-b7e8-053dfa4844cd:string:COO-REVOKED-001" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "a24c4e7e3f441de3b0466c88c862fa66e513180d723b9799fe07f1594a9ca07d", + "proof": [], + "merkleRoot": "a24c4e7e3f441de3b0466c88c862fa66e513180d723b9799fe07f1594a9ca07d" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_tampered.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_tampered.json new file mode 100644 index 0000000..fb14a37 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_tampered.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "328ee1a9-3375-41e2-9551-a72b33e8001d:string:EMBEDDED_RENDERER", + "name": "985060c5-4773-4d4c-b8b5-17afdfc37b3a:string:CHAFTA_COO", + "url": "7a283a5e-8959-499d-b0ae-5b903c5a1fa8:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "9f6293a1-07cd-45fc-b243-867be2564745:string:My Test Issuer", + "documentStore": "7411ed2c-fae0-406e-88dd-eee6f1c342c6:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "fa36be4f-881a-4ae2-8aa8-a8f532dd3d78:string:DNS-TXT", + "location": "ef571458-fea1-4eac-ae76-376b3146068f:string:issuer.example" + } + } + ], + "network": { + "chain": "3617e8a0-99e8-4e35-96b5-9a0fafa31200:string:ETH", + "chainId": "53c9bd03-b49c-430b-81a1-9a8c41dd6f8d:string:1337" + }, + "recipient": { + "name": "f3e2b74c-0cf3-4985-8769-d1a81cf9f6c9:string:TAMPERED VALUE" + }, + "cooId": "78a19473-15e3-4fa1-bcbd-bcac8c717945:string:COO-ISSUED-001" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "d0359643795f10b3f69ce0a1969c67eba53ce3cdcc050fc549b768c04bb92b4a", + "proof": [], + "merkleRoot": "d0359643795f10b3f69ce0a1969c67eba53ce3cdcc050fc549b768c04bb92b4a" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_valid.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_valid.json new file mode 100644 index 0000000..507fe9f --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_valid.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "328ee1a9-3375-41e2-9551-a72b33e8001d:string:EMBEDDED_RENDERER", + "name": "985060c5-4773-4d4c-b8b5-17afdfc37b3a:string:CHAFTA_COO", + "url": "7a283a5e-8959-499d-b0ae-5b903c5a1fa8:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "9f6293a1-07cd-45fc-b243-867be2564745:string:My Test Issuer", + "documentStore": "7411ed2c-fae0-406e-88dd-eee6f1c342c6:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "fa36be4f-881a-4ae2-8aa8-a8f532dd3d78:string:DNS-TXT", + "location": "ef571458-fea1-4eac-ae76-376b3146068f:string:issuer.example" + } + } + ], + "network": { + "chain": "3617e8a0-99e8-4e35-96b5-9a0fafa31200:string:ETH", + "chainId": "53c9bd03-b49c-430b-81a1-9a8c41dd6f8d:string:1337" + }, + "recipient": { + "name": "f3e2b74c-0cf3-4985-8769-d1a81cf9f6c9:string:TrustVC E2E Test" + }, + "cooId": "78a19473-15e3-4fa1-bcbd-bcac8c717945:string:COO-ISSUED-001" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "d0359643795f10b3f69ce0a1969c67eba53ce3cdcc050fc549b768c04bb92b4a", + "proof": [], + "merkleRoot": "d0359643795f10b3f69ce0a1969c67eba53ce3cdcc050fc549b768c04bb92b4a" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_identity_invalid.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_identity_invalid.json new file mode 100644 index 0000000..679a885 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_identity_invalid.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "3bffed96-8279-4dcd-9995-5f010719a626:string:EMBEDDED_RENDERER", + "name": "b757f3a1-170c-46b5-b887-030d46b83b05:string:CHAFTA_COO", + "url": "402d5d29-35c6-4ce3-86e4-71b1db00fb01:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "d26210ad-4b1e-4539-a247-19a7e94dff25:string:My Test Issuer", + "documentStore": "0d6e659e-7b6d-44b5-b986-6c2a45919de0:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "d45aa184-eb71-43a5-adb5-3915bc2909fa:string:DNS-TXT", + "location": "e163bcf4-f139-4a70-9d57-843885fd2a30:string:demo-invalid-identity.tradetrust.io" + } + } + ], + "network": { + "chain": "dded0adc-84ce-4f7c-b08e-2798407e5e26:string:ETH", + "chainId": "c08bbc52-1f1b-4611-8d53-3dbba9c14a82:string:1337" + }, + "recipient": { + "name": "23a7bc75-d16c-4d6a-92d1-dea3d2726c47:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "6ad1a501ebbb827455195b7012b0e1fa0dda2052111831d95fa1e8fbf370fa0b", + "proof": [], + "merkleRoot": "6ad1a501ebbb827455195b7012b0e1fa0dda2052111831d95fa1e8fbf370fa0b" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_no_contract.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_no_contract.json new file mode 100644 index 0000000..fef94cd --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_no_contract.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "a3954be6-a5b4-4e9c-804c-6021c06be5d5:string:EMBEDDED_RENDERER", + "name": "338a9ef5-3232-4b67-b8c3-255cef782767:string:CHAFTA_COO", + "url": "bbe22bfe-bc38-48fb-b4d0-29f2834fd715:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "86a3e681-8d0a-4a0c-829d-060e0031918f:string:X", + "tokenRegistry": "2cdc5860-7b46-4cd5-b52f-eee3a6fa5fb7:string:0x000000000000000000000000000000000000bEEF", + "identityProof": { + "type": "57abfe59-0282-4a5d-a37c-c9c85c46202c:string:DNS-TXT", + "location": "ad3faee7-c419-4564-8ce6-cb76d8ac271d:string:issuer.example" + } + } + ], + "network": { + "chain": "8eebe664-5d40-47bf-a6ac-efcf7e4a2043:string:ETH", + "chainId": "c5c5a5fc-0ef3-4443-865d-ff9ce148e42a:string:1337" + }, + "recipient": { + "name": "9538865b-8dc1-41bb-91dd-65a044e58e00:string:x" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "30d333439bff26f8490918eea679b2ac7acf6425eb342fed254cba98cbe47242", + "proof": [], + "merkleRoot": "30d333439bff26f8490918eea679b2ac7acf6425eb342fed254cba98cbe47242" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_not_minted.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_not_minted.json new file mode 100644 index 0000000..8014e59 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_not_minted.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "eeadf0cc-edf8-4259-a808-19843317c773:string:EMBEDDED_RENDERER", + "name": "ad623609-96c7-48d3-941c-2f49f03ab2e8:string:CHAFTA_COO", + "url": "0c9fd63d-3ba1-4716-a847-cbabd4ebf0a5:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "b5351281-591d-4474-99af-118340898cfe:string:My Test Issuer", + "tokenRegistry": "f232978d-4021-4162-9c8c-1130fb5cedd5:string:0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "identityProof": { + "type": "c791d193-8140-4646-9f72-d810bb7bb455:string:DNS-TXT", + "location": "0df47c6f-3fb8-43aa-91ca-149252053d41:string:issuer.example" + } + } + ], + "network": { + "chain": "77c62172-7ad9-4124-a3ac-111540b238d2:string:ETH", + "chainId": "6c954fe6-91a1-446d-ab02-602693e5370e:string:1337" + }, + "recipient": { + "name": "b0ceacc0-4fff-43a6-abfb-2101d180ea88:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "bacacd3d0aa1e389d32a685efdfc3ef9d9a9785b60c105a2c85b2e48e2229782", + "proof": [], + "merkleRoot": "bacacd3d0aa1e389d32a685efdfc3ef9d9a9785b60c105a2c85b2e48e2229782" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_valid.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_valid.json new file mode 100644 index 0000000..c02250b --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_valid.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "9ee643ee-7f4c-443f-8a1c-c9e070c6d772:string:EMBEDDED_RENDERER", + "name": "7437372f-42f2-44f9-a3a0-7638beee02ba:string:CHAFTA_COO", + "url": "88054edb-b480-43ed-9219-a5d0da0b6948:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "0e9cab70-bcc9-4c47-81bb-ae0e6843e7eb:string:My Test Issuer", + "tokenRegistry": "bc43f046-69ee-4881-ae37-ac21f9d767f1:string:0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "identityProof": { + "type": "86490b7c-db89-4969-8de9-d96f796612b3:string:DNS-TXT", + "location": "e135ffd9-74de-4efd-b548-890002affb2b:string:issuer.example" + } + } + ], + "network": { + "chain": "3d25a260-2df0-4fd3-b97d-8234c91fbcb9:string:ETH", + "chainId": "294817ee-e937-4dc3-ad60-79811e935ba3:string:1337" + }, + "recipient": { + "name": "4b9c952f-038f-4d16-bc0e-e05b795c615a:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "6e16607321ece74005eec60b063b6a4668e696139ccfd48802561d01c93deef1", + "proof": [], + "merkleRoot": "6e16607321ece74005eec60b063b6a4668e696139ccfd48802561d01c93deef1" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_no_contract.json b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_no_contract.json new file mode 100644 index 0000000..a065ad6 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_no_contract.json @@ -0,0 +1,57 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/transferable-records-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-TR-NOCONTRACT-01", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0x000000000000000000000000000000000000bEEF", + "tokenId": "d1a5a965ce26b7bf9e8399b23938641ee297805626e927d9ed313ea8c364f57c" + }, + "id": "urn:uuid:019ecabd-3477-7113-8704-cb0e3dc2087b", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T10:04:17Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhABx-a93Wq7XUCwaQe3BEI0dPC3KvSvN_R1hXg1KvCIR7IPr3NuSBnKDLdM63wCKtyUvQhFap5MlGEcPDDoDufilgjgCQC7N-B4tMbig-ugbTxN4r0WP0j5Tpjdi9MZKv8Fj7x9ohYIE-uVuICLXrWqeCRiFBEeB0jRZKs0hpQ8IWUZdxwZ-IGmBlYQC0rJHOpIXf-E6uv9FIcFzbrDKka8R8YfSmgyo8_FO6ogNeMIN7LoTRGttHwbrL2zW6WO9Sd-OMeGAU16S6FipVYQI2TF8ISU5SkePFqMmrPXYzVWrsup2qR2K23jQ6c_s4JW-Su-vRXT2SkW06gcwiyDGAaTb86jzI7FFM8on7LipdYQBDa5g6tjZcUzQ1rAaZnpxoJtTT4yZ16Ro0leqsU-opOQPQpBlxDSPwQBbJqSEybBq5cv7sQzUO3adWTTRbI79lYQG22mo8ph3qmIWLAIpWBckGeJVeKwLiGoBPPNCgy8TlEGY2hAr9v2UWZYScb6kVvzvNoC8RGGrjtscy3OJBdTSFYQCzYZpK1QA5JuxNqg_M93hoUKg1ZBlCbVfpqANidUn3ZIc_5QEEIklqhHmkEVq8-zo-JFCRq4BtuEElJuWYruIdYQPNuqShkl8NdbkRl2Nxi7SZk7XOKzc0I9l4nriy4rr6tkhdF_iuFTV2FpwpiO5oVey0plt0_WwioFYfzGe7lng5YQAyL9CUxnR_Sj8Pg0xzBW18UjD8m41j7htIYKhNCVKEIzci75kQU9uyiLf27DIG6Tau-erIiBPl-TxHhNVS0CjpYQDLPIL2J7QreRABrByYlBVkiqqzqZZtXX3vEot4cSiJx4kWT10FNa4FiuzkoEY88igr1qtxJUbnJ5Beheb41fJpYQDUJWaGKQ2mO2qqpPfqLPpxFxmX9jSogyRdu3eiw2CAlzeCZzXfHX5DqL8omJiVOZn1NJgJaeejcvsjmwSPF-Z5YQCB4YOOmpZ9Rim0vBZFUHqat0fj6KUrua7OpL0L11-zDzUMXXD3P0GiJ3wKY2XsHoVULMCG1rG18Pc8UxgPcLfBYQJKJISyHebRml7CcBQArUlML-fxaqJY8T0bWWtXBENobIKuPauAqVStlraayyyoomZafPsyFnXCyg-eaRJq0i9tYQMrIFbzO7VBUTUYeupM9FBBO-y5R3KGWWlocwsPiT0EHu8D-jGUpvNq-UdBx5NYXCzbl7dJWqIJv4I_ScarTanFYQOsdbzhR5I5vC9e8hPEVzHweqCLWlQltmpaetA7UL_IhIvWI8NhD9ZBKkGTpYZ8os-dxmIslPX8Dw7QWuIkRRfhYQK0MEN-nFsQeXfKSPGrkmAtD6aQ7QLoTUJCdRnYLiSRSlAISoqwjnuOn9x9BO0s332CClOlXs3ZoIPz2m_x1_JNYQKPvQgE5AAvvqLAnswyygi0XF8cjTEiVCVwU2Ik0KhBDZY50nvlwGTOJG7KI5UYIIduznfVDY2Vluj2kNqp7HwxYQNJ5scZFD9KNP3duknW8PXH081lXEhFh2TyjBLPZSuZBSPq9I7TCBmFx7TG4W8b7e8ipxDhesXKjJ5A669-UgPRYQF6yj5UbyNqu-d6KDJK3WvHcRtkm-r8Vw-NI5r6_NfwP8zbeLllpLh3ixNqK6qOmcr1iycARaoAadAWs8PYyb21YQAWVdU1ExDe4wf5K-bGl2wn5lS1jGaHcnDdC92vX086P8zhDNS0r8k1NjephXCmzYvc16TD7S4dMTcz7QY3E8QpYQLKR2PcuKTpWXVaGu9UoSlPeKkYGWNMKvbWvlw35kjHy-oYxEULcK8mqzgVcbdWhXKfiy-r3twhezrcrbeVmM7RYQBeuNCDI3HacNANMGWAWGTQz8tQa4O02LC9utHdP7s69gw2UKui5CXx4mLeGSuZJVODPaQjGE2E9VPXQ-87kci9YQC5D7MuXDbKqQA2aP9R3oqj99JuPSCeFx1rHmfiN1qZpn2VWhuNpCcEYPwY4V-e4pJqc9gL-Z-F5_zm_Pe03VFZYQG1ODiTh6wKBvbbuIWNlLJyD837v_VqU-LlQj5ta13oMuZg_vV5oetEZzvx9QqCrdQw_P1zCLRmPxB3PCVimT9ZYQGqz3sMbEYhngIwayBV1Hf6025oGzdHeq5mHqE0uiQ4jJ4cT4ldm4D9oEwjO9Yd_DVJbYLd_Ez-p7fdRfHNEOixYQEpNkB1NjBVQ1Ubv2coJSGdLShIaIwUH_ad2V1WFAa4gr8raqfvZELVAfh6n3wXYDDqqo6nxX-1jgnr4FgBBsSFYQFXFl3CQNQw_Y4grgh5yxV3ihvfnHfdq7kvNInZ9Ah2gcYokorxv1jaflq97ocidV4Oi50KU9oDgcN1i5aTc9mqCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_not_minted.json b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_not_minted.json new file mode 100644 index 0000000..ee64ef9 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_not_minted.json @@ -0,0 +1,57 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/transferable-records-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "9264ea0aca67b396981a3382ce7edb36c8cc02f12e10b6d2381082f020c404f1" + }, + "id": "urn:uuid:019ec925-37f7-7bbe-99aa-7202007402aa", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:40Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAxXwN7qz01MIFNbZ9vzNxDXIQakt_DLXnK9R_Oh5nEsA7EKrA73l43KEwIn2ink9pBbZ9IZ_Pit8e2SOl6pKjF1gjgCQDtoJ7wzzyUmEUdMtW9eKIz7nDqwMJ9sl2Uufwu67_z25YICFCcExg_omdzpn0OYb0ZDEK9gMhr6GfRLZYK_mSPwv1mBlYQB931K12vT6p364GDtZ8BtXL2hAUX9-X34bkjPfwIZ81dI3LNUv03t3sV76f3PpfE63BnZWS6TiCxCM65Yp0Oh1YQOjloTiDSfPtCpTTfe1Z7-6qg-7TFYNra8fu1JvmLtI0vHov2xTnxUEHpSKs5EcRZTgIFIEw4wFu0SP_W7S3Vg9YQIkNwougz13nKnksRyQzt1VBv47WUiKNk63J0_Ksm7hkeaQBBZstrtkOmM9gbZkEA3KwSuhzAZvxmLyPmJY2-qZYQM-HUQBnr-ajx_zwbIXvK_1Ur9AYkzJuIhp7_hymWbFGTsNnjGNYC5N3sy1rvH_flbt3QOEqUK_Ct1HP9EQDEj5YQG7zsmyEdFpDjJG2mAA_5ULzCt3VkXDNUGmGnVaCkpdE17pf3XPTjqGmIemXw_w0Mo-n5oTpovFL9fwEy150vLVYQKVatiJNBrbO_IHuwHLUTB0z7pBD_V8L5XN8hvRpwxZCrJ3AzJ0tJ3sB_ZolpPfNVX0bxpIZ7_u515OKbkQ44tpYQO1EPl6RO0WA4Bxm7C4xBUiRA4EDGhqzVmw72KwQnpNK2RTmi1smguz7CKaXtS4IRqpVjLStFaaPgUPcauI_JB9YQGfYgDl0i75VPlJs7bDxWlLmKoUWHBsdAgjfJenV4pQZDM2L-WwZECearoYBMw2Rh7BqiuxNge91oUUj-e61X9FYQEFH-gVcMilBwtNFgLD3YJK0aTo20FKGIW4tT9Iqn4mZ2paVNZURkZH1WBa4OCTL2du95IjA2jKoIZxWmSm1eFVYQFwxwcdRykDJAxhO_jnZ7fpAoaybmBJAWKb9a0gMhYLvuba9Pwin37B62zfB8ka2ysNu_MjMdl53JCcIyv33zvtYQKWAHg6aw-OUsRMepaDuW5ea0xp31VThfxNT5a5LKneCW5VZAuiNvv3yFJ-sH3iCJOqQlzc0qtE9VjVCjfEhXthYQHz6rx8P-0JUXi5gNPsrlMJcO7uwTkuacgLO9iSTZK23TZ8dXt4TtualXEEUNorigRXOOIyhTpmZacFbJDK5CO1YQA4fWt2c02aUfl5SGlxVfn9zy7bJjoCyrSJ31SSfhyES1VIWM_13QLd_mb6SiuI2I6Fk3HFkmUOgn0fq3LejFd9YQCIxqLN_YDNgvl-TLcaDm_1Y2H70y9slNgYrHJTml0ItNtwe-fCc4ZHblIIEi7MH0iYJObIjP_53TlnYZP1f_7pYQPDgXoh5IOd24Edqnv6nkqnlxdbgitlR5JhF-0rgmEnu7Q_2TJgiU-u-nCoLQXowd6E-Mr7L0bCz-L4U7MnG92dYQCga2NvCnY0eTmd-DQOR0NS5Vt5uJe9gXWgqQP0YC11kwOlxJqfuEUrZv2nfSwJNzI8NQbHPU-VaKIM3GaPNpjxYQJ4UmDeCDnJKzoEWNwb-n93ONwvs2O_owGpCcX57bX9xgOFPkhJspNlN4grEnaxNTyS27-kFqM5oBPZfo2fmjrFYQHt6dvnzf3wsGeJrTRoJMXhDmOqLfHPOmzqswAo6W8s7LenhHNwFbynxqAzA2CdvRAiHoqgqbAKJCKqM8BdWKlpYQORB5dzVX8sPZBUYNKjYalLAJ0mSiQxLKvLEJt6Ymx4J0k6RlmjC-hX_R_Hk4g3owZGpg6a7LFNXXknMPzwTiNVYQBlIg7Z-G1yZXxw9FRS5vPYI7j_C5-z4maS-Fzb-dhuSv3ddPjcc7pY1PLuIy0RxXGD0I6JLgPcuXoDv75Th68VYQBqgMzRllx-h5avPMWOfyQq-PSktJNrQhfHfhgd8h765zPSWtqX9ko2U2NBfUaKOL5lXJO9qEONA08cdqa5-FcNYQNA5kkv5FBbso8oXMp4hiBaPCRjw4tttxxdhcwVOfRne1DMldoumUkD_oVIcKQrOK6K70WgV8Wl-919w0FWyCgVYQKY4vB2n0jPRotD5gAwGy4kOA1g0zIGEiHc78CiFgrKGr5kVsXHinHFYVYKbdRiMK-IoVPVTIpv43B3EUFuiv7ZYQKoFlRY9aeM_DE0PVmPawNNmo3xXtqiq-35A6P9g45YSKiIHnAB76m_3lX8NW0rsRMr3QjHiByafR7zElfM_KrFYQKzbv4uc3MKWbQSi_78Zp1fouTBIZa464C2B4TqAOkiUP_rlAnd2Roz6axwR4hvxd2vnIVrOVNq6SERW9ZSWVv6CZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_valid.json b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_valid.json new file mode 100644 index 0000000..1ff91b9 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_valid.json @@ -0,0 +1,57 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/transferable-records-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-TR-VALID-01", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "844575edda1a78166f3af489dacf057f9abe3c7a21ebc4d0eb6f1460b4ebec6e" + }, + "id": "urn:uuid:019ecabd-3418-7113-8704-c15c14a7d860", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T10:04:17Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAknlaaRSq4uHY45sJE-a1hBrmyMlPUzyezhfbQmnVFHARLAw1NE1UBAkRmvakEiYNquMGGkBWnrLcboj5atDccVgjgCQDUB-dE2Ao0Go5FwkbmIerIFzU766ylMhSG9ChmMwCASVYIKzLSlWfijXkODQrcSNqB7Xkpfg7of7-QPpwwD_CpagvmBlYQIaD0Bm-3-0dPwjkhzYRgGmjhYjXW8rwyyE_cUGcVXaJpfLfMM5l0SqiD5MXtHwsR_zV-MY4uyF2CwZap0gK7gdYQAgkZXK7eSfH_oM6NEHG-bzGkQNfEmFKmKXAyDYGA476mTzUDsZW0nnOuYo6wIADYY134msnTLmo63M8WRutg1NYQH-4Dz-LW3uHpGes4fl9QzTuzsX4Im4uuDBfn2uiW0N_qPE08WB88wWeAu0NINKc1yoDQKJ9JS-OTgI-0hxZAy5YQOg3HArXhlcB0NJNcFYcW5405L1wsLJX73PeD7NvtSvTfXDWLeQbpq0zBaOeLq_yKE2YP_oLYXg9VJGCuCcfNTlYQNNcxM_XNTXvkInbpJ84R5o8EroCY-0-jEhoheduRoliM99m8CSSxfA66PmrsaDMlMlB_rvEpDTloUoI2dfpdZxYQFH-69Fx2JZa_3tMwulbAUORs01Wdsv-WUOfkTtP2jd3h2FJNOYLGJqFdUuu7iXbnh-WF5e3vBNn5aInOq1QHzNYQA81_nX9fhHVG--DVkOTt9Sz4680hcpux8JIk3aNcBvDrF_E0TLvhODGjndq2dbwzZ5gMt8_E0E5mhAmQnqTHtdYQPDx_pbrRAgDFTpxrR0_yQLALAYT3Luria3ObAAZWBqlL-3qcah9IrW_xmv71wGHgDHgVyovTm_VNbI9NgxpbwtYQN7y597Biu3GE7zkY9kmczkSv1ADEzdewIRmowwoOo9ssaVndqFpKfTWTXqU_tfrAjt3VRmcl3hKyaUqruAey4BYQGFXnP3JSOj-spPptX9E1T2kGJYvYncO2NTo-H-3k1-IaD78-wX98CJk-MAtq4hzLf3Mq9qVloIyqjq2jWFmTEVYQBBiBpvqRtlbZAzvBU0naJI4M6ghwSOLFGBSNxYowEKk-C9vRkShKwefGUPBMG-QulkrMWW7YYAQpFsFrl7t2AVYQHox9Of7b9xGETyLtMaZA_8v_NGcLoqdhkkmGmPadFmWeYwBm3As7ivOGB410qmOumbgBjaE63NIkjcE5S80inJYQPdtPBGVGg2A4f7I3jn6qaxGrGbTidF7dcmkoOSz9Yievqwqdf1A5X_-xMkKaJ7mam15Qo-VsDY0EVeHiSUBw2VYQEERuUR6W86ndI0AerOaqU0Lr9brY-yH4nsSHMGZ5giK9W8Dk6nJC47C-gKu3kq27LzJlKcUdDGED1j00QRDohRYQCGVLuv6ly27sbQDoul1AuiWgFy54-aCjfmcsd_jj5B19MFX40RzqfdYxvH_2b5xbo42pgRC4fI1W66KfedSsBBYQEvB2-2NOgTkGLvfJ4bXE2JmpGqDHEwNl6w-FxxWAh_qQ8xtAgAqJvoMYp1rtb23-OBya7zNP-8dwEDoz1ba5cxYQMUJdpKxfQUe7BCjWMGJtAH5bBvyGDE6reB0hISf2ec1s0vpgEcXZzmzax4S1FFmsWDYmWVVQi7PbgIc75LMoUpYQBr2BDs6zUO2M8d1RSoUCmS9gYyK6af2QBjT7VkI8ArdKY98rse_eO-_FWdio6CkLYqdhZ9L9bQhwzT4oZywfvdYQLE2HCyic4hIBonjq_RQGHbTod4awMzoGhCmbPdkRRKPPiyj1nTsxgs_TfeIpnU1xis-Jdm_CbFQ3UFI9oZQdaJYQPa0sj7T1sYka1FsKbfQVohHH6gKZRadI8bKw2oAuAgTB5rG1hGuVAvTLK6NMXns31JjnpRn98FqSy5F4pPximJYQK45k2Zf9T3UNUOS6NwjNyWLdsfW0-8S5ax8T7jrvlomFV2AxlWPohTdht3v5tiiLNMj1bTqILJi41CN_AFfOwJYQN5L6cIzpBz2-XdybA7IoCPIij0cfE_HWLEJu2w12v0cELr5kM6_O2DYnmAEvpcqu9eC8mdignPnonvokh78XmNYQMaESBK2Iq7wh3yglLTBFPVLiSmM0bqgFG4Ds9i2gQu3viWqM5jJvr7ZnseSHUydTy65Z4v-H7LTgAWqCAGPOppYQMMkljF_w-4Ga5xNDNbaqNKHMz34U0bi4tc0uwFb3v4P4n3zWKN702J7Kk5QmJfIjcw4s0m0Iv6oB8JPh9b3nLlYQDGqWMQHs8-nZ-cR-3aunX6iso5ejnp6Fx1_DuHhzOXe469o5rIKyw7wHNUhRH91qZ8H6RsiQ5_3_CPVbQwS5GSCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_tampered.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_tampered.json new file mode 100644 index 0000000..bb919d7 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_tampered.json @@ -0,0 +1,46 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "TAMPERED", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-363c-7bbe-99aa-5f087f3e9790", + "proof": { + "type": "DataIntegrityProof", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-2", + "cryptosuite": "bbs-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0ChVhQtpC2H2B33FtDoXAEOPNe2jBkAYy9gLe4FgVyZnuRJzr_yBfL1hOcX7qX3vItxen1AW0_XgVkYVmf9Fp1kt5zv5s4k0MDuG85gEOR-vIO0GNYQD9WZttHrlLy5Yt4KX5JlbD4AqxyPhcyoKk-Wo6FkAtpvG0PVkeQLSPoLyHp_5W6GLM39_z1BQCoBdI3CHl11uZYYLDx2EM7LXGzSqyTOC8ZKJ9hgD0GHrf59LhRlLV3-pK34L5ohGo8I-g81SD6xVKofBMNiXxFLrp7w56sQlEOkcpISekB2jtn0DeTWzNHrnVwuejhZPM1PPtOuxtkbzj6J1gghmo5bxPXuaKOecbkB__8nY5PqMY6x-O8Ly2on2ZG9pyCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_valid.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_valid.json new file mode 100644 index 0000000..0f44561 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_valid.json @@ -0,0 +1,46 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-352d-7bbe-99aa-4d27cf2374a6", + "proof": { + "type": "DataIntegrityProof", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-2", + "cryptosuite": "bbs-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0ChVhQqHc0X_lBRjI08lotYfKYQ84MMIL_VYKgfu1vVVxqeWPshNoRkXt0wDigzOBMdjj4S4vpBA9lrcmgctjyG7XK6nj73S4KwCmH5pK1rpcFeeRYQD9WZttHrlLy5Yt4KX5JlbD4AqxyPhcyoKk-Wo6FkAtpONvr1dPZcd0wrXA8fHYREjLzrWNufp4XS1uuABjuyRBYYLDx2EM7LXGzSqyTOC8ZKJ9hgD0GHrf59LhRlLV3-pK34L5ohGo8I-g81SD6xVKofBMNiXxFLrp7w56sQlEOkcpISekB2jtn0DeTWzNHrnVwuejhZPM1PPtOuxtkbzj6J1gggOV7PxDhxa4n4lO1CYYwmza3J7mbzpC2yjJ4xvaus-OCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_not_revoked.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_not_revoked.json new file mode 100644 index 0000000..00d73c9 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_not_revoked.json @@ -0,0 +1,54 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "id": "https://trustvc.github.io/did/credentials/statuslist/2#1", + "type": "BitstringStatusListEntry", + "statusPurpose": "revocation", + "statusListIndex": "1", + "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/2" + }, + "id": "urn:uuid:019ecabd-322d-7113-8704-b892a0577818", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T10:04:17Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhATkhG9VjdOkUloWeAVJgLdvMI0IvXW2OsOzWIMn5Qw0wm_NSVjJiFyNEa2DCwr-MfTfrnkPi53Vo0tnvnVReeJ1gjgCQC6qc-qP1LAJO4Xe3hwETRGE21k2qeGKSiIJXjj4y6JAZYIJeUWPQqhzU9709KnL-5vwiFbTjWA7w9EOc76Dc8Oz16l1hAqiK8gxT8GJKF0bk2cXQQijC2kf_4kxlC_t1MLgRFuZx_RexQkQxMdEYgx1fobXl1gg4qhSxlVMbORHEjdJaf5lhARCk6Km4T-RM0a64lYOu50_yfz6hyM8nJVnNi5EbWTUEgjUgoYkwhcXH0Sf1EDIMZyHiLBsAALmRJuww2D_YTHFhAKLZwb1OsSUQ_aH_2UB_Foa1cXGhUjQQqRe9_kJAyZ6Hr_YK_5x0KBjGMTvG2aD1a7Qvv4j9JpkKiCYHnDA_OklhA7e1a5sY9oJJZgGFzdcPbdR7z0mXp3XflFcImuASQNhNcGclt0Yw5naf-l4k77AYhI7YCcWMB3z2PtULYT2NyqlhA2-NtSjnsShBl1ETF6oHC7tb-bSlJR81V3Jpr_R-TJZFfroknFO9FdF0RXrwVQM1-YDOrrq5K2yXHRX8FDShBG1hASuE3aJqD53ZZKrwGiFBJGZSkUKzIcmJtBQGxwfpCWbSyZZi_I7sZedISzMVY5dpLnp1tVdv4mzykzsJwKGGWBVhAomunVcXYl3GQTgy7HonCB5H4xxeH5tm9GXnFTOTT6PG0Di66gXX5FmWes9SMgqwiT9Jt33qA22SbPFnqp1lKiVhARdGwZxMxdG_TMxkaLFkzf_N-T1pHBVeV5vmW4ZcBsNmvumTn6I8vT5OLJkWca7VKGMD_RzLtyYmQ0ceH36aqsFhApmPIzodB-zPVMW4TM4QSrW-X01AVFxUGx1vKkwFYlCIbYf3qM1gORwsG4mDFo7857qgVGpsio9KiDvZ4wRV-blhA9qbMS7e5Ovm_kqqIkdvCuRoFVW8X5SYLdLyogsKg53U1aW8BpWYS4_C3-o1k-f7IAakkSfgXTGnA5qnNFcQyrFhAjQb3rr1Sq9RhPT1GF6O0TCJmAu7LNmDXCU0mmWgF6YEcS-7uKI_eOxBnAlk3JHhdnFv_SU_76F4FuPQoFbBsxFhAx3jNx5oRD7JlLZvWCUOGIUT-oun6fjx-ypwFBjRhHAPSQc4M77p8TrfOU2Sv4AUAi89Bj5xiSqKOSR2bQX8ieFhASOP4oWC5U5xPwsWqOOweolEVI09a-DrbnzTqDHcTcyhP4dzzkV7A1LCxE6ShAwU4i6uMCxsuuiOny6iGLXIv4FhAW5mjMcvBACO-UA3j-yxXUinY7fsqv48TA8xb5X6Nz06G8MxInpCXnqjYWL4dolbuyekAL0RXQpEesk7oeAL7mVhATx0nNonwEV2tMc4u0wrGOlSJGoFT1RXXrlnKLR4RsxASp92A2mN3HhhUkjD9h_4J2Ilgk0_zzkFga7Fu5ZoA61hA-p9MNTUCniU2M4zdZ2vgXx_d6BHvGw-5X5OVreW8Fd1GHMsjlC2dxc-NoSVL7tPkD_tKaFBuMAUlgCP0GYndyFhAh0wTAPoXwK8rKoLsID4Z0rH0XcWVk-bqmuxb8IryfHGgp9lDHwSdxJeO7IkR4NXbnD3x2pLSj9l3oaGd6-E6l1hAJ22rblaExIFaPV7DVz-R83k3hYblWqaS4d1tEB_GyLAygsMM1eb9MjJtVartPnrDM9o8HlWo2x6mPEKmN4UPOFhAQJfZPev4b3LWNca3zTtpi9dwt799_TgeIVQMqvC29DFJvZl8d4h6FH42_pTxeBmo4RvxAztjUHQTEAJHYV7v31hAj8gYaydMdkfvkK8z6cL4kZYoqm_tzK7ga9bskL7_gXz7OJYhHiDAZrb5njhnaOEehM73r4jrAHGgvRV6qM7pUFhAW7ikDMXluz2cdBrdTHFZCIfHqh-dSCXQPcO2nhQjIv57GEPiRysBaqjE-5nhfG-GXx22vNa1wMJST_J9_KJwzFhAIAUQv4bOJWvMf_twrm7t8tw26JOJhUu41pW-GqgvKHUha1-PfjET539SUQM-wkrrt5Z3SvBTnVDqoK-snxr8YlhAmBXoSJDZid-4GT5PA5Rc1CvL95OoFu_XjLOv34pK5VqYb2d-HRaDtx5m4fl2MyNX6qurHZhnJrdWQ4GG3r0BEIJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_revoked.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_revoked.json new file mode 100644 index 0000000..fc743e9 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_revoked.json @@ -0,0 +1,54 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "id": "https://trustvc.github.io/did/credentials/statuslist/2#5", + "type": "BitstringStatusListEntry", + "statusPurpose": "revocation", + "statusListIndex": "5", + "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/2" + }, + "id": "urn:uuid:019ec925-37d9-7bbe-99aa-6ffee60257a5", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:40Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAl5fxgsRhcsaEf-3ISFvgmfRj2mqlVMa2Yb0APG_LVtbrTgd_QiGs9ButJOw6JlkwiX36JXomNwA0tV7xAbaQ6FgjgCQCXSkhAXJpKqg-5lw-sbwpKcdp2OSLe58VsmjYEuN5EIJYIFsErFFD28TXCz8JZ4c9dIYKPEAqlQ4XQ4mDhKZk-s5Wl1hAOUAxRTW2KqxdOLor5zaxs2Hd63trz5t8fg7TY90JX3ZlIBd0OBkfTmzUidEG_7bBGmEP3c3SSJBJt2rriEedx1hA0qLJdOge4ESWSbSWhpn2GQwuKK7l5-WrHqmTHK4I7hDTqsNCczoBFXB5_GOTfrYNMc5lZ5HtHsgI9uF0hZuSblhAPJCC7PiqZRhoOmY3vLXkrPZJQMbcsSCHk_WgcSIao5JUojVRzXONSlQYxkYlgsmhiHB-TXPNnxEHLHrrsKE_z1hAJcwTmnlowaavIyyqDCd2q9s8Otk9vpZ8zTkb43pLdPSlkK2pw7DfBEw8v0qrMlJqDW_kvKS6BEJqcsxM9ZpcGFhADWOL65nG8Va3_wpzxoHiroyS5u50Fe3Ks46eMdFM8a1PZowBOqWSt6X4T12ct6vOBd4IU2zF3EpISeyXgWfMsVhAylGbLrBL30IE3icsk-9dewavrrlycdPDwdx7HQdaTuCgCHDroy53x9sjZ0kof3TQlsLDpqSYQo4zzKfW4fFhKVhA210BCCm-Hs_0GUydAmvRgXYSK1_tAseh5KOdRR4KthnLxgrUv26gt1CWj68uvMZ3YLzog681og63t_RNT_lGlVhAIxOCd8hrgydoqzyh3K1DDN6U7oBIr-I2zRZP2nDwWYj5vdDzqpNO7b5rOXTNOsFd4cEL_Cm003wUSiWK97Rdo1hAzApD18f3TGmzsC2n8HXupbeTxis6VPE54MT9yoxhbDIHt67Cna7AAoA_MkcJFUFn7l1PlHIPxS8pfAgZVXeoelhAcz5erBqMU20WWMZ6yaJ-TCjPkk-1ze5fPmsxV1nQaQt5Zus2bcALGvPhb91c1DoGUqAcgTk2Ex6hNfno_BuM1lhAiBEVNEfczQ0J91lBAz4NELyCc8kOK4d2lr7ycv1Pyj2bXemm5EeRRKV1tBg4QTonNyDhe6cXtjji2Ugeyzt1b1hAsaE58IAbEqHUa_pPNDyuOXiB270Q-SUEHHM6AKe9DlZLH95iuPzIabtzEdLutgSHdE2TWC5gSa1dDp4dUSz56FhAWepNPE0FXJp7tOEnRL67mL8TCkEkYEzZJi5_-NnGiED6Wm-vI969K4FxRrpckz56pvAwKsQBC9XZdo37hHmmbVhA-E8JR3rFHCfyEColgO0IdCruHtLjWAIpE-jc3Dkzh6RjYD2Ix8-oDI_Jn2I9SDzb5EEdbWTjorY7DmOu3GzL2VhAbNr13oYz57fQMjehS14aLDdGrsF85nKRoDn28bFgUTzbRRTK7xKQX20Dw1SL1WbFjzUcuwrjAZw6dLdX4CZIvlhAM5xoeAqo3ni67ZY4jVnaiOnniYLU9VOFVkFQrSo361wWXZAvg8DD8KYQkdsKmiLom4wJkfoc9h8wMLL4biZNSFhANMU5m_aVFbMXDgU1h1G-kzWbCUYFz0qfoaWktEq60OLIjn-d202vxbHdnYSK3THUUkd-5ZGv2vo4fOO4SN8kc1hAvcKm90KOQ1Z_7TNsruaSQGW3UHjLfdP7kdApXo5nEvKg6iBHvjFGryAvw8Cn_TEkHyvxaaUvVjV_DWI7ZLauKVhA_cU78kbjH5giF46SHARNMQCeVSKVwUPxVHMqf9DzL30ZQgSVJEupxHwdE10gYmT5hXQwh5Xmuqt_l5XRO_EUw1hAz-NtG1ahVrJ5Y0YWNIUIef56fIPypRczifHmtL025BoQgfWl0j4UiHcL1bWk_N06tmMt-1qdqz7YaXUt-84bv1hAoCvS6dTtLKo78ScARvEW1GuNtGuoLm-lP40Kr-TtNOEOqbPGptKY7ONVCPBi0yW1ogz-oWdydW5R8zuZO9IG2FhA9bHf7N9VRx__X50VDYF2s3JGIn4GOM-5AYh1QbRKkb4EwN8a69LYD5HKi1WElrNSx_YuqQJ_JaAr41BKTPl8jVhAt-D1D_uLHqerJNaJRQxvnoTYT_bu9LuQ7392bORNW59lnB-ALQZI7b-s3W1TTQ4kk7zbn0dyPPb-zW7ID3fJcIJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_identity_invalid.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_identity_invalid.json new file mode 100644 index 0000000..80abe50 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_identity_invalid.json @@ -0,0 +1,47 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:999", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-37b0-7bbe-99aa-66433b952967", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:40Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAp1qZ2XGSATZEn2jVVGC0SxNRC8z8ZF38NLYszZT5fRm9LYoOnLA9z-bz2axV0g_hnBkHEKRGk2mSyMQrM5rroFgjgCQCWh3nh3AzL9yRUn3dO2i1ojBnryLiAaFA4CLJHMEWvkBYIKf91xwfo-m1jGeBuBkPwx4Jb73Mz77vp5xW2J9jaw2EklhAoYEuVljecRp2d4SQ-J38JDJf9Ar-CmIKijDPIqEGovdhmfKp1-d-_Si-g9nn7PR4-Ah_N1ojnu3ESmYkKrAKXFhAeJ8yQKhR4rDMuJB4p3o2WIGHyQwOcsbCXK7DjI_HEHG6AJX7nstw-NQjBKx9FoSTBt6avTm3JpTg8pb99F5Bs1hAmVMuh4V8JhaARiPKk3RdWB9r5ZXjT-iel-1tL7MT73bLbHffxL9MPZTOfCTFE52thGxYJHR06PplJan2YNJaslhA7ArjBvoxGZCP7YuCCDVyZL-9c2z6dMI1DOR61JaTYrOxrmOz45S4mrCBqZcO8BWYPmYpVBGt2C0_rR1ccb0kx1hAgqZdHEpPOgLj4YLk5edWgGVnI08vpGt1gNPqoOKxSuxgDyIp3pkvTX3oHyBJcSetdY_fs4RT3eb2gYCU-QjxZ1hAURtFqiw1_9xE8dmJQzEeCwlwlYg3sl5tYokn7lQPvdlqPWMxwoUdTzkmIeRTfYSabt9z5QoBhF_UC6RDNDMXtlhAzpueN7aHstsDFDL9FqwUlV2sCkREYxXtMo8GzuvLZaeKPB47Bnad5zKTod_EPYkn9O_00bDUvvjtKXN_uWJvW1hAV-4HaYh7UwSpmyDLN771vXm8AIFiE_c5oMPKNKDxKd3S4eqNYMNsux5chvuees_nwWvsJajwHNSLAxzx_GU8IVhAE_wMv9jU_NYEzH47juq2htfO_CD71Ooeq9jSm7wtSCkhYszlJN1Ijm4IEmeHjp-iWzuLfhCRXY6Sy_WULQK8_1hAwQ7e07zXDMS_RNu_lj6fkGrIfBSZZME85YeRM9g5zgyxY-LaCMO-An7tTFyqc0Js0M7XM1YT-IknJAWmZN5Bn1hAIHSsMJoHB-ST3PmD2M1xnXSbXYPHzkGEnDncODruPfi9Xhnz4js28oN9D2SyqZnbU2r122cU71-b1oh8sW63-lhAqJy07b_ktxQ3CnbmEUe-y6XzVN1d5Gz7qV7JCCaDNF3TYiqSLlcCdAIXJ-HM96UXHPdUrXg0Wt7igMsDXhfK-1hASoE4wMiw_4Ib3yCjRA6uY4zT43MZVb1ELPBZvD8m-9m5els49jQlUeaRH5B0yP2Ysinw7W_Ps_rw1scOQcaxXVhAfuweZBry2Im0gG-9esZ0vUjCWDCNmgZRpi_NX3O88bDRmaWmdhBd3kSxz03P4pjfIm6RzV9pWhN0QUt4M86hFFhAXvRbKGi2AemaRC8zX8bUAJLT3gYD5GeKohfB2KSzGBSXOfCEN-JbdJrQ609G1VTgOv2y84aocbot79swa7JMvlhAFYMOpuWYCWygfOeMhbxzElLjIMAfbgJgOnL6QF9ts8dE8htUZzanG_Ud4RwjD65c8wJluKyyvY4_lGF7Qtxey1hAWN7LFfihTeokXt44vdKfQWWXczobDO6_i7lOtkzPr4V4u0CFLPDVj8nEwrtbhq8h9fUQs7X2GBODO2g3eFtlvFhAEAQ8eZvJqUvlvVFsh_V_FB1L2qoJ10axb0YrJ_M2v9W7uD3_C19cA11XHkeVfi0Z04d5phpQEWvbkfQ_dc4BeoJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_tampered.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_tampered.json new file mode 100644 index 0000000..a650c59 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_tampered.json @@ -0,0 +1,47 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "TAMPERED", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-3627-7bbe-99aa-54e0a129bbc0", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:39Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAHI77GNPn49hj5XRgbafjB2ZPlz4Mih-Tm9RdITXLjoeAPcCPp9g3S1SMFIBMYnaH6f-Yn-eheYf2zF2rvTOYW1gjgCQChlC_hXMJh9iyjURRTA8Xp7B2S_P-6Py9HgOBhKWbVu9YIMUW1ya2kuhfl6ygBMBfN7Nr7d_pectfOZzmUQRbzq2NklhAPkgi8IsZTo4vcI3Fi8bOpkvNFJofiprsQFLmv3m3ZCzlQLMt7E5h4TXICKB-XjJ0zhn_2wB_9Iq7El1RDFnMXlhAV_6jTTZQfBgAs3PLB8BLfPlqyi0Ey76Q5X7kVLvsipmC_JKDolfkWZA65jr9obHZ_Q3HZ-jU50SudMGloaz_QVhApNBNdJplqBzODpIdcZjj9v4DbztPt8T2w5q8Zl-umwBcPVmiGc1UqrwJeEzW-1hBfHrdSKEXSNxqJupKvgRFflhA0Bmvu1h_17pb_ecX5MC3tTj5VPY13wPAXm9r_J49R10wgHF2DW13gEivjLk7RGG2a2v_KL6whoxeypsH6Kkh7FhA-rqrjL2EqAUBzTr4X_Gfe5f-gE07G9FybsZPNYD5D28ioxBfDaHPjAW50QJuaIm23zArJ7z_F8UzDYt7Dj9B_FhAfU4tQzlv1Ie0chH38sA6NTPp9VhX0IWqHEClQprKU3WFXYcP-uq4Lm1Bbv5eE8ujxAWJ7P3hxPp_L2J84Ddv2VhAMx8iptZzJH5wKSR3Sp2XsqCq9vWBY_SDKj6TAtazhn3Q8yED8GX4rdvclVnMfI5bgKqYOEkYmZYuKbgPCFhwBVhA1i4tPlrFU4kaokaXoMN5rXwc3gNXhACHN9Qewwx4EHv8ITXivHE5paVl5322XnTg7pvevH3ttpHHC5wCvQbxaVhAdrE_d9N5JGNekRA_tV70MxywklHtDp9Q9iHFNSRljgVkAkqepdwGseokO3byUtcifF47VMfJZXFU3ebkBf09wlhALmEu83w8MkgUiuhMKai5pEDxiqGIsIdNydq8p06Y30sMW83GrHnCuXa3x49jfhJkKgEI8NtJnlmMeqJrlDYGP1hAao6IWUY0gdRfLZU9MNxu53mqfJu6s_RNBzhKZsUq9rAc1T_pcxou0iu-8wGBvPP8cAHkrXgD-updseBhQoscCFhA88omjuarGHlnW3CoPzY-HILsHOKPYXaGJOKRg-cLRnJ2eUmEBqjqd644ZMnhjEQsVFWspz1qB8f2CxYtZS3pclhAKunCAcg9B1SsKss4FsadWM9MmH4_O6MxGgNj0qnD980Wd0p5GXqyLvLZDZost0SVOheATNGuyF8VjQn7vRXnslhAMBwx94HZvVJ5lto6dxrRcXspTRFNktM4l-57B3S4lmWXgJkxZm3ILIzOnU8tuDAd385siohg5G3O209qGsTa0lhAjJ9pcbTyRQePg-40h_iE5cMcSwH6c2C7PvXD6nnREsCkJQqwsfklSM14bczoCHEcbbgEGtCCHWGYwFwI_0pdjlhAfUmuFoq1QlBPMWRSZZcYqU53Dw0A6hR-y0eLckJuEzVEjdSTak8m0U42R6UyHtKdBpGouyj2uPl8-mnecPTmpVhAd1U5ZAfbnW_Y8dByxpyLQIX_iqhQsH_CHIvYf2nKCptzXHYfxs3fCNavjxGFToZNHHtDmuekIa0htsGNfyRQXlhAw_sdQXMQfN7mBuCnDe4b4Tb7EXGx8UHW1geF6P3bdKqCa6543Wto8qWTptPLaXyAj1aPK-iK8xZ_QhSS_d3UyYJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_valid.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_valid.json new file mode 100644 index 0000000..2853dd8 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_valid.json @@ -0,0 +1,47 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-3507-7bbe-99aa-439d21ae1343", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:39Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAHWDsdnb236oM8pT387AnPENenHGUp1GVujNhae04A7854kGQWt1X92mnfglzCsuWIwIdPwiXJN01j3vnCM_rnlgjgCQCHWUz-N9uoiG0dn4lvMZkTmU7E8BIFsH8QZ0wLNMNeOZYIPNcPH19C-QzKE73Gu_B4R3Bt3M32dJOk1FXmFQcIiD-klhA8z-iPcV-ERrOqBgw5kh0aH0rKmKp7LSKsMFc6NrCZEB7S2hc6rlEcM0rzy8o3HvUVC7ypDi2ZcGZyR2V82xp8lhAHwDIxbOwBI5ZW4IhoPP7-R9fvrVTdtcKysYqaLtfqDoeWd0U4S5GlBbGJduPBXBcRe_qGWrkNfZYiBBFTgPNpVhAi3BSNtGkTC7hruq9RtdjgOuR46c88sZvpF-DQowXcVJudpEW7O3HokwrO8XfAIiV0vUSeButzPqx_A2fTcdoIVhAroWtBGgPS3353lQ6IRGU6XZuIftM9es279OL3PwH5hTqKlz0VS4eUci-J_079EE75IK1VWum7RfFB0IQ0b_rHVhACTa6QsbAM3Fb2kdBx0v10XsnO0t24YOxURVVZCazujyhHzQZUFLt18oq4Y8MlVsog7cSmTmtG4vVqi5T8ox-yFhArbvgjxzfP20-zW5wWqeO6f_ZfzyboHs01Y3S2vN9reTPOkSmOnLHqg7NIEHHiuFTcTnoyaFCoHiNyY_Sb_4oeVhA-C-VxmXNwgAsNBIyYYUbPgiUwKWqARbFcMm4hKfuM8-7S9Qz3Z2FfpEjTVnGel1ICKqV23ucrEo3Ppg4ifRijVhAs_kiXv1bpCrTz74UkLGnnINNYGKaL30T5X7Ik50vxCt1r2tUWb_LOW_giImCIOZX8FL5RiAhyosu_vw9KYy6M1hAgRcJ17jbrHywnJguuK8fL5QW2IeCWQYaQQyMcKYcJUGMbNkhvTXvdPvx7gFB78pLNFlEQOYOTbJ__DPUtDQf0VhAi3w8rmOd_2XRrUEQp4CIoiOHsdF0oTSZWJqk43MAfw7P_392BQx1GQ-SB5Z0Ndd-fUZVloDoifDR5S94MRRl31hAUhpz-cSDiLQdxtZDMOzAerGu-OPHbAhgBXE_UreKOzz-xnZe5OBBb3mKhqO56qBPi5f-cILBp6z2S5mp65tXTlhASQzJmZZZArOhGRG6fwA3pg4aaL80Rf6INJidPEO_FwH2B2fPpSJfUeheBM3pCUFj0X6xOpi5sY2eNWogp_IxIlhA9K5Z86kVu2edPS-rN6XOUBnFHaVfn6e1t71GW1TUSWdeldzQJmwEHVrmLt6WOeIjs_A2ESPE-RLrEZ05D_Jtv1hAySjrGG-jZIzjx1NFZSf1O2pbZVg5sTGMqfCnWinI-XV02aNjBscw4aJVQt25ag0YJBCCHrqB5hlDV_ObiVYcK1hAUdN81I6HO_XuQgbl3ZrxctuykxWndd81Xyi2rZWN_DU-XUYJs_I5uABurV0qdDRjsdSMp_P1xqmg3sp-vU2ZPFhAXtNs9v6CYuzDlqQMAzaj0sujawW-LuRgQNZVrgI6Nd0TuGlMBhtZWPg_pAr_KGDuip-wrotDZOhjPAKCvVsE7lhAzSkdJ0rArJUob8VbL1f-h7QonxYfGrXsTZLYlbh41_jVKREvUS1lqJ7n843C24xjRGKg5ovDQes_kgDmxXSKnlhAtBx01bMBS-jqbRRjKGU0vqnv04ph4aEj8jj654qZFdb_UJyTn0llhqCbXhZw00FQXoDOGIpkzFA0621yTJn7a4JnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/helpers/verify.ts b/e2e/helpers/verify.ts new file mode 100644 index 0000000..3ea3650 --- /dev/null +++ b/e2e/helpers/verify.ts @@ -0,0 +1,139 @@ +import { type Page, expect } from '@playwright/test' + +/** + * Helpers for the verification (read-only) e2e tests — no MetaMask needed. + * + * The app renders one of two outcomes after verification completes: + * - isValid === true → with three green checks + * - isValid === false → overlay (generic; the UI does NOT + * surface which of identity/status/integrity failed) + * so happy paths assert the green checks, error paths assert the error overlay. + */ + +const DOC_STORE = '0x057ef64E23666F000b34aE31332854aCBd1c8544' // setup-document-store.cjs (acct #3, nonce 0) +// Address with no contract — used by the *_contract_not_found fixtures (DNS lists it so +// identity passes, but there's no contract there → CONTRACT_NOT_FOUND). +const NO_CONTRACT = '0x000000000000000000000000000000000000bEEF' +const TOKEN_REGISTRY = '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512' // setup-contracts.cjs + +/** Resets any prior result so a fresh file can be uploaded. */ +async function resetIfNeeded(page: Page) { + for (const sel of ['[data-testid="upload-new-file-btn"]', '[data-testid="try-another-btn"]']) { + const btn = page.locator(sel) + if (await btn.isVisible({ timeout: 1000 }).catch(() => false)) { + await btn.click() + break + } + } +} + +async function uploadAndWait(page: Page, documentPath: string) { + await resetIfNeeded(page) + // #file-upload is display:none — setInputFiles works on hidden inputs. + await page.locator('#file-upload').setInputFiles(documentPath) + await page.locator('[data-testid="verifying-state"]').waitFor({ state: 'visible', timeout: 30_000 }) + await page.locator('[data-testid="verifying-state"]').waitFor({ state: 'hidden', timeout: 60_000 }) +} + +/** + * Upload a document and assert it verifies VALID: all three checks green AND the + * document renderer mounts (template iframe). Pass renderer:false to skip the + * renderer assertion (e.g. if the template host is unreachable in the env). + */ +export async function uploadAndExpectValid( + page: Page, + documentPath: string, + { renderer = true, template }: { renderer?: boolean; template?: string } = {} +) { + await uploadAndWait(page, documentPath) + await page.locator('[data-testid="verify-result"]').waitFor({ state: 'visible', timeout: 15_000 }) + for (const type of ['document_integrity', 'document_status', 'issuer_identity']) { + await page + .locator(`[data-testid="check-${type}"][data-status="VALID"]`) + .waitFor({ state: 'visible' }) + } + if (renderer) { + await page.locator('[data-testid="document-renderer"]').waitFor({ state: 'visible', timeout: 15_000 }) + // FrameConnector mounts the template iframe... + await page.locator('[data-testid="document-renderer"] iframe').waitFor({ state: 'attached', timeout: 15_000 }) + // ...and data-renderer-ready flips to "true" only once the template has actually + // rendered (the renderer posts its ready/height signal back). Needs internet to + // reach the template host (generic-templates.tradetrust.io). + await page + .locator('[data-testid="document-renderer"][data-renderer-ready="true"]') + .waitFor({ state: 'attached', timeout: 30_000 }) + // "Rendered View: