@bsv/dpp-profiles 0.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +58 -0
- package/README.md +64 -0
- package/dist/applicability.d.ts +96 -0
- package/dist/applicability.d.ts.map +1 -0
- package/dist/applicability.js +181 -0
- package/dist/applicability.js.map +1 -0
- package/dist/combinations.d.ts +30 -0
- package/dist/combinations.d.ts.map +1 -0
- package/dist/combinations.js +103 -0
- package/dist/combinations.js.map +1 -0
- package/dist/evidence-shapes.d.ts +198 -0
- package/dist/evidence-shapes.d.ts.map +1 -0
- package/dist/evidence-shapes.js +123 -0
- package/dist/evidence-shapes.js.map +1 -0
- package/dist/gs1-epc-binary.d.ts +81 -0
- package/dist/gs1-epc-binary.d.ts.map +1 -0
- package/dist/gs1-epc-binary.js +252 -0
- package/dist/gs1-epc-binary.js.map +1 -0
- package/dist/gs1-resolution.d.ts +392 -0
- package/dist/gs1-resolution.d.ts.map +1 -0
- package/dist/gs1-resolution.js +696 -0
- package/dist/gs1-resolution.js.map +1 -0
- package/dist/identifiers.d.ts +57 -0
- package/dist/identifiers.d.ts.map +1 -0
- package/dist/identifiers.js +117 -0
- package/dist/identifiers.js.map +1 -0
- package/dist/index.d.ts +235 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +124 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest-v2.d.ts +87 -0
- package/dist/manifest-v2.d.ts.map +1 -0
- package/dist/manifest-v2.js +31 -0
- package/dist/manifest-v2.js.map +1 -0
- package/dist/mapping.d.ts +84 -0
- package/dist/mapping.d.ts.map +1 -0
- package/dist/mapping.js +88 -0
- package/dist/mapping.js.map +1 -0
- package/dist/projections.d.ts +233 -0
- package/dist/projections.d.ts.map +1 -0
- package/dist/projections.js +466 -0
- package/dist/projections.js.map +1 -0
- package/frozen.json +42 -0
- package/generated/consumer/battery-v2.json +2248 -0
- package/generated/consumer/battery-v3.json +4354 -0
- package/generated/consumer/general-v1.json +9 -0
- package/generated/consumer/general-v2.json +714 -0
- package/generated/consumer/textile-v1.json +101 -0
- package/generated/consumer/textile-v2.json +1033 -0
- package/generated/consumer/textile-v3.json +2011 -0
- package/generated/index.json +86 -0
- package/generated/mapping/battery@2.md +116 -0
- package/generated/mapping/battery@3.md +130 -0
- package/generated/mapping/general@2.md +50 -0
- package/generated/mapping/textile@2.md +61 -0
- package/generated/mapping/textile@3.md +73 -0
- package/generated/payload-schema/battery@2.public.schema.json +609 -0
- package/generated/payload-schema/battery@2.restricted.schema.json +377 -0
- package/generated/payload-schema/battery@3.public.schema.json +1364 -0
- package/generated/payload-schema/battery@3.restricted.schema.json +1097 -0
- package/generated/payload-schema/general@1.public.schema.json +37 -0
- package/generated/payload-schema/general@1.restricted.schema.json +9 -0
- package/generated/payload-schema/general@2.public.schema.json +352 -0
- package/generated/payload-schema/general@2.restricted.schema.json +52 -0
- package/generated/payload-schema/textile@1.public.schema.json +82 -0
- package/generated/payload-schema/textile@1.restricted.schema.json +22 -0
- package/generated/payload-schema/textile@2.public.schema.json +464 -0
- package/generated/payload-schema/textile@2.restricted.schema.json +78 -0
- package/generated/payload-schema/textile@3.public.schema.json +1299 -0
- package/generated/payload-schema/textile@3.restricted.schema.json +78 -0
- package/manifests/battery@2.json +4047 -0
- package/manifests/battery@3.json +6164 -0
- package/manifests/exchange/untp-0.7.0-jose@1.json +191 -0
- package/manifests/exchange/vc-di-ecdsa-rdfc-2019@1.json +74 -0
- package/manifests/exchange/vsc-draft-compat@0.1.0.json +64 -0
- package/manifests/general@1.json +148 -0
- package/manifests/general@2.json +1266 -0
- package/manifests/interoperability/epcis-json@1.json +69 -0
- package/manifests/interoperability/epcis-vsc@1.json +64 -0
- package/manifests/interoperability/gs1-digital-link@1.json +71 -0
- package/manifests/operator/federated-operators@1.json +54 -0
- package/manifests/operator/single-operator@1.json +52 -0
- package/manifests/textile@1.json +383 -0
- package/manifests/textile@2.json +1682 -0
- package/manifests/textile@3.json +2763 -0
- package/package.json +59 -0
- package/schemas/exchange-profile.schema.json +134 -0
- package/schemas/gs1/NOTICE.md +11 -0
- package/schemas/gs1/resolver-description-file-schema-1.2.0.json +124 -0
- package/schemas/gs1/resolver-linkset-context-1.2.1.jsonld +39 -0
- package/schemas/gs1/resolver-linkset-schema-1.2.1.json +96 -0
- package/schemas/interoperability-profile.schema.json +347 -0
- package/schemas/operator-profile.schema.json +108 -0
- package/schemas/product-identity.schema.json +45 -0
- package/schemas/profile-manifest-v2.schema.json +1087 -0
- package/schemas/profile-manifest.schema.json +291 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifestVersion": "1",
|
|
3
|
+
"id": "untp-0.7.0-jose",
|
|
4
|
+
"version": "1",
|
|
5
|
+
"profile": "untp-0.7.0-jose@1",
|
|
6
|
+
"kind": "exchange",
|
|
7
|
+
"status": "proposed",
|
|
8
|
+
"title": "UNTP 0.7.0 credentials secured with JOSE, pilot exchange profile",
|
|
9
|
+
"description": "A pilot interoperability profile for the UN Transparency Protocol's 0.7.0 release, tagged v0.7.0 on 4 May 2026 at the specification's GitLab home: product passport, traceability event and conformity credentials in the W3C Verifiable Credentials Data Model 2.0, secured as compact JWS under VC-JOSE-COSE, mapped to and from native evidence with every loss visible. The schema and context artefacts are pinned by digest from that tag. UNTP compatibility is a distinct claim from any regulatory conformance, and verification by UNTP's own test tooling is a further claim this profile does not make.",
|
|
10
|
+
"representation": "untp-0.7.0-jose@1",
|
|
11
|
+
"mediaType": "application/vc+jwt",
|
|
12
|
+
"dataModel": "W3C Verifiable Credentials Data Model 2.0 with the UNTP 0.7.0 vocabularies",
|
|
13
|
+
"specification": "spec/exchange.md",
|
|
14
|
+
"artefacts": [
|
|
15
|
+
{
|
|
16
|
+
"id": "untp-specification",
|
|
17
|
+
"kind": "specification",
|
|
18
|
+
"uri": "https://opensource.unicc.org/un/unece/uncefact/spec-untp/-/tree/v0.7.0",
|
|
19
|
+
"version": "0.7.0",
|
|
20
|
+
"retrieval": "not-retrieved",
|
|
21
|
+
"notes": "The 0.7.0 release, tagged v0.7.0 on 4 May 2026 at the GitLab home (main last active 4 September 2026, revision df03d8f87e74f676ccfece87ba77cd8f804fe111). The GitHub repository uncefact/spec-untp is archived at 0.6.1 and points here. No 1.0 release exists. The documentation site untp.unece.org refuses non-browser clients, so the tag is the pinnable source; the specification text is many pages and carries no single digest, and the four artefacts below are pinned individually."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "untp-dpp-schema",
|
|
25
|
+
"kind": "json-schema",
|
|
26
|
+
"uri": "https://opensource.unicc.org/un/unece/uncefact/spec-untp/-/raw/v0.7.0/artefacts/schema/v0.7.0/dpp/DigitalProductPassport.json",
|
|
27
|
+
"version": "0.7.0",
|
|
28
|
+
"retrieval": "pinned",
|
|
29
|
+
"notes": "The DigitalProductPassport JSON Schema at v0.7.0, 50362 bytes. Its published location https://untp.unece.org/artefacts/schema/v0.7.0/dpp/DigitalProductPassport.json answered 403 to a non-browser client on 2026-09-06. The schema defines credentialStatus as a BitstringStatusListEntry, renderMethod and issuingSoftware beside the credential subject; a credential validated against it names the UNTP context.",
|
|
30
|
+
"digest": "42c51943ab23547d5287899fd12b214b19b006c28d105a70ff390f8551b12653",
|
|
31
|
+
"licence": "GPL-3.0-only, the licence of the spec-untp repository at tag v0.7.0; pinned by digest and not copied into this repository pending a licence review"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "untp-dpp-context",
|
|
35
|
+
"kind": "jsonld-context",
|
|
36
|
+
"uri": "https://opensource.unicc.org/un/unece/uncefact/spec-untp/-/raw/v0.7.0/artefacts/contexts/v0.7.0/untp-context.jsonld",
|
|
37
|
+
"version": "0.7.0",
|
|
38
|
+
"retrieval": "pinned",
|
|
39
|
+
"notes": "The one UNTP JSON-LD context at v0.7.0, 105396 bytes, shared by every credential type; its published location is https://vocabulary.uncefact.org/untp/0.7.0/context/, which answered 403 to a non-browser client on 2026-09-06. The UNTP test suite resolves a credential's schema from this context URL.",
|
|
40
|
+
"digest": "fbd4824e30d3cfc5cba949e1efe19b4c9ebaee056abe7aaf1c6b139a7bf91b0c",
|
|
41
|
+
"licence": "GPL-3.0-only, the licence of the spec-untp repository at tag v0.7.0; pinned by digest and not copied into this repository pending a licence review"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "untp-dte-schema",
|
|
45
|
+
"kind": "json-schema",
|
|
46
|
+
"uri": "https://opensource.unicc.org/un/unece/uncefact/spec-untp/-/raw/v0.7.0/artefacts/schema/v0.7.0/dte/DigitalTraceabilityEvent.json",
|
|
47
|
+
"version": "0.7.0",
|
|
48
|
+
"retrieval": "pinned",
|
|
49
|
+
"digest": "a1fa17b743d729e5cb7d1e7db689b87cc0bc655395a625b7ae6f9d195ecc84f9",
|
|
50
|
+
"licence": "GPL-3.0-only, the licence of the spec-untp repository at tag v0.7.0; pinned by digest and not copied into this repository pending a licence review",
|
|
51
|
+
"notes": "The DigitalTraceabilityEvent JSON Schema at v0.7.0, 47175 bytes."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "untp-dcc-schema",
|
|
55
|
+
"kind": "json-schema",
|
|
56
|
+
"uri": "https://opensource.unicc.org/un/unece/uncefact/spec-untp/-/raw/v0.7.0/artefacts/schema/v0.7.0/dcc/ConformityCredential.json",
|
|
57
|
+
"version": "0.7.0",
|
|
58
|
+
"retrieval": "pinned",
|
|
59
|
+
"digest": "3fef068faece5975daa799c8f2d1db675c902f9a4e2c6d3c5fb6833799a73af1",
|
|
60
|
+
"licence": "GPL-3.0-only, the licence of the spec-untp repository at tag v0.7.0; pinned by digest and not copied into this repository pending a licence review",
|
|
61
|
+
"notes": "The ConformityCredential JSON Schema at v0.7.0, 44904 bytes. Pinned for completeness of the profile; nothing in this programme issues or verifies a conformity credential."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "w3c-vc-jose-cose",
|
|
65
|
+
"kind": "specification",
|
|
66
|
+
"uri": "https://www.w3.org/TR/vc-jose-cose/",
|
|
67
|
+
"version": "current TR at review",
|
|
68
|
+
"retrieval": "not-retrieved"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"proofSuites": [
|
|
72
|
+
{
|
|
73
|
+
"id": "ES256K",
|
|
74
|
+
"support": "issue-and-verify",
|
|
75
|
+
"keyRule": "The issuer's secp256k1 credential key, published under its DID as an assertion method; verified independently with a second JOSE library.",
|
|
76
|
+
"consumerMustConfirm": true,
|
|
77
|
+
"notes": "A JOSE library that omits ES256K is a compatibility limit, not a signature defect. UNTP's own test suite (uncefact/tests-untp, technical interoperability, verifiable credentials) verifies enveloping proofs with EdDSA on Ed25519 under a did:web issuer and a Bitstring status entry, and names no other algorithm, so a credential secured under this suite is not verifiable by that tooling; a consumer that requires the tooling's verification needs an Ed25519 signing capability this profile does not define."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "ES256",
|
|
81
|
+
"support": "optional-dedicated-key",
|
|
82
|
+
"keyRule": "A dedicated P-256 credential key, separately authorised and published with its relationship to the issuer and to the BSV actor. Never derived by the secp256k1 BRC-42 rule; never an ES256K signature relabelled.",
|
|
83
|
+
"consumerMustConfirm": true
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"anchoring": {
|
|
87
|
+
"format": "bsv-attestation-anchor-v1",
|
|
88
|
+
"bytesCommitted": "the exact compact JWS bytes as issued",
|
|
89
|
+
"attestationIdRule": "the credential's own id",
|
|
90
|
+
"subjectRule": "one product identifier the credential signs; a multi-product credential names the selected one",
|
|
91
|
+
"attestationType": "UNTP-DPP, UNTP-DTE or UNTP-DCC by credential type"
|
|
92
|
+
},
|
|
93
|
+
"nativeEvidenceExtension": {
|
|
94
|
+
"schema": "contracts/native-evidence-extension.schema.json",
|
|
95
|
+
"version": "1",
|
|
96
|
+
"carried": "optional",
|
|
97
|
+
"notes": "A credential that references existing native evidence carries the extension under urn:bsv:dpp:native-evidence:1; the native evidence exists first and the credential is signed over the references, so no digest is circular."
|
|
98
|
+
},
|
|
99
|
+
"mappings": [
|
|
100
|
+
{
|
|
101
|
+
"nativeOperation": "ACTIVATE",
|
|
102
|
+
"externalEvent": "product passport issuance; a manufacture traceability event only with manufacturing evidence",
|
|
103
|
+
"requires": "manufacturing facility, time and responsible party for a manufacture event",
|
|
104
|
+
"withoutEvidence": "insufficient-data"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"nativeOperation": "SOLD",
|
|
108
|
+
"externalEvent": "a transformation or transaction event only with actual movement or custody evidence",
|
|
109
|
+
"requires": "source, destination and custody evidence; a change of token control is not a shipment",
|
|
110
|
+
"withoutEvidence": "insufficient-data"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"nativeOperation": "RESOLD",
|
|
114
|
+
"externalEvent": "as for SOLD",
|
|
115
|
+
"requires": "as for SOLD",
|
|
116
|
+
"withoutEvidence": "insufficient-data"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"nativeOperation": "TRANSFER",
|
|
120
|
+
"externalEvent": "a change of custody only with custody evidence",
|
|
121
|
+
"requires": "custody evidence beyond the token transfer",
|
|
122
|
+
"withoutEvidence": "insufficient-data"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"nativeOperation": "REPAIRED",
|
|
126
|
+
"externalEvent": "a traceability event of the repair, with the repair facts",
|
|
127
|
+
"requires": "what was done, by whom and when",
|
|
128
|
+
"withoutEvidence": "insufficient-data"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"nativeOperation": "EDIT",
|
|
132
|
+
"externalEvent": "a revised product passport credential; no physical event",
|
|
133
|
+
"requires": "nothing physical",
|
|
134
|
+
"withoutEvidence": "transformed"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"nativeOperation": "RECYCLED",
|
|
138
|
+
"externalEvent": "an end-of-life traceability event, distinguishing disposition from a process whose outputs carry new identities",
|
|
139
|
+
"requires": "recycling evidence",
|
|
140
|
+
"withoutEvidence": "insufficient-data"
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
"storage": {
|
|
144
|
+
"nativeClaim": "the signed dpp-lifecycle-v1 object, when the event has one",
|
|
145
|
+
"originalSecured": "the exact compact JWS as issued, with mediaType, byteLength, sha256, credentialId, issuer, receivedAt, schemaRefs and the intake report reference",
|
|
146
|
+
"decoded": "the parsed credential, for reading",
|
|
147
|
+
"projection": "any derived document, with its own identity and exporter signature, naming its source"
|
|
148
|
+
},
|
|
149
|
+
"unsupported": [
|
|
150
|
+
{
|
|
151
|
+
"id": "sd-jwt-holder-presentation",
|
|
152
|
+
"reason": "Selected only when a real restricted-disclosure use case names it; ordinary JSON filtering is not cryptographic selective disclosure."
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "regulatory-conformance",
|
|
156
|
+
"reason": "UNTP compatibility is a distinct claim from EU regulatory conformance, which needs the applicable legal instrument and its date."
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "untp-1.0",
|
|
160
|
+
"reason": "No 1.0 release exists (checked 2026-09-06 at the GitLab home); this profile pins the 0.7.0 tag and moves only by a new profile version."
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "untp-test-suite-verification",
|
|
164
|
+
"reason": "UNTP's test suite verifies EdDSA (Ed25519) enveloping proofs under did:web issuers only; the ES256K credentials this profile secures fail its securing-mechanism check before schema or context are examined. Passing that tooling is a separate claim needing an Ed25519 signing key and a did:web issuer, neither defined here."
|
|
165
|
+
}
|
|
166
|
+
],
|
|
167
|
+
"sourceRefs": [
|
|
168
|
+
{
|
|
169
|
+
"id": "untp-0.7.0",
|
|
170
|
+
"name": "UN Transparency Protocol, release 0.7.0",
|
|
171
|
+
"reference": "https://opensource.unicc.org/un/unece/uncefact/spec-untp/-/tree/v0.7.0",
|
|
172
|
+
"version": "0.7.0",
|
|
173
|
+
"attribution": "UN/CEFACT",
|
|
174
|
+
"use": "The credential types, schemas and context this profile validates against, pinned by digest from the v0.7.0 tag."
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "w3c-vc-data-model-2",
|
|
178
|
+
"name": "W3C Verifiable Credentials Data Model 2.0",
|
|
179
|
+
"reference": "https://www.w3.org/TR/vc-data-model-2.0/",
|
|
180
|
+
"attribution": "W3C",
|
|
181
|
+
"use": "The data model."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"id": "w3c-vc-jose-cose",
|
|
185
|
+
"name": "W3C Securing Verifiable Credentials using JOSE and COSE",
|
|
186
|
+
"reference": "https://www.w3.org/TR/vc-jose-cose/",
|
|
187
|
+
"attribution": "W3C",
|
|
188
|
+
"use": "The compact JWS carriage."
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifestVersion": "1",
|
|
3
|
+
"id": "vc-di-ecdsa-rdfc-2019",
|
|
4
|
+
"version": "1",
|
|
5
|
+
"profile": "vc-di-ecdsa-rdfc-2019@1",
|
|
6
|
+
"kind": "exchange",
|
|
7
|
+
"status": "current",
|
|
8
|
+
"title": "Externally issued VC 2.0 passport credentials secured with ecdsa-rdfc-2019",
|
|
9
|
+
"description": "The exchange profile for a passport credential another party issued in the W3C Verifiable Credentials Data Model 2.0, secured with a Data Integrity proof under the ecdsa-rdfc-2019 cryptosuite over a P-256 Multikey published in the issuer's did:web document, and committed by the exact UTF-8 bytes as issued. Verification and intake only: this repository issues nothing under it. Proof validity, issuer binding, subject binding, validity interval, status, issuer authority under a named policy and artefact availability are separate findings; an RDF proof that still holds over re-serialised bytes does not make those bytes the anchored ones.",
|
|
10
|
+
"representation": "vc-di-ecdsa-rdfc-2019@1",
|
|
11
|
+
"mediaType": "application/vc+ld+json",
|
|
12
|
+
"dataModel": "W3C Verifiable Credentials Data Model 2.0 with the owned external passport context urn:bsv:dpp:external-passport:context:1 for subject terms",
|
|
13
|
+
"specification": "spec/external-credential-profile.md",
|
|
14
|
+
"artefacts": [
|
|
15
|
+
{ "id": "vc-v2-context", "kind": "jsonld-context", "uri": "https://www.w3.org/ns/credentials/v2", "version": "2.0", "digest": "59955ced6697d61e03f2b2556febe5308ab16842846f5b586d7f1f7adec92734", "retrieval": "pinned", "licence": "W3C document licence", "notes": "Retrieved 2026-09-06 (10131 bytes); carried at packages/vsc/artifacts/w3c/credentials-v2.jsonld and served at run time from the maintained @digitalbazaar/credentials-context package, which a test holds equal to the carried bytes." },
|
|
16
|
+
{ "id": "data-integrity-v2-context", "kind": "jsonld-context", "uri": "https://w3id.org/security/data-integrity/v2", "version": "2", "digest": "67f21e6e33a6c14e5ccfd2fc7865f7474fb71a04af7e94136cb399dfac8ae8f4", "retrieval": "pinned", "licence": "W3C document licence", "notes": "Retrieved 2026-09-06 (2609 bytes); served at run time from @digitalbazaar/data-integrity-context 2.0.1." },
|
|
17
|
+
{ "id": "multikey-v1-context", "kind": "jsonld-context", "uri": "https://w3id.org/security/multikey/v1", "version": "1", "digest": "ba2c182de2d92f7e47184bcca8fcf0beaee6d3986c527bf664c195bbc7c58597", "retrieval": "pinned", "licence": "W3C document licence", "notes": "Retrieved 2026-09-06 (1010 bytes); served at run time from @digitalbazaar/multikey-context 2.0.1." },
|
|
18
|
+
{ "id": "vc-data-model-2", "kind": "specification", "uri": "https://www.w3.org/TR/vc-data-model-2.0/", "version": "2.0 Recommendation", "retrieval": "not-retrieved", "notes": "The data model; the pinned context above is the artefact the implementation reads." },
|
|
19
|
+
{ "id": "vc-di-ecdsa", "kind": "specification", "uri": "https://www.w3.org/TR/2025/REC-vc-di-ecdsa-20250515/", "version": "Recommendation of 15 May 2025", "retrieval": "not-retrieved", "notes": "The ecdsa-rdfc-2019 cryptosuite; implemented through the maintained @digitalbazaar/ecdsa-rdfc-2019-cryptosuite 1.3.0 and @digitalbazaar/ecdsa-multikey 1.8.0 (BSD-3-Clause) on @digitalbazaar/data-integrity 2.5.0 and jsonld-signatures 11.6.0, never a second cryptographic implementation." },
|
|
20
|
+
{ "id": "rdf-canon", "kind": "specification", "uri": "https://www.w3.org/TR/rdf-canon/", "version": "RDFC-1.0", "retrieval": "not-retrieved", "notes": "The canonicalisation the suite applies, through rdf-canonize 5.0.0." },
|
|
21
|
+
{ "id": "owned-external-passport-context", "kind": "jsonld-context", "uri": "urn:bsv:dpp:external-passport:context:1", "version": "1", "digest": "f2c50bc81d8ada697b4096377ccb24f6034c7dad06003a4424fe2145edb726b4", "retrieval": "owned", "notes": "packages/vsc/artifacts/external/dpp-external-passport-1.context.jsonld: a protected context with a vocabulary base for subject terms, served from these bytes and never fetched." },
|
|
22
|
+
{ "id": "owned-external-passport-schema", "kind": "json-schema", "uri": "urn:bsv:dpp:external-passport:schema:1", "version": "1", "digest": "844b34250290d450207d87a3e82656ca301077eb129e5e793cf27bc9a0b07d63", "retrieval": "owned", "notes": "packages/vsc/artifacts/external/dpp-external-passport-1.schema.json: the structural shape the profile's schema check holds a credential to." }
|
|
23
|
+
],
|
|
24
|
+
"proofSuites": [
|
|
25
|
+
{ "id": "ecdsa-rdfc-2019", "support": "verify-only", "keyRule": "A P-256 Multikey (publicKeyMultibase prefix zDn) whose controller is the credential issuer and which the issuer's did:web document lists under assertionMethod; never the native BSV secp256k1 key, never derived by the BRC-42 rule, and never a P-384 or P-521 key, which this profile reports as unsupported rather than verified.", "consumerMustConfirm": false, "notes": "Verified with the maintained suite under RDFC-1.0 canonicalisation in safe mode, so an undeclared term is a failure and a re-serialised copy still verifies." }
|
|
26
|
+
],
|
|
27
|
+
"anchoring": {
|
|
28
|
+
"format": "bsv-attestation-anchor-v1",
|
|
29
|
+
"bytesCommitted": "the exact UTF-8 bytes of the credential as issued, including its Data Integrity proof; a re-serialised copy has a different digest and is a different commitment even though its RDF proof verifies",
|
|
30
|
+
"attestationIdRule": "the credential id; a second credential under an identifier already secured is refused, never a replacement of the earlier bytes",
|
|
31
|
+
"subjectRule": "the one credentialSubject.id the credential signs; a passport identifier that differs from it is related only through an established subject-binding policy with an evidence reference",
|
|
32
|
+
"attestationType": "the credential's first type after VerifiableCredential"
|
|
33
|
+
},
|
|
34
|
+
"nativeEvidenceExtension": {
|
|
35
|
+
"schema": "contracts/native-evidence-extension.schema.json",
|
|
36
|
+
"version": "1",
|
|
37
|
+
"carried": "optional",
|
|
38
|
+
"notes": "An external credential may reference native evidence under urn:bsv:dpp:native-evidence:1; the native evidence exists first and each reference is verified independently."
|
|
39
|
+
},
|
|
40
|
+
"mappings": [
|
|
41
|
+
{ "nativeOperation": "ACTIVATE", "externalEvent": "none: an external passport credential is retained evidence about the product and drives no token operation", "requires": "a separately authorised native operation with its own authority and evidence", "withoutEvidence": "insufficient-data" },
|
|
42
|
+
{ "nativeOperation": "SOLD", "externalEvent": "none", "requires": "as above", "withoutEvidence": "insufficient-data" },
|
|
43
|
+
{ "nativeOperation": "RESOLD", "externalEvent": "none", "requires": "as above", "withoutEvidence": "insufficient-data" },
|
|
44
|
+
{ "nativeOperation": "TRANSFER", "externalEvent": "none: a credential from any issuer cannot move token control", "requires": "the current controller's authorised transfer and the recipient's acceptance", "withoutEvidence": "insufficient-data" },
|
|
45
|
+
{ "nativeOperation": "REPAIRED", "externalEvent": "none", "requires": "as above", "withoutEvidence": "insufficient-data" },
|
|
46
|
+
{ "nativeOperation": "EDIT", "externalEvent": "none", "requires": "as above", "withoutEvidence": "insufficient-data" },
|
|
47
|
+
{ "nativeOperation": "RECYCLED", "externalEvent": "none: a later independent credential does not reopen a retired lineage", "requires": "as above", "withoutEvidence": "insufficient-data" }
|
|
48
|
+
],
|
|
49
|
+
"storage": {
|
|
50
|
+
"nativeClaim": "none; the credential is independent evidence",
|
|
51
|
+
"originalSecured": "the exact credential string as received, with mediaType, byteLength, sha256, credentialId, issuer, receivedAt, the profile identifier and the intake verification reference",
|
|
52
|
+
"decoded": "the strictly parsed credential, for reading and never re-serialised as the original",
|
|
53
|
+
"projection": "any derived document has its own identity and digest and inherits neither the original's proof nor its anchor"
|
|
54
|
+
},
|
|
55
|
+
"unsupported": [
|
|
56
|
+
{ "id": "issuance", "reason": "This repository verifies and retains external credentials; it does not issue under this profile." },
|
|
57
|
+
{ "id": "p384-and-p521-keys", "reason": "The suite can verify them; this profile declares P-256 only and reports other curves as unsupported until profiled." },
|
|
58
|
+
{ "id": "ecdsa-jcs-2019", "reason": "JCS canonicalisation is a different suite with different exact-byte properties; not selected." },
|
|
59
|
+
{ "id": "ecdsa-sd-2023", "reason": "Selective disclosure is selected only when a real restricted-disclosure use case names it." },
|
|
60
|
+
{ "id": "multiple-credential-subjects", "reason": "One signed subject binds to one passport; a multi-subject credential is reported unsupported, never split." },
|
|
61
|
+
{ "id": "embedded-issuer-objects", "reason": "The issuer is a DID string; an issuer object is unsupported rather than read for its id." },
|
|
62
|
+
{ "id": "did-methods-other-than-did-web", "reason": "did:web with pinned documents or an explicitly bounded resolver is the initial method; others are unsupported until profiled." },
|
|
63
|
+
{ "id": "holder-presentation", "reason": "No presentation protocol, challenge or holder binding is implemented." },
|
|
64
|
+
{ "id": "jwt-securing", "reason": "Enveloping proofs (VC-JOSE-COSE) are a different representation; see untp-0.7.0-jose@1." },
|
|
65
|
+
{ "id": "inline-contexts", "reason": "An inline context object could redefine signed terms; only the pinned context sets are accepted." }
|
|
66
|
+
],
|
|
67
|
+
"sourceRefs": [
|
|
68
|
+
{ "id": "w3c-vc-data-model-2", "name": "W3C Verifiable Credentials Data Model 2.0", "reference": "https://www.w3.org/TR/vc-data-model-2.0/", "attribution": "W3C", "use": "The data model and the pinned context." },
|
|
69
|
+
{ "id": "w3c-vc-di-ecdsa", "name": "W3C Data Integrity ECDSA Cryptosuites v1.0", "reference": "https://www.w3.org/TR/2025/REC-vc-di-ecdsa-20250515/", "version": "Recommendation, 15 May 2025", "attribution": "W3C", "use": "The ecdsa-rdfc-2019 suite this profile verifies." },
|
|
70
|
+
{ "id": "w3c-rdf-canon", "name": "W3C RDF Dataset Canonicalization", "reference": "https://www.w3.org/TR/rdf-canon/", "attribution": "W3C", "use": "The canonicalisation under the suite." },
|
|
71
|
+
{ "id": "w3c-bitstring-status-list", "name": "W3C Bitstring Status List v1.0", "reference": "https://www.w3.org/TR/vc-bitstring-status-list/", "attribution": "W3C", "use": "The status mechanism, evaluated under the same bounded rules as the VSC profile." },
|
|
72
|
+
{ "id": "w3c-did-core", "name": "W3C Decentralized Identifiers v1.0", "reference": "https://www.w3.org/TR/did-core/", "attribution": "W3C", "use": "Issuer documents and the assertionMethod relationship." }
|
|
73
|
+
]
|
|
74
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifestVersion": "1",
|
|
3
|
+
"id": "vsc-draft-compat",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"profile": "vsc-draft-compat@0.1.0",
|
|
6
|
+
"kind": "exchange",
|
|
7
|
+
"status": "current",
|
|
8
|
+
"title": "VSC draft compatibility, as implemented by @bsv/vsc",
|
|
9
|
+
"description": "The catalogue entry for the exchange profile spec/vsc-profile.md defines and packages/vsc implements: a documented subset of the Verifiable Supply Chain Community Group drafts at a pinned revision, with an owned context, genuine Ed25519Signature2020 and bbs-2023 proofs, authenticated status, scoped authority and custody graph validation. Not W3C certification and not full upstream conformance.",
|
|
10
|
+
"representation": "vsc-seal-json-v1",
|
|
11
|
+
"mediaType": "application/vc+ld+json",
|
|
12
|
+
"dataModel": "W3C Verifiable Credentials Data Model 2.0 with the VSC SEAL vocabulary under the owned context urn:bsv:vsc:context:0.1.0",
|
|
13
|
+
"specification": "spec/vsc-profile.md",
|
|
14
|
+
"artefacts": [
|
|
15
|
+
{ "id": "vsc-core", "kind": "specification", "uri": "https://w3c-cg.github.io/vsc/specs/vsc-core.html", "version": "c279de3debcd6eab94a77034584d1750f5d65e6a", "retrieval": "not-retrieved", "notes": "Pinned by revision; the ledger records it as a public source." },
|
|
16
|
+
{ "id": "vsc-requirements", "kind": "specification", "uri": "https://w3c-cg.github.io/vsc/specs/vsc-requirements.html", "version": "c279de3debcd6eab94a77034584d1750f5d65e6a", "retrieval": "not-retrieved" },
|
|
17
|
+
{ "id": "vsc-upstream-context", "kind": "jsonld-context", "uri": "https://w3c-cg.github.io/vsc/", "version": "c279de3debcd6eab94a77034584d1750f5d65e6a", "retrieval": "unavailable", "notes": "The referenced context returns 404 at the pinned revision; the owned context below is served instead and no bytes are invented under a W3C URL." },
|
|
18
|
+
{ "id": "owned-context", "kind": "jsonld-context", "uri": "urn:bsv:vsc:context:0.1.0", "version": "0.1.0", "digest": "3c74b79c50ebb151086c8bbe05222d0177a9d20c6f7b725b4e3a60645274cccc", "retrieval": "owned", "notes": "packages/vsc/artifacts/context-0.1.0.jsonld" },
|
|
19
|
+
{ "id": "owned-seal-schema", "kind": "json-schema", "uri": "urn:bsv:vsc:schema:0.1.0", "version": "0.1.0", "digest": "839123ea6a2ca459c62143a9a38ece281a7b91e719dca057b28baf4d53106d15", "retrieval": "owned", "notes": "packages/vsc/artifacts/seal-0.1.0.schema.json" },
|
|
20
|
+
{ "id": "owned-disclosure-schema", "kind": "json-schema", "uri": "urn:bsv:vsc:schema:0.1.0:disclosure", "version": "0.1.0", "digest": "94afb330c77d28454f98fa4ceb52e4dddc9c6abc8f34877c2917b47dc024c67d", "retrieval": "owned", "notes": "packages/vsc/artifacts/disclosure-0.1.0.schema.json" }
|
|
21
|
+
],
|
|
22
|
+
"proofSuites": [
|
|
23
|
+
{ "id": "Ed25519Signature2020", "support": "issue-and-verify", "keyRule": "An Ed25519 verification method authorised for assertion in the issuer's DID document; never the native BRC wallet or curve.", "consumerMustConfirm": false },
|
|
24
|
+
{ "id": "bbs-2023", "support": "issue-and-verify", "keyRule": "A BLS12-381 multikey authorised for assertion; base and request-bound derived proofs.", "consumerMustConfirm": false, "notes": "The derivation API is a primitive; the caller authorises each optional disclosure pointer, and holder authentication is separate." }
|
|
25
|
+
],
|
|
26
|
+
"anchoring": {
|
|
27
|
+
"format": "bsv-attestation-anchor-v1",
|
|
28
|
+
"bytesCommitted": "the exact UTF-8 bytes of the complete issued credential including its Data Integrity proof",
|
|
29
|
+
"attestationIdRule": "the credential id",
|
|
30
|
+
"subjectRule": "one signed product identifier; the attestation id is not a product id",
|
|
31
|
+
"attestationType": "VSC-SEAL"
|
|
32
|
+
},
|
|
33
|
+
"nativeEvidenceExtension": {
|
|
34
|
+
"schema": "contracts/native-evidence-extension.schema.json",
|
|
35
|
+
"version": "1",
|
|
36
|
+
"carried": "optional",
|
|
37
|
+
"notes": "An application token reference is signed within the urn:bsv:dpp:vocab:passport-binding:1 extension the registry already reads; the native evidence extension is the general form."
|
|
38
|
+
},
|
|
39
|
+
"mappings": [
|
|
40
|
+
{ "nativeOperation": "ACTIVATE", "externalEvent": "no automatic SEAL; a SEAL needs the actual event vector, status, authority and custody inputs", "requires": "real event evidence", "withoutEvidence": "insufficient-data" },
|
|
41
|
+
{ "nativeOperation": "SOLD", "externalEvent": "no automatic SEAL", "requires": "real movement or custody evidence", "withoutEvidence": "insufficient-data" },
|
|
42
|
+
{ "nativeOperation": "RESOLD", "externalEvent": "no automatic SEAL", "requires": "real movement or custody evidence", "withoutEvidence": "insufficient-data" },
|
|
43
|
+
{ "nativeOperation": "TRANSFER", "externalEvent": "no automatic SEAL; a control transfer may have no lossless physical mapping", "requires": "custody evidence", "withoutEvidence": "insufficient-data" },
|
|
44
|
+
{ "nativeOperation": "REPAIRED", "externalEvent": "no automatic SEAL", "requires": "repair evidence", "withoutEvidence": "insufficient-data" },
|
|
45
|
+
{ "nativeOperation": "EDIT", "externalEvent": "no physical event", "requires": "nothing physical", "withoutEvidence": "unsupported" },
|
|
46
|
+
{ "nativeOperation": "RECYCLED", "externalEvent": "no automatic SEAL", "requires": "recycling evidence", "withoutEvidence": "insufficient-data" }
|
|
47
|
+
],
|
|
48
|
+
"storage": {
|
|
49
|
+
"nativeClaim": "the signed dpp-lifecycle-v1 object, when the event has one",
|
|
50
|
+
"originalSecured": "the exact credential string as issued",
|
|
51
|
+
"decoded": "the parsed SEAL",
|
|
52
|
+
"projection": "a derived disclosure, verified with its own suite and request binding, never compared to the anchored full bytes"
|
|
53
|
+
},
|
|
54
|
+
"unsupported": [
|
|
55
|
+
{ "id": "upstream-context-interoperability", "reason": "The upstream context is unavailable at the pinned revision; the owned context is explicit." },
|
|
56
|
+
{ "id": "upstream-conformance-suite", "reason": "No executable suite exists at the pinned revision." },
|
|
57
|
+
{ "id": "presentation-transport", "reason": "The HTTPS presentation protocol and holder authentication are not implemented." },
|
|
58
|
+
{ "id": "physical-object-binding", "reason": "Object DIDs may be carried; tag authentication and physical binding are separate capabilities." }
|
|
59
|
+
],
|
|
60
|
+
"sourceRefs": [
|
|
61
|
+
{ "id": "vsc-core", "name": "VSC Core draft", "reference": "https://w3c-cg.github.io/vsc/specs/vsc-core.html", "version": "c279de3debcd6eab94a77034584d1750f5d65e6a", "attribution": "Verifiable Supply Chain Community Group", "use": "The SEAL, custody and correction rules selected." },
|
|
62
|
+
{ "id": "vsc-requirements", "name": "VSC Requirements draft", "reference": "https://w3c-cg.github.io/vsc/specs/vsc-requirements.html", "version": "c279de3debcd6eab94a77034584d1750f5d65e6a", "attribution": "Verifiable Supply Chain Community Group", "use": "Takes precedence where Core defers to it." }
|
|
63
|
+
]
|
|
64
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifestVersion": "1",
|
|
3
|
+
"kind": "industry",
|
|
4
|
+
"baseline": "native-baseline@1",
|
|
5
|
+
"roles": [
|
|
6
|
+
"passport-writer",
|
|
7
|
+
"attestation-issuer",
|
|
8
|
+
"registry",
|
|
9
|
+
"passport-reader"
|
|
10
|
+
],
|
|
11
|
+
"schemaDialect": "https://json-schema.org/draft/2020-12/schema",
|
|
12
|
+
"accessPolicyRef": "spec/record-model.md#7-the-owner-tier-binding",
|
|
13
|
+
"accessTiers": [
|
|
14
|
+
{
|
|
15
|
+
"id": "public",
|
|
16
|
+
"description": "Anyone with the identifier.",
|
|
17
|
+
"storage": "on-chain public payload"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "owner",
|
|
21
|
+
"description": "The current holder, travelling with possession rather than with an authorisation.",
|
|
22
|
+
"storage": "off-chain encrypted"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "legitimate",
|
|
26
|
+
"description": "Persons with a legitimate interest, the Batteries Regulation Article 77(2) group generalised.",
|
|
27
|
+
"storage": "off-chain encrypted"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "authority",
|
|
31
|
+
"description": "Notified bodies, market surveillance and other authorities.",
|
|
32
|
+
"storage": "off-chain encrypted"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"extends": null,
|
|
36
|
+
"id": "general",
|
|
37
|
+
"version": 1,
|
|
38
|
+
"profile": "general@1",
|
|
39
|
+
"status": "superseded",
|
|
40
|
+
"supersededBy": "general@2",
|
|
41
|
+
"title": "General passport, version 1 (superseded)",
|
|
42
|
+
"description": "Version 1 declared field names, labels, obligations and tiers only: no types, units, constraints or provenance. It is served for as long as any state declares it and describes those states plainly, not as better structured than they were.",
|
|
43
|
+
"regulatoryLine": "A freeform product record; no regulatory mapping is claimed.",
|
|
44
|
+
"applicability": {
|
|
45
|
+
"categories": [],
|
|
46
|
+
"jurisdictions": [],
|
|
47
|
+
"statements": [
|
|
48
|
+
{
|
|
49
|
+
"text": "Version 1 recorded no legal basis per field; its regulatory line was the whole of its claim.",
|
|
50
|
+
"status": "needs-review"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"schemaUri": "generated/payload-schema/general@1.public.schema.json",
|
|
55
|
+
"schemaDigest": "57ea63b53d5d52371cbea3f93c1771aace73cf88cd07263fb70480efeb6802a9",
|
|
56
|
+
"restrictedSchemaUri": "generated/payload-schema/general@1.restricted.schema.json",
|
|
57
|
+
"restrictedSchemaDigest": "d7411945df53d498ac188dd74c9b77bddac14e1a9cbe9fb6f0cc441acbb2deb2",
|
|
58
|
+
"contextRefs": [],
|
|
59
|
+
"stamps": [
|
|
60
|
+
{
|
|
61
|
+
"key": "notice",
|
|
62
|
+
"description": "The sample marker a demonstration record carries first; never product data.",
|
|
63
|
+
"valueType": "text"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"key": "profile",
|
|
67
|
+
"description": "The profile identifier the payload declares.",
|
|
68
|
+
"valueType": "id",
|
|
69
|
+
"const": "general"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"key": "profile_version",
|
|
73
|
+
"description": "The profile version the payload declares; a reader decodes under it and never under a newer one.",
|
|
74
|
+
"valueType": "integer",
|
|
75
|
+
"const": 1
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"key": "object_did",
|
|
79
|
+
"description": "An optional physical-object DID carried in the public payload; carrying it does not implement physical binding.",
|
|
80
|
+
"valueType": "id"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"key": "dataCarrier",
|
|
84
|
+
"description": "The data-carrier identifier (chip UID) the lookup service indexes beside the passport identifier.",
|
|
85
|
+
"valueType": "id"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"fields": [],
|
|
89
|
+
"eventMappings": [
|
|
90
|
+
{
|
|
91
|
+
"nativeOperation": "ACTIVATE",
|
|
92
|
+
"eventType": "Origin",
|
|
93
|
+
"externalEvent": "manufacture or commissioning",
|
|
94
|
+
"requires": "manufacturing or commissioning evidence naming the facility, time and responsible party; the native ACTIVATE alone records only that a passport was opened",
|
|
95
|
+
"withoutEvidence": "insufficient-data"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"nativeOperation": "SOLD",
|
|
99
|
+
"eventType": "Transfer",
|
|
100
|
+
"externalEvent": "physical move or change of custody",
|
|
101
|
+
"requires": "actual source and destination movement or custody evidence; a change of token control is not a shipment",
|
|
102
|
+
"withoutEvidence": "insufficient-data"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"nativeOperation": "RESOLD",
|
|
106
|
+
"eventType": "Transfer",
|
|
107
|
+
"externalEvent": "physical move or change of custody",
|
|
108
|
+
"requires": "actual source and destination movement or custody evidence",
|
|
109
|
+
"withoutEvidence": "insufficient-data"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"nativeOperation": "TRANSFER",
|
|
113
|
+
"eventType": "Transfer",
|
|
114
|
+
"externalEvent": "change of custody",
|
|
115
|
+
"requires": "custody evidence beyond the token transfer; the transfer of token control alone establishes neither physical movement nor legal title",
|
|
116
|
+
"withoutEvidence": "insufficient-data"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"nativeOperation": "REPAIRED",
|
|
120
|
+
"eventType": "Transformation",
|
|
121
|
+
"externalEvent": "modification (repair)",
|
|
122
|
+
"requires": "repair evidence naming what was done, by whom and when",
|
|
123
|
+
"withoutEvidence": "insufficient-data"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"nativeOperation": "EDIT",
|
|
127
|
+
"eventType": "Transformation",
|
|
128
|
+
"externalEvent": "metadata revision",
|
|
129
|
+
"requires": "nothing physical: an EDIT is a native metadata operation and maps to a record revision, not a physical transformation",
|
|
130
|
+
"withoutEvidence": "transformed"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"nativeOperation": "RECYCLED",
|
|
134
|
+
"eventType": "Disposition",
|
|
135
|
+
"externalEvent": "disposition, or a process creating new products or materials",
|
|
136
|
+
"requires": "recycling evidence distinguishing disposition of this item from a process whose outputs carry new identities",
|
|
137
|
+
"withoutEvidence": "insufficient-data"
|
|
138
|
+
}
|
|
139
|
+
],
|
|
140
|
+
"sourceRefs": [],
|
|
141
|
+
"identity": {
|
|
142
|
+
"passportIdentifier": "A GS1 Digital Link URI (spec/record-model.md section 3).",
|
|
143
|
+
"granularities": [
|
|
144
|
+
"item"
|
|
145
|
+
],
|
|
146
|
+
"parentRelations": []
|
|
147
|
+
}
|
|
148
|
+
}
|