@cello-protocol/protocol-types 0.0.2
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/dist/connection-package.d.ts +362 -0
- package/dist/connection-package.d.ts.map +1 -0
- package/dist/connection-package.js +426 -0
- package/dist/connection-package.js.map +1 -0
- package/dist/connection-request.d.ts +271 -0
- package/dist/connection-request.d.ts.map +1 -0
- package/dist/connection-request.js +91 -0
- package/dist/connection-request.js.map +1 -0
- package/dist/envelope.d.ts +170 -0
- package/dist/envelope.d.ts.map +1 -0
- package/dist/envelope.js +776 -0
- package/dist/envelope.js.map +1 -0
- package/dist/frost-dkg.d.ts +145 -0
- package/dist/frost-dkg.d.ts.map +1 -0
- package/dist/frost-dkg.js +28 -0
- package/dist/frost-dkg.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/registration.d.ts +155 -0
- package/dist/registration.d.ts.map +1 -0
- package/dist/registration.js +55 -0
- package/dist/registration.js.map +1 -0
- package/dist/session.d.ts +239 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +198 -0
- package/dist/session.js.map +1 -0
- package/dist/structure2.d.ts +75 -0
- package/dist/structure2.d.ts.map +1 -0
- package/dist/structure2.js +138 -0
- package/dist/structure2.js.map +1 -0
- package/dist/types.d.ts +144 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cello-protocol/protocol-types — CELLO-CONNREQ-001
|
|
3
|
+
* Connection package wire types, CBOR encoding/decoding, and validation.
|
|
4
|
+
*
|
|
5
|
+
* ──── Phase P: Pseudocode ────
|
|
6
|
+
*
|
|
7
|
+
* Connection package structure (CBOR map):
|
|
8
|
+
* {
|
|
9
|
+
* pseudonym_binding: PseudonymBinding,
|
|
10
|
+
* endorsements: Endorsement[],
|
|
11
|
+
* attestations: Attestation[],
|
|
12
|
+
* }
|
|
13
|
+
*
|
|
14
|
+
* PseudonymBinding construction:
|
|
15
|
+
* 1. Validate pseudonym_label ≤ 64 UTF-8 bytes
|
|
16
|
+
* 2. Fetch ml_dsa_pubkey from keyProvider.getPublicKey()
|
|
17
|
+
* 3. Build TBS positional array:
|
|
18
|
+
* [pseudonym_label, k_local_pubkey, primary_pubkey, ml_dsa_pubkey, created_at]
|
|
19
|
+
* canonical CBOR per RFC 8949 §4.2.1 (Encoder({tagUint8Array: false}))
|
|
20
|
+
* 4. ml_dsa_signature = await keyProvider.sign(TBS_bytes) [ML-DSA, NIST FIPS 204]
|
|
21
|
+
* 5. Return PseudonymBinding with all six fields
|
|
22
|
+
*
|
|
23
|
+
* PseudonymBinding verification:
|
|
24
|
+
* 1. Rebuild TBS same as above (excluding ml_dsa_signature)
|
|
25
|
+
* 2. mlDsaVerify(ml_dsa_pubkey, TBS_bytes, ml_dsa_signature) → boolean
|
|
26
|
+
*
|
|
27
|
+
* Endorsement TBS = canonical CBOR of all fields except endorser_ml_dsa_signature:
|
|
28
|
+
* [endorser_pubkey, endorser_ml_dsa_pubkey, target_pubkey, endorsement_type,
|
|
29
|
+
* created_at, expires_at]
|
|
30
|
+
*
|
|
31
|
+
* Attestation TBS = canonical CBOR of all fields except attester_ml_dsa_signature:
|
|
32
|
+
* [attester_pubkey, attester_ml_dsa_pubkey, attestation_type, attestation_data,
|
|
33
|
+
* created_at, expires_at]
|
|
34
|
+
*
|
|
35
|
+
* Validation logic:
|
|
36
|
+
* 1. Verify pseudonym_binding signature → if invalid, return { valid: false, reason: 'pseudonym_binding_invalid' }
|
|
37
|
+
* 2. Validate pseudonym_label byte length → if > 64, return { valid: false, reason: 'pseudonym_label_too_long' }
|
|
38
|
+
* NOTE: label length is checked at build time; but validation also checks in case
|
|
39
|
+
* a tampered package is passed directly to validateConnectionPackage.
|
|
40
|
+
* 3. For each endorsement:
|
|
41
|
+
* a. Verify endorser_ml_dsa_signature → if invalid, mark 'signature_invalid'
|
|
42
|
+
* b. Else if expires_at <= current_timestamp_ms → mark 'expired'
|
|
43
|
+
* c. Else if target_pubkey ≠ sender_k_local_pubkey → mark 'target_mismatch'
|
|
44
|
+
* d. Else → mark 'valid'
|
|
45
|
+
* 4. For each attestation:
|
|
46
|
+
* a. Verify attester_ml_dsa_signature → if invalid, mark 'signature_invalid'
|
|
47
|
+
* b. Else if expires_at <= current_timestamp_ms → mark 'expired'
|
|
48
|
+
* c. Else → mark 'valid'
|
|
49
|
+
* 5. Return { valid: true, pseudonym_binding, endorsements: [...], attestations: [...] }
|
|
50
|
+
*
|
|
51
|
+
* IMPORTANT: Items 3 and 4 are per-item — a bad endorsement does NOT reject the package.
|
|
52
|
+
* Only a bad pseudonym_binding rejects the whole package.
|
|
53
|
+
*
|
|
54
|
+
* Canonical CBOR encoding (RFC 8949 §4.2.1):
|
|
55
|
+
* - All byte arrays as CBOR major-type-2 byte strings (tagUint8Array: false)
|
|
56
|
+
* - Integers use shortest encoding; BigInt for timestamps > 0xFFFFFFFF
|
|
57
|
+
* - Map keys are text strings in deterministic order (cbor-x preserves insertion order)
|
|
58
|
+
*
|
|
59
|
+
* References:
|
|
60
|
+
* RFC 8949 §4.2.1 — Core Deterministic Encoding Requirements
|
|
61
|
+
* NIST FIPS 204 — Module-Lattice-Based Digital Signature Standard (ML-DSA)
|
|
62
|
+
*/
|
|
63
|
+
import { Encoder } from "cbor-x";
|
|
64
|
+
import { decode as cborDecode } from "cbor-x";
|
|
65
|
+
// ─── CBOR encoder ─────────────────────────────────────────────────────────────
|
|
66
|
+
/**
|
|
67
|
+
* Canonical CBOR encoder per RFC 8949 §4.2.1.
|
|
68
|
+
* tagUint8Array: false — encode Uint8Array as CBOR byte strings (major type 2).
|
|
69
|
+
*/
|
|
70
|
+
const CBOR_ENC = new Encoder({ tagUint8Array: false });
|
|
71
|
+
/** Maximum pseudonym_label size in UTF-8 bytes (AC-007, AC-008). */
|
|
72
|
+
export const MAX_PSEUDONYM_LABEL_BYTES = 64;
|
|
73
|
+
/** Expected ML-DSA-44 public key size in bytes (NIST FIPS 204). */
|
|
74
|
+
export const ML_DSA_PUBKEY_BYTES = 1312;
|
|
75
|
+
/** Expected ML-DSA-44 signature size in bytes (NIST FIPS 204). */
|
|
76
|
+
export const ML_DSA_SIGNATURE_BYTES = 2420;
|
|
77
|
+
// ─── TBS (to-be-signed) encoders ─────────────────────────────────────────────
|
|
78
|
+
/**
|
|
79
|
+
* Build the to-be-signed bytes for a PseudonymBinding.
|
|
80
|
+
*
|
|
81
|
+
* TBS: canonical CBOR of positional array:
|
|
82
|
+
* [pseudonym_label, k_local_pubkey, primary_pubkey, ml_dsa_pubkey, created_at]
|
|
83
|
+
*
|
|
84
|
+
* RFC 8949 §4.2.1 — shortest integer encoding; BigInt for timestamps > 0xFFFFFFFF.
|
|
85
|
+
*/
|
|
86
|
+
function buildPseudonymBindingTbs(pseudonym_label, k_local_pubkey, primary_pubkey, ml_dsa_pubkey, created_at) {
|
|
87
|
+
const tsEncoded = created_at > 0xffffffff ? BigInt(created_at) : created_at;
|
|
88
|
+
return new Uint8Array(CBOR_ENC.encode([
|
|
89
|
+
pseudonym_label,
|
|
90
|
+
k_local_pubkey,
|
|
91
|
+
primary_pubkey,
|
|
92
|
+
ml_dsa_pubkey,
|
|
93
|
+
tsEncoded,
|
|
94
|
+
]));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Build the to-be-signed bytes for an Endorsement.
|
|
98
|
+
*
|
|
99
|
+
* TBS: canonical CBOR of positional array (all fields except endorser_ml_dsa_signature):
|
|
100
|
+
* [endorser_pubkey, endorser_ml_dsa_pubkey, target_pubkey, endorsement_type, created_at, expires_at]
|
|
101
|
+
*
|
|
102
|
+
* RFC 8949 §4.2.1 — shortest integer encoding.
|
|
103
|
+
*/
|
|
104
|
+
function buildEndorsementTbs(e) {
|
|
105
|
+
const createdEncoded = e.created_at > 0xffffffff ? BigInt(e.created_at) : e.created_at;
|
|
106
|
+
const expiresEncoded = e.expires_at > 0xffffffff ? BigInt(e.expires_at) : e.expires_at;
|
|
107
|
+
return new Uint8Array(CBOR_ENC.encode([
|
|
108
|
+
e.endorser_pubkey,
|
|
109
|
+
e.endorser_ml_dsa_pubkey,
|
|
110
|
+
e.target_pubkey,
|
|
111
|
+
e.endorsement_type,
|
|
112
|
+
createdEncoded,
|
|
113
|
+
expiresEncoded,
|
|
114
|
+
]));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Build the to-be-signed bytes for an Attestation.
|
|
118
|
+
*
|
|
119
|
+
* TBS: canonical CBOR of positional array (all fields except attester_ml_dsa_signature):
|
|
120
|
+
* [attester_pubkey, attester_ml_dsa_pubkey, attestation_type, attestation_data, created_at, expires_at]
|
|
121
|
+
*
|
|
122
|
+
* RFC 8949 §4.2.1 — shortest integer encoding.
|
|
123
|
+
*/
|
|
124
|
+
function buildAttestationTbs(a) {
|
|
125
|
+
const createdEncoded = a.created_at > 0xffffffff ? BigInt(a.created_at) : a.created_at;
|
|
126
|
+
const expiresEncoded = a.expires_at > 0xffffffff ? BigInt(a.expires_at) : a.expires_at;
|
|
127
|
+
return new Uint8Array(CBOR_ENC.encode([
|
|
128
|
+
a.attester_pubkey,
|
|
129
|
+
a.attester_ml_dsa_pubkey,
|
|
130
|
+
a.attestation_type,
|
|
131
|
+
a.attestation_data,
|
|
132
|
+
createdEncoded,
|
|
133
|
+
expiresEncoded,
|
|
134
|
+
]));
|
|
135
|
+
}
|
|
136
|
+
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
137
|
+
/**
|
|
138
|
+
* Build a PseudonymBinding by signing with the MlDsaKeyProvider.
|
|
139
|
+
*
|
|
140
|
+
* SI-003 enforcement: callers supply a provider, not raw signature bytes.
|
|
141
|
+
* The type signature makes it impossible to inject a pre-computed signature.
|
|
142
|
+
*
|
|
143
|
+
* @param params - Binding fields (pseudonym_label, keys, created_at)
|
|
144
|
+
* @param mlDsaKeyProvider - ML-DSA key provider (private key never leaves the provider)
|
|
145
|
+
*/
|
|
146
|
+
export async function buildPseudonymBinding(params, mlDsaKeyProvider) {
|
|
147
|
+
const labelBytes = new TextEncoder().encode(params.pseudonym_label);
|
|
148
|
+
if (labelBytes.length > MAX_PSEUDONYM_LABEL_BYTES) {
|
|
149
|
+
return { ok: false, reason: "pseudonym_label_too_long" };
|
|
150
|
+
}
|
|
151
|
+
const tbs = buildPseudonymBindingTbs(params.pseudonym_label, params.k_local_pubkey, params.primary_pubkey, params.ml_dsa_pubkey, params.created_at);
|
|
152
|
+
const ml_dsa_signature = await mlDsaKeyProvider.sign(tbs);
|
|
153
|
+
return {
|
|
154
|
+
ok: true,
|
|
155
|
+
binding: {
|
|
156
|
+
pseudonym_label: params.pseudonym_label,
|
|
157
|
+
k_local_pubkey: params.k_local_pubkey,
|
|
158
|
+
primary_pubkey: params.primary_pubkey,
|
|
159
|
+
ml_dsa_pubkey: params.ml_dsa_pubkey,
|
|
160
|
+
created_at: params.created_at,
|
|
161
|
+
ml_dsa_signature,
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Verify a PseudonymBinding signature standalone.
|
|
167
|
+
*
|
|
168
|
+
* Exported so endorsement stripping tests (SI-002 pattern) can verify items
|
|
169
|
+
* outside of a full package.
|
|
170
|
+
*/
|
|
171
|
+
export function verifyPseudonymBinding(binding, mlDsaVerify) {
|
|
172
|
+
const tbs = buildPseudonymBindingTbs(binding.pseudonym_label, binding.k_local_pubkey, binding.primary_pubkey, binding.ml_dsa_pubkey, binding.created_at);
|
|
173
|
+
return mlDsaVerify(binding.ml_dsa_pubkey, tbs, binding.ml_dsa_signature);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Verify an Endorsement signature standalone.
|
|
177
|
+
*
|
|
178
|
+
* SI-002: each item independently verifiable outside of a package.
|
|
179
|
+
*/
|
|
180
|
+
export function verifyEndorsement(endorsement, mlDsaVerify) {
|
|
181
|
+
const tbs = buildEndorsementTbs(endorsement);
|
|
182
|
+
return mlDsaVerify(endorsement.endorser_ml_dsa_pubkey, tbs, endorsement.endorser_ml_dsa_signature);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Verify an Attestation signature standalone.
|
|
186
|
+
*
|
|
187
|
+
* SI-002: each item independently verifiable outside of a package.
|
|
188
|
+
*/
|
|
189
|
+
export function verifyAttestation(attestation, mlDsaVerify) {
|
|
190
|
+
const tbs = buildAttestationTbs(attestation);
|
|
191
|
+
return mlDsaVerify(attestation.attester_ml_dsa_pubkey, tbs, attestation.attester_ml_dsa_signature);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Validate a ConnectionPackage.
|
|
195
|
+
*
|
|
196
|
+
* Validation rules:
|
|
197
|
+
* - Invalid pseudonym binding → whole package rejected, reason: 'pseudonym_binding_invalid'
|
|
198
|
+
* - Label > 64 UTF-8 bytes → whole package rejected, reason: 'pseudonym_label_too_long'
|
|
199
|
+
* - Per-endorsement: signature_invalid | expired | target_mismatch | valid
|
|
200
|
+
* - Per-attestation: signature_invalid | expired | valid
|
|
201
|
+
*
|
|
202
|
+
* SI-001: invalid pseudonym binding always rejects the package,
|
|
203
|
+
* regardless of endorsement/attestation validity.
|
|
204
|
+
*
|
|
205
|
+
* @param pkg - The connection package to validate
|
|
206
|
+
* @param sender_k_local_pubkey - Sender's K_local pubkey (for endorsement target check)
|
|
207
|
+
* @param current_timestamp_ms - Current time (for expiry checks)
|
|
208
|
+
* @param mlDsaVerify - ML-DSA verify function (injected to avoid circular deps)
|
|
209
|
+
*/
|
|
210
|
+
export function validateConnectionPackage(pkg, sender_k_local_pubkey, current_timestamp_ms, mlDsaVerify) {
|
|
211
|
+
// Check label byte length (validate even if building was bypassed)
|
|
212
|
+
const labelBytes = new TextEncoder().encode(pkg.pseudonym_binding.pseudonym_label);
|
|
213
|
+
if (labelBytes.length > MAX_PSEUDONYM_LABEL_BYTES) {
|
|
214
|
+
return { valid: false, reason: "pseudonym_label_too_long" };
|
|
215
|
+
}
|
|
216
|
+
// SI-001: pseudonym binding must pass — checked before items
|
|
217
|
+
const bindingOk = verifyPseudonymBinding(pkg.pseudonym_binding, mlDsaVerify);
|
|
218
|
+
if (!bindingOk) {
|
|
219
|
+
return { valid: false, reason: "pseudonym_binding_invalid" };
|
|
220
|
+
}
|
|
221
|
+
// Per-endorsement validation (annotate, do not reject)
|
|
222
|
+
const validatedEndorsements = pkg.endorsements.map((e) => {
|
|
223
|
+
const sigOk = verifyEndorsement(e, mlDsaVerify);
|
|
224
|
+
if (!sigOk) {
|
|
225
|
+
return { ...e, validation_status: "signature_invalid" };
|
|
226
|
+
}
|
|
227
|
+
if (e.expires_at <= current_timestamp_ms) {
|
|
228
|
+
return { ...e, validation_status: "expired" };
|
|
229
|
+
}
|
|
230
|
+
if (!bytesEqual(e.target_pubkey, sender_k_local_pubkey)) {
|
|
231
|
+
return { ...e, validation_status: "target_mismatch" };
|
|
232
|
+
}
|
|
233
|
+
return { ...e, validation_status: "valid" };
|
|
234
|
+
});
|
|
235
|
+
// Per-attestation validation (annotate, do not reject)
|
|
236
|
+
const validatedAttestations = pkg.attestations.map((a) => {
|
|
237
|
+
const sigOk = verifyAttestation(a, mlDsaVerify);
|
|
238
|
+
if (!sigOk) {
|
|
239
|
+
return { ...a, validation_status: "signature_invalid" };
|
|
240
|
+
}
|
|
241
|
+
if (a.expires_at <= current_timestamp_ms) {
|
|
242
|
+
return { ...a, validation_status: "expired" };
|
|
243
|
+
}
|
|
244
|
+
return { ...a, validation_status: "valid" };
|
|
245
|
+
});
|
|
246
|
+
return {
|
|
247
|
+
valid: true,
|
|
248
|
+
pseudonym_binding: pkg.pseudonym_binding,
|
|
249
|
+
endorsements: validatedEndorsements,
|
|
250
|
+
attestations: validatedAttestations,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
// ─── CBOR encode/decode ───────────────────────────────────────────────────────
|
|
254
|
+
/**
|
|
255
|
+
* Encode a ConnectionPackage to canonical CBOR bytes.
|
|
256
|
+
*
|
|
257
|
+
* Wire format: CBOR map with keys: pseudonym_binding, endorsements, attestations.
|
|
258
|
+
* Each PseudonymBinding/Endorsement/Attestation is also a CBOR map.
|
|
259
|
+
* Timestamps use minimal encoding per RFC 8949 §4.2.1.
|
|
260
|
+
*/
|
|
261
|
+
export function encodeConnectionPackage(pkg) {
|
|
262
|
+
return CBOR_ENC.encode({
|
|
263
|
+
pseudonym_binding: encodePseudonymBindingMap(pkg.pseudonym_binding),
|
|
264
|
+
endorsements: pkg.endorsements.map(encodeEndorsementMap),
|
|
265
|
+
attestations: pkg.attestations.map(encodeAttestationMap),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
function encodeTimestamp(ts) {
|
|
269
|
+
return ts > 0xffffffff ? BigInt(ts) : ts;
|
|
270
|
+
}
|
|
271
|
+
function encodePseudonymBindingMap(b) {
|
|
272
|
+
return {
|
|
273
|
+
pseudonym_label: b.pseudonym_label,
|
|
274
|
+
k_local_pubkey: b.k_local_pubkey,
|
|
275
|
+
primary_pubkey: b.primary_pubkey,
|
|
276
|
+
ml_dsa_pubkey: b.ml_dsa_pubkey,
|
|
277
|
+
created_at: encodeTimestamp(b.created_at),
|
|
278
|
+
ml_dsa_signature: b.ml_dsa_signature,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
function encodeEndorsementMap(e) {
|
|
282
|
+
return {
|
|
283
|
+
endorser_pubkey: e.endorser_pubkey,
|
|
284
|
+
endorser_ml_dsa_pubkey: e.endorser_ml_dsa_pubkey,
|
|
285
|
+
target_pubkey: e.target_pubkey,
|
|
286
|
+
endorsement_type: e.endorsement_type,
|
|
287
|
+
created_at: encodeTimestamp(e.created_at),
|
|
288
|
+
expires_at: encodeTimestamp(e.expires_at),
|
|
289
|
+
endorser_ml_dsa_signature: e.endorser_ml_dsa_signature,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
function encodeAttestationMap(a) {
|
|
293
|
+
return {
|
|
294
|
+
attester_pubkey: a.attester_pubkey,
|
|
295
|
+
attester_ml_dsa_pubkey: a.attester_ml_dsa_pubkey,
|
|
296
|
+
attestation_type: a.attestation_type,
|
|
297
|
+
attestation_data: a.attestation_data,
|
|
298
|
+
created_at: encodeTimestamp(a.created_at),
|
|
299
|
+
expires_at: encodeTimestamp(a.expires_at),
|
|
300
|
+
attester_ml_dsa_signature: a.attester_ml_dsa_signature,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Decode a ConnectionPackage from CBOR bytes.
|
|
305
|
+
*
|
|
306
|
+
* Performs structural validation (field presence, types, sizes).
|
|
307
|
+
* Does NOT verify signatures — call validateConnectionPackage for that.
|
|
308
|
+
*
|
|
309
|
+
* @throws Error if the bytes cannot be decoded or are structurally invalid.
|
|
310
|
+
*/
|
|
311
|
+
export function decodeConnectionPackage(bytes) {
|
|
312
|
+
const raw = cborDecode(bytes);
|
|
313
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
314
|
+
throw new Error("decodeConnectionPackage: expected a CBOR map at top level");
|
|
315
|
+
}
|
|
316
|
+
const obj = raw;
|
|
317
|
+
const pseudonym_binding = decodePseudonymBindingMap(requireField(obj, "pseudonym_binding", "decodeConnectionPackage"));
|
|
318
|
+
const endorsementsRaw = requireField(obj, "endorsements", "decodeConnectionPackage");
|
|
319
|
+
if (!Array.isArray(endorsementsRaw)) {
|
|
320
|
+
throw new Error("decodeConnectionPackage: endorsements must be a CBOR array");
|
|
321
|
+
}
|
|
322
|
+
const endorsements = endorsementsRaw.map((e, i) => decodeEndorsementMap(e, `endorsements[${i}]`));
|
|
323
|
+
const attestationsRaw = requireField(obj, "attestations", "decodeConnectionPackage");
|
|
324
|
+
if (!Array.isArray(attestationsRaw)) {
|
|
325
|
+
throw new Error("decodeConnectionPackage: attestations must be a CBOR array");
|
|
326
|
+
}
|
|
327
|
+
const attestations = attestationsRaw.map((a, i) => decodeAttestationMap(a, `attestations[${i}]`));
|
|
328
|
+
return { pseudonym_binding, endorsements, attestations };
|
|
329
|
+
}
|
|
330
|
+
// ─── Internal decode helpers ──────────────────────────────────────────────────
|
|
331
|
+
function requireField(obj, key, ctx) {
|
|
332
|
+
if (!(key in obj))
|
|
333
|
+
throw new Error(`${ctx}: missing required field '${key}'`);
|
|
334
|
+
return obj[key];
|
|
335
|
+
}
|
|
336
|
+
function requireBytes(obj, key, ctx) {
|
|
337
|
+
const v = requireField(obj, key, ctx);
|
|
338
|
+
const b = toUint8Array(v);
|
|
339
|
+
if (!b)
|
|
340
|
+
throw new Error(`${ctx}: field '${key}' must be bytes, got ${typeof v}`);
|
|
341
|
+
return b;
|
|
342
|
+
}
|
|
343
|
+
function requireString(obj, key, ctx) {
|
|
344
|
+
const v = requireField(obj, key, ctx);
|
|
345
|
+
if (typeof v !== "string")
|
|
346
|
+
throw new Error(`${ctx}: field '${key}' must be a string`);
|
|
347
|
+
return v;
|
|
348
|
+
}
|
|
349
|
+
function requireTimestamp(obj, key, ctx) {
|
|
350
|
+
const v = requireField(obj, key, ctx);
|
|
351
|
+
const n = typeof v === "bigint" ? Number(v) : typeof v === "number" ? v : NaN;
|
|
352
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
353
|
+
throw new Error(`${ctx}: field '${key}' must be a non-negative integer, got ${v}`);
|
|
354
|
+
}
|
|
355
|
+
return n;
|
|
356
|
+
}
|
|
357
|
+
function decodePseudonymBindingMap(raw) {
|
|
358
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
359
|
+
throw new Error("decodePseudonymBindingMap: expected a CBOR map");
|
|
360
|
+
}
|
|
361
|
+
const obj = raw;
|
|
362
|
+
const ctx = "PseudonymBinding";
|
|
363
|
+
return {
|
|
364
|
+
pseudonym_label: requireString(obj, "pseudonym_label", ctx),
|
|
365
|
+
k_local_pubkey: requireBytes(obj, "k_local_pubkey", ctx),
|
|
366
|
+
primary_pubkey: requireBytes(obj, "primary_pubkey", ctx),
|
|
367
|
+
ml_dsa_pubkey: requireBytes(obj, "ml_dsa_pubkey", ctx),
|
|
368
|
+
created_at: requireTimestamp(obj, "created_at", ctx),
|
|
369
|
+
ml_dsa_signature: requireBytes(obj, "ml_dsa_signature", ctx),
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
function decodeEndorsementMap(raw, ctx) {
|
|
373
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
374
|
+
throw new Error(`decodeEndorsementMap[${ctx}]: expected a CBOR map`);
|
|
375
|
+
}
|
|
376
|
+
const obj = raw;
|
|
377
|
+
return {
|
|
378
|
+
endorser_pubkey: requireBytes(obj, "endorser_pubkey", ctx),
|
|
379
|
+
endorser_ml_dsa_pubkey: requireBytes(obj, "endorser_ml_dsa_pubkey", ctx),
|
|
380
|
+
target_pubkey: requireBytes(obj, "target_pubkey", ctx),
|
|
381
|
+
endorsement_type: requireString(obj, "endorsement_type", ctx),
|
|
382
|
+
created_at: requireTimestamp(obj, "created_at", ctx),
|
|
383
|
+
expires_at: requireTimestamp(obj, "expires_at", ctx),
|
|
384
|
+
endorser_ml_dsa_signature: requireBytes(obj, "endorser_ml_dsa_signature", ctx),
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
function decodeAttestationMap(raw, ctx) {
|
|
388
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
389
|
+
throw new Error(`decodeAttestationMap[${ctx}]: expected a CBOR map`);
|
|
390
|
+
}
|
|
391
|
+
const obj = raw;
|
|
392
|
+
return {
|
|
393
|
+
attester_pubkey: requireBytes(obj, "attester_pubkey", ctx),
|
|
394
|
+
attester_ml_dsa_pubkey: requireBytes(obj, "attester_ml_dsa_pubkey", ctx),
|
|
395
|
+
attestation_type: requireString(obj, "attestation_type", ctx),
|
|
396
|
+
attestation_data: requireBytes(obj, "attestation_data", ctx),
|
|
397
|
+
created_at: requireTimestamp(obj, "created_at", ctx),
|
|
398
|
+
expires_at: requireTimestamp(obj, "expires_at", ctx),
|
|
399
|
+
attester_ml_dsa_signature: requireBytes(obj, "attester_ml_dsa_signature", ctx),
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
// ─── Internal utility ─────────────────────────────────────────────────────────
|
|
403
|
+
/**
|
|
404
|
+
* Constant-time byte comparison.
|
|
405
|
+
*/
|
|
406
|
+
function bytesEqual(a, b) {
|
|
407
|
+
if (a.length !== b.length)
|
|
408
|
+
return false;
|
|
409
|
+
let diff = 0;
|
|
410
|
+
for (let i = 0; i < a.length; i++) {
|
|
411
|
+
diff |= a[i] ^ b[i];
|
|
412
|
+
}
|
|
413
|
+
return diff === 0;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Coerce a CBOR-decoded value to Uint8Array.
|
|
417
|
+
* cbor-x with tagUint8Array:false returns Buffer (a Node.js Buffer is a Uint8Array subclass).
|
|
418
|
+
*/
|
|
419
|
+
function toUint8Array(v) {
|
|
420
|
+
if (v instanceof Uint8Array)
|
|
421
|
+
return v;
|
|
422
|
+
if (Buffer.isBuffer(v))
|
|
423
|
+
return new Uint8Array(v.buffer, v.byteOffset, v.byteLength);
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=connection-package.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-package.js","sourceRoot":"","sources":["../src/connection-package.ts"],"names":[],"mappings":"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"}
|