@midnight-ntwrk/credential-compact 0.1.0-rc2
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/CHANGELOG.md +10 -0
- package/LICENSE +201 -0
- package/README.md +59 -0
- package/dist/compact-build.json +29 -0
- package/dist/contract.d.ts +2 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +2 -0
- package/dist/contract.js.map +1 -0
- package/dist/credentials/bindings.compact +5 -0
- package/dist/credentials/composable.compact +14 -0
- package/dist/credentials/holder-bindings.compact +320 -0
- package/dist/credentials/issue.compact +91 -0
- package/dist/credentials/present.compact +84 -0
- package/dist/credentials/proofs.compact +122 -0
- package/dist/credentials/protocol-support.compact +7 -0
- package/dist/credentials/protocols.compact +125 -0
- package/dist/credentials/relations.compact +36 -0
- package/dist/credentials/status-bindings.compact +60 -0
- package/dist/credentials/types.compact +141 -0
- package/dist/credentials/vc-support.compact +8 -0
- package/dist/credentials/vc.compact +59 -0
- package/dist/credentials/vp.compact +25 -0
- package/dist/credentials.compact +20 -0
- package/dist/holder-binding/same-holder/composable.compact +179 -0
- package/dist/holder-binding/same-holder.compact +180 -0
- package/dist/holder-binding/same-holder.d.ts +2 -0
- package/dist/holder-binding/same-holder.d.ts.map +1 -0
- package/dist/holder-binding/same-holder.js +2 -0
- package/dist/holder-binding/same-holder.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/jubjub.d.ts +3 -0
- package/dist/jubjub.d.ts.map +1 -0
- package/dist/jubjub.js +6 -0
- package/dist/jubjub.js.map +1 -0
- package/dist/managed/credentials/contract/index.d.ts +330 -0
- package/dist/managed/credentials/contract/index.js +2213 -0
- package/dist/managed/credentials/contract/index.js.map +8 -0
- package/dist/managed/same-holder/contract/index.d.ts +400 -0
- package/dist/managed/same-holder/contract/index.js +2688 -0
- package/dist/managed/same-holder/contract/index.js.map +8 -0
- package/package.json +113 -0
- package/src/credentials/bindings.compact +5 -0
- package/src/credentials/composable.compact +14 -0
- package/src/credentials/holder-bindings.compact +320 -0
- package/src/credentials/issue.compact +91 -0
- package/src/credentials/present.compact +84 -0
- package/src/credentials/proofs.compact +122 -0
- package/src/credentials/protocol-support.compact +7 -0
- package/src/credentials/protocols.compact +125 -0
- package/src/credentials/relations.compact +36 -0
- package/src/credentials/status-bindings.compact +60 -0
- package/src/credentials/types.compact +141 -0
- package/src/credentials/vc-support.compact +8 -0
- package/src/credentials/vc.compact +59 -0
- package/src/credentials/vp.compact +25 -0
- package/src/credentials.compact +20 -0
- package/src/holder-binding/same-holder/composable.compact +179 -0
- package/src/holder-binding/same-holder.compact +180 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"file": "index.js",
|
|
4
|
+
"sourceRoot": "../../../../",
|
|
5
|
+
"sources": ["src/holder-binding/same-holder.compact", "src/holder-binding/.././credentials/./types.compact", "src/holder-binding/.././credentials/./proofs.compact", "src/holder-binding/.././credentials/./holder-bindings.compact", "src/holder-binding/.././credentials/./protocols.compact", "src/holder-binding/.././credentials/./status-bindings.compact", "compiler/standard-library.compact"],
|
|
6
|
+
"names": [],
|
|
7
|
+
"mappings": "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"
|
|
8
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@midnight-ntwrk/credential-compact",
|
|
3
|
+
"version": "0.1.0-rc2",
|
|
4
|
+
"description": "Private candidate library of family-neutral Compact VC and VP semantics",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"private": false,
|
|
7
|
+
"type": "module",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public",
|
|
10
|
+
"provenance": true,
|
|
11
|
+
"registry": "https://registry.npmjs.org/"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/midnightntwrk/midnight-verifiable-credentials.git",
|
|
16
|
+
"directory": "packages/core/compact"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"midnight",
|
|
20
|
+
"verifiable-credentials",
|
|
21
|
+
"compact",
|
|
22
|
+
"vc",
|
|
23
|
+
"vp"
|
|
24
|
+
],
|
|
25
|
+
"sideEffects": [],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=24",
|
|
28
|
+
"pnpm": ">=10"
|
|
29
|
+
},
|
|
30
|
+
"main": "dist/index.js",
|
|
31
|
+
"module": "dist/index.js",
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"import": "./dist/index.js",
|
|
37
|
+
"default": "./dist/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./contract": {
|
|
40
|
+
"types": "./dist/contract.d.ts",
|
|
41
|
+
"import": "./dist/contract.js",
|
|
42
|
+
"default": "./dist/contract.js"
|
|
43
|
+
},
|
|
44
|
+
"./jubjub": {
|
|
45
|
+
"types": "./dist/jubjub.d.ts",
|
|
46
|
+
"import": "./dist/jubjub.js",
|
|
47
|
+
"default": "./dist/jubjub.js"
|
|
48
|
+
},
|
|
49
|
+
"./holder-binding/same-holder": {
|
|
50
|
+
"types": "./dist/holder-binding/same-holder.d.ts",
|
|
51
|
+
"import": "./dist/holder-binding/same-holder.js",
|
|
52
|
+
"default": "./dist/holder-binding/same-holder.js"
|
|
53
|
+
},
|
|
54
|
+
"./credentials.compact": "./dist/credentials.compact",
|
|
55
|
+
"./holder-binding/same-holder.compact": "./dist/holder-binding/same-holder.compact",
|
|
56
|
+
"./holder-binding/same-holder/composable.compact": "./dist/holder-binding/same-holder/composable.compact"
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"@midnight-ntwrk/compact-runtime": "0.15.0"
|
|
60
|
+
},
|
|
61
|
+
"files": [
|
|
62
|
+
"dist/**",
|
|
63
|
+
"src/**/*.compact",
|
|
64
|
+
"README.md",
|
|
65
|
+
"CHANGELOG.md",
|
|
66
|
+
"package.json"
|
|
67
|
+
],
|
|
68
|
+
"midnight": {
|
|
69
|
+
"maturity": "core",
|
|
70
|
+
"packageClass": "dist",
|
|
71
|
+
"releaseStage": "supported",
|
|
72
|
+
"compactCompilerVersion": "0.30.0",
|
|
73
|
+
"compactRuntimeVersion": "0.15.0",
|
|
74
|
+
"compactSources": [
|
|
75
|
+
"src/credentials.compact",
|
|
76
|
+
"src/credentials/bindings.compact",
|
|
77
|
+
"src/credentials/composable.compact",
|
|
78
|
+
"src/credentials/holder-bindings.compact",
|
|
79
|
+
"src/credentials/issue.compact",
|
|
80
|
+
"src/credentials/present.compact",
|
|
81
|
+
"src/credentials/proofs.compact",
|
|
82
|
+
"src/credentials/protocol-support.compact",
|
|
83
|
+
"src/credentials/protocols.compact",
|
|
84
|
+
"src/credentials/relations.compact",
|
|
85
|
+
"src/credentials/status-bindings.compact",
|
|
86
|
+
"src/credentials/types.compact",
|
|
87
|
+
"src/credentials/vc-support.compact",
|
|
88
|
+
"src/credentials/vc.compact",
|
|
89
|
+
"src/credentials/vp.compact",
|
|
90
|
+
"src/holder-binding/same-holder.compact",
|
|
91
|
+
"src/holder-binding/same-holder/composable.compact"
|
|
92
|
+
],
|
|
93
|
+
"compactEntrypoints": {
|
|
94
|
+
"standalone": [
|
|
95
|
+
"./credentials.compact",
|
|
96
|
+
"./holder-binding/same-holder.compact"
|
|
97
|
+
],
|
|
98
|
+
"composition": [
|
|
99
|
+
"./holder-binding/same-holder/composable.compact"
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"scripts": {
|
|
104
|
+
"check-toolchain": "node scripts/check-toolchain.mjs",
|
|
105
|
+
"compact": "pnpm run check-toolchain && rm -rf src/managed && compact compile src/credentials.compact src/managed/credentials && compact compile src/holder-binding/same-holder.compact src/managed/same-holder && rm -rf src/managed/credentials/compiler src/managed/same-holder/compiler",
|
|
106
|
+
"build": "pnpm run compact && rm -rf dist && mkdir -p dist && tsc -b tsconfig.build.json --force && cp -Rf src/managed dist/ && cp src/credentials.compact dist/ && cp -Rf src/credentials dist/ && mkdir -p dist/holder-binding && cp src/holder-binding/same-holder.compact dist/holder-binding/ && cp -Rf src/holder-binding/same-holder dist/holder-binding/ && node scripts/write-build-manifest.mjs",
|
|
107
|
+
"typecheck": "pnpm run compact && tsc -p tsconfig.json --noEmit",
|
|
108
|
+
"lint": "eslint src --ignore-pattern 'src/managed/**'",
|
|
109
|
+
"test": "vitest run",
|
|
110
|
+
"test:ci": "pnpm run compact && vitest run",
|
|
111
|
+
"clean": "rm -rf dist src/managed coverage reports *.tsbuildinfo"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Composition-safe shared root for Layer 3 contracts and credential-family
|
|
2
|
+
// entrypoints. This file includes the leaf modules directly because Compact
|
|
3
|
+
// does not deduplicate repeated includes across intermediate entry points.
|
|
4
|
+
|
|
5
|
+
include "./types";
|
|
6
|
+
include "./proofs";
|
|
7
|
+
include "./vc";
|
|
8
|
+
include "./vp";
|
|
9
|
+
include "./relations";
|
|
10
|
+
include "./holder-bindings";
|
|
11
|
+
include "./protocols";
|
|
12
|
+
include "./issue";
|
|
13
|
+
include "./present";
|
|
14
|
+
include "./status-bindings";
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
// Holder-binding and holder-witness primitives.
|
|
2
|
+
// This file groups the reusable binding checks for explicit DID, Jubjub,
|
|
3
|
+
// offchain DID, secret-holder, and blinded-secret-holder profiles.
|
|
4
|
+
// =====================
|
|
5
|
+
// Explicit and Jubjub-backed holder bindings
|
|
6
|
+
// =====================
|
|
7
|
+
export pure circuit assertValidExplicitHolderBinding(
|
|
8
|
+
binding: ExplicitHolderBinding
|
|
9
|
+
): [] {
|
|
10
|
+
assert(
|
|
11
|
+
binding.holderVerificationMethodRef.didContractAddress.bytes != pad(32, ""),
|
|
12
|
+
"Explicit holder binding DID contract address must be set"
|
|
13
|
+
);
|
|
14
|
+
assert(
|
|
15
|
+
binding.holderVerificationMethodRef.methodId != pad(32, ""),
|
|
16
|
+
"Explicit holder binding method reference must be set"
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export pure circuit assertMatchingExplicitHolderBindings(
|
|
21
|
+
credentialBinding: ExplicitHolderBinding,
|
|
22
|
+
presentationBinding: ExplicitHolderBinding
|
|
23
|
+
): [] {
|
|
24
|
+
assert(
|
|
25
|
+
presentationBinding.holderVerificationMethodRef.didContractAddress
|
|
26
|
+
== credentialBinding.holderVerificationMethodRef.didContractAddress,
|
|
27
|
+
"Presentation holder contract does not match credential holder binding"
|
|
28
|
+
);
|
|
29
|
+
assert(
|
|
30
|
+
presentationBinding.holderVerificationMethodRef.methodId
|
|
31
|
+
== credentialBinding.holderVerificationMethodRef.methodId,
|
|
32
|
+
"Presentation holder method reference does not match credential holder binding"
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export pure circuit assertProofMatchesExplicitHolderBinding(
|
|
37
|
+
binding: ExplicitHolderBinding,
|
|
38
|
+
presentationProof: Proof
|
|
39
|
+
): [] {
|
|
40
|
+
assert(
|
|
41
|
+
binding.holderVerificationMethodRef.didContractAddress
|
|
42
|
+
== presentationProof.signerVerificationMethodRef.didContractAddress,
|
|
43
|
+
"Presentation proof signer must match holder binding"
|
|
44
|
+
);
|
|
45
|
+
assert(
|
|
46
|
+
binding.holderVerificationMethodRef.methodId
|
|
47
|
+
== presentationProof.signerVerificationMethodRef.methodId,
|
|
48
|
+
"Presentation proof signer method reference must match holder binding"
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export pure circuit assertValidJubjubHolderBinding(
|
|
53
|
+
binding: JubjubHolderBinding
|
|
54
|
+
): [] {
|
|
55
|
+
// This is only a sentinel check that the binding is populated.
|
|
56
|
+
// The helper remains useful for the legacy compatibility profile and as a
|
|
57
|
+
// building block inside richer DID-shaped bindings.
|
|
58
|
+
// Callers still need assertValidPresentationContextProof(...) or an
|
|
59
|
+
// equivalent proof verification path to establish proof-of-possession.
|
|
60
|
+
assert(
|
|
61
|
+
jubjubPointX(binding.holderPublicKey) != 0 as Field ||
|
|
62
|
+
jubjubPointY(binding.holderPublicKey) != 0 as Field,
|
|
63
|
+
"Jubjub holder binding public key must be set"
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export pure circuit assertMatchingJubjubHolderBindings(
|
|
68
|
+
credentialBinding: JubjubHolderBinding,
|
|
69
|
+
presentationBinding: JubjubHolderBinding
|
|
70
|
+
): [] {
|
|
71
|
+
assert(
|
|
72
|
+
jubjubPointX(presentationBinding.holderPublicKey)
|
|
73
|
+
== jubjubPointX(credentialBinding.holderPublicKey) &&
|
|
74
|
+
jubjubPointY(presentationBinding.holderPublicKey)
|
|
75
|
+
== jubjubPointY(credentialBinding.holderPublicKey),
|
|
76
|
+
"Presentation Jubjub holder key does not match the credential holder binding"
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export pure circuit assertProofMatchesJubjubHolderBinding(
|
|
81
|
+
binding: JubjubHolderBinding,
|
|
82
|
+
presentationProof: Proof
|
|
83
|
+
): [] {
|
|
84
|
+
assert(
|
|
85
|
+
jubjubPointX(binding.holderPublicKey)
|
|
86
|
+
== jubjubPointX(presentationProof.publicKey) &&
|
|
87
|
+
jubjubPointY(binding.holderPublicKey)
|
|
88
|
+
== jubjubPointY(presentationProof.publicKey),
|
|
89
|
+
"Presentation proof public key must match the Jubjub holder binding"
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export pure circuit assertValidOffchainMidnightHolderBinding(
|
|
94
|
+
binding: OffchainMidnightHolderBinding
|
|
95
|
+
): [] {
|
|
96
|
+
// This validates presence and consistency only for the preferred lightweight
|
|
97
|
+
// DID-shaped offchain profile.
|
|
98
|
+
// It does not prove that holderPublicKey is the verification method
|
|
99
|
+
// published under holderMethodId in the referenced offchain DID state.
|
|
100
|
+
assert(
|
|
101
|
+
binding.holderDidStateHash != pad(32, ""),
|
|
102
|
+
"Offchain Midnight holder state hash must be set"
|
|
103
|
+
);
|
|
104
|
+
assert(
|
|
105
|
+
binding.holderMethodId != pad(32, ""),
|
|
106
|
+
"Offchain Midnight holder method id must be set"
|
|
107
|
+
);
|
|
108
|
+
const jubjubBinding: JubjubHolderBinding = JubjubHolderBinding {
|
|
109
|
+
holderPublicKey: binding.holderPublicKey
|
|
110
|
+
};
|
|
111
|
+
assertValidJubjubHolderBinding(jubjubBinding);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export pure circuit assertMatchingOffchainMidnightHolderBindings(
|
|
115
|
+
credentialBinding: OffchainMidnightHolderBinding,
|
|
116
|
+
presentationBinding: OffchainMidnightHolderBinding
|
|
117
|
+
): [] {
|
|
118
|
+
assert(
|
|
119
|
+
presentationBinding.holderDidStateHash
|
|
120
|
+
== credentialBinding.holderDidStateHash,
|
|
121
|
+
"Offchain Midnight holder state hash does not match the credential holder binding"
|
|
122
|
+
);
|
|
123
|
+
assert(
|
|
124
|
+
presentationBinding.holderMethodId
|
|
125
|
+
== credentialBinding.holderMethodId,
|
|
126
|
+
"Offchain Midnight holder method id does not match the credential holder binding"
|
|
127
|
+
);
|
|
128
|
+
const credentialJubjubBinding: JubjubHolderBinding = JubjubHolderBinding {
|
|
129
|
+
holderPublicKey: credentialBinding.holderPublicKey
|
|
130
|
+
};
|
|
131
|
+
const presentationJubjubBinding: JubjubHolderBinding = JubjubHolderBinding {
|
|
132
|
+
holderPublicKey: presentationBinding.holderPublicKey
|
|
133
|
+
};
|
|
134
|
+
assertMatchingJubjubHolderBindings(
|
|
135
|
+
credentialJubjubBinding,
|
|
136
|
+
presentationJubjubBinding
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export pure circuit assertProofMatchesOffchainMidnightHolderBinding(
|
|
141
|
+
binding: OffchainMidnightHolderBinding,
|
|
142
|
+
presentationProof: Proof
|
|
143
|
+
): [] {
|
|
144
|
+
const jubjubBinding: JubjubHolderBinding = JubjubHolderBinding {
|
|
145
|
+
holderPublicKey: binding.holderPublicKey
|
|
146
|
+
};
|
|
147
|
+
assertProofMatchesJubjubHolderBinding(jubjubBinding, presentationProof);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// =====================
|
|
151
|
+
// Secret-holder bindings and derived pseudonyms
|
|
152
|
+
// =====================
|
|
153
|
+
export pure circuit noSecretHolderChallengeResponse(): Bytes<32> {
|
|
154
|
+
return pad(32, "midnight:vc:no-holder-response");
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export pure circuit secretHolderBindingCommitment(
|
|
158
|
+
holderSecret: Bytes<32>,
|
|
159
|
+
opening: Bytes<32>
|
|
160
|
+
): Bytes<32> {
|
|
161
|
+
return persistentCommit<Bytes<32>>(holderSecret, opening);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export pure circuit secretHolderBindingChallengeResponse(
|
|
165
|
+
holderSecret: Bytes<32>,
|
|
166
|
+
verifierChallengeHash: Bytes<32>
|
|
167
|
+
): Bytes<32> {
|
|
168
|
+
return persistentHash<Vector<3, Bytes<32>>>([
|
|
169
|
+
pad(32, "midnight:vc:holder-chall"),
|
|
170
|
+
holderSecret,
|
|
171
|
+
verifierChallengeHash
|
|
172
|
+
]);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export pure circuit verifierScopedPseudonym(
|
|
176
|
+
holderSecret: Bytes<32>,
|
|
177
|
+
verifierDomainHash: Bytes<32>
|
|
178
|
+
): Bytes<32> {
|
|
179
|
+
return persistentHash<Vector<3, Bytes<32>>>([
|
|
180
|
+
pad(32, "midnight:vc:holder-pseudonym"),
|
|
181
|
+
holderSecret,
|
|
182
|
+
verifierDomainHash
|
|
183
|
+
]);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export pure circuit assertVerifierScopedPseudonym(
|
|
187
|
+
pseudonym: Bytes<32>,
|
|
188
|
+
holderSecret: Bytes<32>,
|
|
189
|
+
verifierDomainHash: Bytes<32>
|
|
190
|
+
): [] {
|
|
191
|
+
assert(
|
|
192
|
+
pseudonym == verifierScopedPseudonym(holderSecret, verifierDomainHash),
|
|
193
|
+
"Verifier-scoped pseudonym does not match the holder secret and verifier domain"
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export pure circuit blindedSecretHolderCommitment(
|
|
198
|
+
holderSecretCommitment: Bytes<32>,
|
|
199
|
+
issuerNonce: Bytes<32>,
|
|
200
|
+
blindingFactor: Bytes<32>
|
|
201
|
+
): Bytes<32> {
|
|
202
|
+
// NOTE: This remains a hash-based compatibility commitment today. The
|
|
203
|
+
// breaking `persistentCommit` migration is tracked separately and should not
|
|
204
|
+
// be rolled in silently with source-style or purity cleanups.
|
|
205
|
+
return persistentHash<Vector<4, Bytes<32>>>([
|
|
206
|
+
pad(32, "midnight:vc:blind-holder"),
|
|
207
|
+
holderSecretCommitment,
|
|
208
|
+
issuerNonce,
|
|
209
|
+
blindingFactor
|
|
210
|
+
]);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export pure circuit assertValidSecretHolderCredentialBinding(
|
|
214
|
+
binding: SecretHolderBinding
|
|
215
|
+
): [] {
|
|
216
|
+
assert(
|
|
217
|
+
binding.requestChallengeResponse == noSecretHolderChallengeResponse(),
|
|
218
|
+
"Credential secret holder binding must not embed a request challenge response"
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export pure circuit assertValidSecretHolderPresentationBinding(
|
|
223
|
+
binding: SecretHolderBinding
|
|
224
|
+
): [] {
|
|
225
|
+
assert(
|
|
226
|
+
binding.requestChallengeResponse != noSecretHolderChallengeResponse(),
|
|
227
|
+
"Presentation secret holder binding must include a request challenge response"
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export pure circuit assertMatchingSecretHolderBindings(
|
|
232
|
+
credentialBinding: SecretHolderBinding,
|
|
233
|
+
presentationBinding: SecretHolderBinding
|
|
234
|
+
): [] {
|
|
235
|
+
assert(
|
|
236
|
+
credentialBinding.holderSecretCommitment == presentationBinding.holderSecretCommitment,
|
|
237
|
+
"Presentation holder secret commitment does not match the credential holder binding"
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export pure circuit assertValidBlindedSecretHolderCredentialBinding(
|
|
242
|
+
binding: BlindedSecretHolderBinding
|
|
243
|
+
): [] {
|
|
244
|
+
assert(
|
|
245
|
+
binding.requestChallengeResponse == noSecretHolderChallengeResponse(),
|
|
246
|
+
"Credential blinded holder binding must not embed a request challenge response"
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export pure circuit assertValidBlindedSecretHolderPresentationBinding(
|
|
251
|
+
binding: BlindedSecretHolderBinding
|
|
252
|
+
): [] {
|
|
253
|
+
assert(
|
|
254
|
+
binding.requestChallengeResponse != noSecretHolderChallengeResponse(),
|
|
255
|
+
"Presentation blinded holder binding must include a request challenge response"
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
export pure circuit assertMatchingBlindedSecretHolderBindings(
|
|
260
|
+
credentialBinding: BlindedSecretHolderBinding,
|
|
261
|
+
presentationBinding: BlindedSecretHolderBinding
|
|
262
|
+
): [] {
|
|
263
|
+
assert(
|
|
264
|
+
credentialBinding.blindedHolderSecretCommitment
|
|
265
|
+
== presentationBinding.blindedHolderSecretCommitment,
|
|
266
|
+
"Presentation blinded holder commitment does not match the credential holder binding"
|
|
267
|
+
);
|
|
268
|
+
assert(
|
|
269
|
+
credentialBinding.issuerNonce == presentationBinding.issuerNonce,
|
|
270
|
+
"Presentation issuer nonce does not match the credential holder binding"
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// =====================
|
|
275
|
+
// Witness validation and recomputation helpers
|
|
276
|
+
// =====================
|
|
277
|
+
// NOTE: these helpers validate caller-supplied witness material passed as
|
|
278
|
+
// ordinary parameters. They do not perform Compact `witness` reads themselves.
|
|
279
|
+
export pure circuit assertSecretHolderBindingWitness(
|
|
280
|
+
binding: SecretHolderBinding,
|
|
281
|
+
verifierChallengeHash: Bytes<32>,
|
|
282
|
+
holderSecret: Bytes<32>,
|
|
283
|
+
opening: Bytes<32>
|
|
284
|
+
): [] {
|
|
285
|
+
assert(
|
|
286
|
+
secretHolderBindingCommitment(holderSecret, opening) == binding.holderSecretCommitment,
|
|
287
|
+
"Holder secret witness does not match the holder-binding commitment"
|
|
288
|
+
);
|
|
289
|
+
assert(
|
|
290
|
+
secretHolderBindingChallengeResponse(holderSecret, verifierChallengeHash)
|
|
291
|
+
== binding.requestChallengeResponse,
|
|
292
|
+
"Holder secret challenge response does not match the verifier challenge"
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export pure circuit assertBlindedSecretHolderBindingWitness(
|
|
297
|
+
binding: BlindedSecretHolderBinding,
|
|
298
|
+
verifierChallengeHash: Bytes<32>,
|
|
299
|
+
holderSecret: Bytes<32>,
|
|
300
|
+
opening: Bytes<32>,
|
|
301
|
+
blindingFactor: Bytes<32>
|
|
302
|
+
): [] {
|
|
303
|
+
const holderCommitment: Bytes<32> = secretHolderBindingCommitment(
|
|
304
|
+
holderSecret,
|
|
305
|
+
opening
|
|
306
|
+
);
|
|
307
|
+
assert(
|
|
308
|
+
blindedSecretHolderCommitment(
|
|
309
|
+
holderCommitment,
|
|
310
|
+
binding.issuerNonce,
|
|
311
|
+
blindingFactor
|
|
312
|
+
) == binding.blindedHolderSecretCommitment,
|
|
313
|
+
"Blinded holder commitment does not match the hidden holder secret witness"
|
|
314
|
+
);
|
|
315
|
+
assert(
|
|
316
|
+
secretHolderBindingChallengeResponse(holderSecret, verifierChallengeHash)
|
|
317
|
+
== binding.requestChallengeResponse,
|
|
318
|
+
"Blinded holder challenge response does not match the verifier challenge"
|
|
319
|
+
);
|
|
320
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Generic issuance message choreography.
|
|
2
|
+
// Owns offer/request/result envelope alignment only; issuer- and holder-side
|
|
3
|
+
// claim semantics stay in the family layer.
|
|
4
|
+
module Issue<TOfferBody, TRequestBody, TResultBody> {
|
|
5
|
+
export struct OfferMessage {
|
|
6
|
+
envelope: ProtocolMessageEnvelope,
|
|
7
|
+
schema: SchemaRef,
|
|
8
|
+
issuerVerificationMethodRef: VerificationMethodRef,
|
|
9
|
+
holderBindingProfile: HolderBindingProfile,
|
|
10
|
+
features: CredentialProtocolFeatures,
|
|
11
|
+
body: TOfferBody,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export struct RequestMessage {
|
|
15
|
+
envelope: ProtocolMessageEnvelope,
|
|
16
|
+
schema: SchemaRef,
|
|
17
|
+
issuerVerificationMethodRef: VerificationMethodRef,
|
|
18
|
+
holderBindingProfile: HolderBindingProfile,
|
|
19
|
+
body: TRequestBody,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export struct ResultMessage {
|
|
23
|
+
envelope: ProtocolMessageEnvelope,
|
|
24
|
+
schema: SchemaRef,
|
|
25
|
+
issuerVerificationMethodRef: VerificationMethodRef,
|
|
26
|
+
holderBindingProfile: HolderBindingProfile,
|
|
27
|
+
body: TResultBody,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export pure circuit assertValidOfferMessage(
|
|
31
|
+
offer: OfferMessage
|
|
32
|
+
): [] {
|
|
33
|
+
assertValidProtocolMessageEnvelope(offer.envelope);
|
|
34
|
+
assert(offer.envelope.initialMessage, "Issuance offer must be the initial message");
|
|
35
|
+
assertValidVerificationMethodRef(offer.issuerVerificationMethodRef);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export pure circuit assertValidRequestMessage(
|
|
39
|
+
request: RequestMessage
|
|
40
|
+
): [] {
|
|
41
|
+
assertValidProtocolMessageEnvelope(request.envelope);
|
|
42
|
+
assert(!request.envelope.initialMessage, "Issuance request must be a response message");
|
|
43
|
+
assertValidVerificationMethodRef(request.issuerVerificationMethodRef);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export pure circuit assertOfferRequestAlignment(
|
|
47
|
+
offer: OfferMessage,
|
|
48
|
+
request: RequestMessage
|
|
49
|
+
): [] {
|
|
50
|
+
assertValidOfferMessage(offer);
|
|
51
|
+
assertValidRequestMessage(request);
|
|
52
|
+
assertProtocolResponseEnvelope(offer.envelope, request.envelope);
|
|
53
|
+
assertMatchingSchemaRefs(offer.schema, request.schema);
|
|
54
|
+
assert(
|
|
55
|
+
offer.issuerVerificationMethodRef.didContractAddress == request.issuerVerificationMethodRef.didContractAddress
|
|
56
|
+
&& offer.issuerVerificationMethodRef.methodId == request.issuerVerificationMethodRef.methodId,
|
|
57
|
+
"Issuance request issuer verification method does not match the offer"
|
|
58
|
+
);
|
|
59
|
+
assert(
|
|
60
|
+
offer.holderBindingProfile == request.holderBindingProfile,
|
|
61
|
+
"Issuance request holder binding profile does not match the offer"
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export pure circuit assertValidResultMessage(
|
|
66
|
+
result: ResultMessage
|
|
67
|
+
): [] {
|
|
68
|
+
assertValidProtocolMessageEnvelope(result.envelope);
|
|
69
|
+
assert(!result.envelope.initialMessage, "Issuance result must be a response message");
|
|
70
|
+
assertValidVerificationMethodRef(result.issuerVerificationMethodRef);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export pure circuit assertRequestResultAlignment(
|
|
74
|
+
request: RequestMessage,
|
|
75
|
+
result: ResultMessage
|
|
76
|
+
): [] {
|
|
77
|
+
assertValidRequestMessage(request);
|
|
78
|
+
assertValidResultMessage(result);
|
|
79
|
+
assertProtocolResponseEnvelope(request.envelope, result.envelope);
|
|
80
|
+
assertMatchingSchemaRefs(request.schema, result.schema);
|
|
81
|
+
assert(
|
|
82
|
+
request.issuerVerificationMethodRef.didContractAddress == result.issuerVerificationMethodRef.didContractAddress
|
|
83
|
+
&& request.issuerVerificationMethodRef.methodId == result.issuerVerificationMethodRef.methodId,
|
|
84
|
+
"Issuance result issuer verification method does not match the request"
|
|
85
|
+
);
|
|
86
|
+
assert(
|
|
87
|
+
request.holderBindingProfile == result.holderBindingProfile,
|
|
88
|
+
"Issuance result holder binding profile does not match the request"
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Generic presentation message choreography.
|
|
2
|
+
// Owns request/submission/result envelope alignment; the family layer decides
|
|
3
|
+
// what a verifier asked for and what a holder actually proved or disclosed.
|
|
4
|
+
module Present<TRequestBody, TSubmissionBody, TResultBody> {
|
|
5
|
+
export struct RequestMessage {
|
|
6
|
+
envelope: ProtocolMessageEnvelope,
|
|
7
|
+
schema: SchemaRef,
|
|
8
|
+
issuerVerificationMethodRef: VerificationMethodRef,
|
|
9
|
+
holderBindingProfile: HolderBindingProfile,
|
|
10
|
+
features: CredentialProtocolFeatures,
|
|
11
|
+
verifierChallengeHash: Bytes<32>,
|
|
12
|
+
body: TRequestBody,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export struct SubmissionMessage {
|
|
16
|
+
envelope: ProtocolMessageEnvelope,
|
|
17
|
+
schema: SchemaRef,
|
|
18
|
+
issuerVerificationMethodRef: VerificationMethodRef,
|
|
19
|
+
holderBindingProfile: HolderBindingProfile,
|
|
20
|
+
challengeHash: Bytes<32>,
|
|
21
|
+
body: TSubmissionBody,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export struct ResultMessage {
|
|
25
|
+
envelope: ProtocolMessageEnvelope,
|
|
26
|
+
approved: Boolean,
|
|
27
|
+
body: TResultBody,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export pure circuit assertValidRequestMessage(
|
|
31
|
+
request: RequestMessage
|
|
32
|
+
): [] {
|
|
33
|
+
assertValidProtocolMessageEnvelope(request.envelope);
|
|
34
|
+
assert(request.envelope.initialMessage, "Presentation request must be the initial message");
|
|
35
|
+
assertValidVerificationMethodRef(request.issuerVerificationMethodRef);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export pure circuit assertValidSubmissionMessage(
|
|
39
|
+
submission: SubmissionMessage
|
|
40
|
+
): [] {
|
|
41
|
+
assertValidProtocolMessageEnvelope(submission.envelope);
|
|
42
|
+
assert(!submission.envelope.initialMessage, "Presentation submission must be a response message");
|
|
43
|
+
assertValidVerificationMethodRef(submission.issuerVerificationMethodRef);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export pure circuit assertRequestSubmissionAlignment(
|
|
47
|
+
request: RequestMessage,
|
|
48
|
+
submission: SubmissionMessage
|
|
49
|
+
): [] {
|
|
50
|
+
assertValidRequestMessage(request);
|
|
51
|
+
assertValidSubmissionMessage(submission);
|
|
52
|
+
assertProtocolResponseEnvelope(request.envelope, submission.envelope);
|
|
53
|
+
assertMatchingSchemaRefs(request.schema, submission.schema);
|
|
54
|
+
assert(
|
|
55
|
+
request.issuerVerificationMethodRef.didContractAddress == submission.issuerVerificationMethodRef.didContractAddress
|
|
56
|
+
&& request.issuerVerificationMethodRef.methodId == submission.issuerVerificationMethodRef.methodId,
|
|
57
|
+
"Presentation submission issuer verification method does not match the request"
|
|
58
|
+
);
|
|
59
|
+
assert(
|
|
60
|
+
request.holderBindingProfile == submission.holderBindingProfile,
|
|
61
|
+
"Presentation submission holder binding profile does not match the request"
|
|
62
|
+
);
|
|
63
|
+
assert(
|
|
64
|
+
request.verifierChallengeHash == submission.challengeHash,
|
|
65
|
+
"Presentation submission challenge does not match the request challenge"
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export pure circuit assertValidResultMessage(
|
|
70
|
+
result: ResultMessage
|
|
71
|
+
): [] {
|
|
72
|
+
assertValidProtocolMessageEnvelope(result.envelope);
|
|
73
|
+
assert(!result.envelope.initialMessage, "Presentation result must be a response message");
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export pure circuit assertSubmissionResultAlignment(
|
|
77
|
+
submission: SubmissionMessage,
|
|
78
|
+
result: ResultMessage
|
|
79
|
+
): [] {
|
|
80
|
+
assertValidSubmissionMessage(submission);
|
|
81
|
+
assertValidResultMessage(result);
|
|
82
|
+
assertProtocolResponseEnvelope(submission.envelope, result.envelope);
|
|
83
|
+
}
|
|
84
|
+
}
|