reputrans 0.1.1 → 0.1.3

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.
Files changed (36) hide show
  1. package/circuits/composite/target/composite.json +1 -1
  2. package/dist/cli/src/auto-detect.d.ts +1 -0
  3. package/dist/cli/src/auto-detect.d.ts.map +1 -1
  4. package/dist/cli/src/auto-detect.js +3 -0
  5. package/dist/cli/src/auto-detect.js.map +1 -1
  6. package/dist/cli/src/commands/inspect.d.ts.map +1 -1
  7. package/dist/cli/src/commands/inspect.js +2 -1
  8. package/dist/cli/src/commands/inspect.js.map +1 -1
  9. package/dist/cli/src/commands/issue.d.ts.map +1 -1
  10. package/dist/cli/src/commands/issue.js +70 -26
  11. package/dist/cli/src/commands/issue.js.map +1 -1
  12. package/dist/cli/src/commands/keygen.d.ts.map +1 -1
  13. package/dist/cli/src/commands/keygen.js +30 -6
  14. package/dist/cli/src/commands/keygen.js.map +1 -1
  15. package/dist/cli/src/commands/prove.d.ts +3 -1
  16. package/dist/cli/src/commands/prove.d.ts.map +1 -1
  17. package/dist/cli/src/commands/prove.js +44 -11
  18. package/dist/cli/src/commands/prove.js.map +1 -1
  19. package/dist/cli/src/commands/verify.d.ts.map +1 -1
  20. package/dist/cli/src/commands/verify.js +229 -18
  21. package/dist/cli/src/commands/verify.js.map +1 -1
  22. package/dist/cli/src/index.js +3 -1
  23. package/dist/cli/src/index.js.map +1 -1
  24. package/dist/cli/src/keystore.d.ts +10 -0
  25. package/dist/cli/src/keystore.d.ts.map +1 -0
  26. package/dist/cli/src/keystore.js +70 -0
  27. package/dist/cli/src/keystore.js.map +1 -0
  28. package/dist/sdk/src/encoder.d.ts +12 -2
  29. package/dist/sdk/src/encoder.d.ts.map +1 -1
  30. package/dist/sdk/src/encoder.js +19 -20
  31. package/dist/sdk/src/encoder.js.map +1 -1
  32. package/dist/sdk/src/index.d.ts +1 -1
  33. package/dist/sdk/src/index.d.ts.map +1 -1
  34. package/dist/sdk/src/index.js +1 -1
  35. package/dist/sdk/src/index.js.map +1 -1
  36. package/package.json +1 -1
@@ -1,7 +1,41 @@
1
1
  import { readFile } from 'fs/promises';
2
2
  import { resolve } from 'path';
3
3
  import { loadCircuit } from '../../../sdk/src/circuit-loader.js';
4
+ import { stringToField } from '../../../sdk/src/encoder.js';
4
5
  import { findProofFile } from '../auto-detect.js';
6
+ // Public inputs layout from composite circuit (12 total):
7
+ // [0] pub_key_x [1] pub_key_y
8
+ // [2] msg [3] credential_root
9
+ // [4] disclosed_value [5] disclosed_index
10
+ // [6] range_field_index [7] range_threshold
11
+ // [8] range_comparison [9] nonce
12
+ // [10] expiry [11] holder_commitment
13
+ const PI = {
14
+ PUB_KEY_X: 0,
15
+ PUB_KEY_Y: 1,
16
+ MSG: 2,
17
+ CREDENTIAL_ROOT: 3,
18
+ DISCLOSED_VALUE: 4,
19
+ DISCLOSED_INDEX: 5,
20
+ RANGE_FIELD_INDEX: 6,
21
+ RANGE_THRESHOLD: 7,
22
+ RANGE_COMPARISON: 8,
23
+ NONCE: 9,
24
+ EXPIRY: 10,
25
+ HOLDER_COMMITMENT: 11,
26
+ EXPECTED_LENGTH: 12,
27
+ };
28
+ // Convert a 0x-prefixed hex string to BigInt for format-independent comparison
29
+ function hexToBigInt(hex) {
30
+ if (hex.startsWith('0x') || hex.startsWith('0X')) {
31
+ return BigInt(hex);
32
+ }
33
+ return BigInt('0x' + hex);
34
+ }
35
+ // Check if a public input represents zero
36
+ function isZeroInput(hex) {
37
+ return hexToBigInt(hex) === 0n;
38
+ }
5
39
  export async function verify(opts) {
6
40
  // Auto-detect proof file
7
41
  let proofPath = opts.proof;
@@ -17,16 +51,47 @@ export async function verify(opts) {
17
51
  // Load proof
18
52
  const raw = await readFile(resolve(proofPath), 'utf-8');
19
53
  const proofData = JSON.parse(raw);
54
+ // --- Structural validation ---
55
+ if (!proofData.proof || !Array.isArray(proofData.publicInputs)) {
56
+ console.error('Malformed proof file: missing proof or publicInputs.');
57
+ process.exit(1);
58
+ }
59
+ if (proofData.publicInputs.length !== PI.EXPECTED_LENGTH) {
60
+ console.error(`Invalid public inputs: expected ${PI.EXPECTED_LENGTH}, got ${proofData.publicInputs.length}.`);
61
+ process.exit(1);
62
+ }
63
+ // Validate all public inputs are hex strings
64
+ for (let i = 0; i < PI.EXPECTED_LENGTH; i++) {
65
+ const val = proofData.publicInputs[i];
66
+ if (typeof val !== 'string' || !/^0x[0-9a-fA-F]+$/.test(val)) {
67
+ console.error(`Invalid public input at index ${i}: must be 0x-prefixed hex string.`);
68
+ process.exit(1);
69
+ }
70
+ }
71
+ // --- Hardcode circuit to prevent substitution (C4 fix) ---
72
+ const circuitName = 'composite';
73
+ if (proofData.circuit && proofData.circuit !== circuitName) {
74
+ console.error(`Untrusted circuit "${proofData.circuit}". Only "${circuitName}" is accepted.`);
75
+ process.exit(1);
76
+ }
20
77
  console.log('Loading circuit...');
21
- const circuit = await loadCircuit(proofData.circuit || 'composite');
78
+ const circuit = await loadCircuit(circuitName);
22
79
  console.log('Verifying proof...');
23
80
  const { BarretenbergBackend } = await import('@noir-lang/backend_barretenberg');
24
81
  const backend = new BarretenbergBackend(circuit);
25
- // Decode proof hex to Uint8Array
26
- const proofHex = proofData.proof.startsWith('0x')
82
+ // Decode proof hex to Uint8Array with validation
83
+ const proofHexRaw = proofData.proof.startsWith('0x')
27
84
  ? proofData.proof.slice(2)
28
85
  : proofData.proof;
29
- const proofBytes = Uint8Array.from(proofHex.match(/.{2}/g).map((b) => parseInt(b, 16)));
86
+ if (proofHexRaw.length === 0 || !/^[0-9a-fA-F]*$/.test(proofHexRaw) || proofHexRaw.length % 2 !== 0) {
87
+ console.error('Malformed proof: invalid hex encoding.');
88
+ process.exit(1);
89
+ }
90
+ if (proofHexRaw.length > 100000) {
91
+ console.error('Malformed proof: exceeds maximum size.');
92
+ process.exit(1);
93
+ }
94
+ const proofBytes = Uint8Array.from(proofHexRaw.match(/.{2}/g).map((b) => parseInt(b, 16)));
30
95
  let valid;
31
96
  try {
32
97
  valid = await backend.verifyProof({
@@ -38,26 +103,172 @@ export async function verify(opts) {
38
103
  valid = false;
39
104
  }
40
105
  await backend.destroy?.();
41
- if (valid) {
42
- console.log('\nProof VALID');
43
- console.log(` Circuit: ${proofData.circuit}`);
44
- console.log(` Issuer: ${proofData.issuer?.name || 'unknown'}`);
45
- if (proofData.disclosed && Object.keys(proofData.disclosed).length > 0) {
46
- console.log(' Disclosed fields:');
47
- for (const [field, value] of Object.entries(proofData.disclosed)) {
48
- console.log(` ${field} = "${value}"`);
106
+ if (!valid) {
107
+ console.log('\nProof INVALID');
108
+ console.log('The proof does not verify. The credential may have been tampered with.');
109
+ process.exit(1);
110
+ }
111
+ // --- ZK proof passed. Now verify metadata against public inputs. ---
112
+ const pi = proofData.publicInputs;
113
+ const tampered = [];
114
+ // C1 fix: Verify issuer public key matches publicInputs (MANDATORY)
115
+ // issuer.publicKey stores decimal strings; publicInputs stores hex.
116
+ // Compare as BigInt for format independence.
117
+ if (!proofData.issuer?.publicKey?.x || !proofData.issuer?.publicKey?.y) {
118
+ tampered.push('Missing issuer public key - cannot verify issuer identity');
119
+ }
120
+ else {
121
+ const claimedX = BigInt(proofData.issuer.publicKey.x);
122
+ const claimedY = BigInt(proofData.issuer.publicKey.y);
123
+ const proofX = hexToBigInt(pi[PI.PUB_KEY_X]);
124
+ const proofY = hexToBigInt(pi[PI.PUB_KEY_Y]);
125
+ if (claimedX !== proofX) {
126
+ tampered.push(`Issuer public key X mismatch: metadata has ${claimedX}, proof has ${proofX}`);
127
+ }
128
+ if (claimedY !== proofY) {
129
+ tampered.push(`Issuer public key Y mismatch: metadata has ${claimedY}, proof has ${proofY}`);
130
+ }
131
+ }
132
+ // C2 fix: Verify disclosed field values match publicInputs (MANDATORY)
133
+ // The circuit always has a disclosed_field_value public input.
134
+ // If no disclosed section in JSON but the proof has a non-zero disclosed value, it's tampered.
135
+ const hasDisclosed = proofData.disclosed && Object.keys(proofData.disclosed).length > 0;
136
+ const proofDisclosedValue = hexToBigInt(pi[PI.DISCLOSED_VALUE]);
137
+ if (!hasDisclosed && proofDisclosedValue !== 0n) {
138
+ tampered.push('Disclosed field missing from metadata but proof contains a non-zero disclosed value - metadata stripped');
139
+ }
140
+ else if (hasDisclosed) {
141
+ const disclosedEntries = Object.entries(proofData.disclosed);
142
+ if (disclosedEntries.length !== 1) {
143
+ tampered.push(`Expected exactly 1 disclosed field, got ${disclosedEntries.length} - circuit supports single disclosure`);
144
+ }
145
+ else {
146
+ const [field, value] = disclosedEntries[0];
147
+ const encoded = stringToField(value);
148
+ if (encoded !== proofDisclosedValue) {
149
+ tampered.push(`Disclosed field "${field}" mismatch: "${value}" encodes to ${encoded}, proof has ${proofDisclosedValue}`);
49
150
  }
50
151
  }
51
- if (proofData.range) {
52
- const op = proofData.range.operator === 'gte' ? '>=' : '<=';
53
- console.log(` Range proof: ${proofData.range.field} ${op} ${proofData.range.threshold} PASSED`);
152
+ }
153
+ // C3 fix: Verify range metadata matches publicInputs (MANDATORY)
154
+ // Check if the proof actually contains a non-trivial range assertion
155
+ const proofThreshold = hexToBigInt(pi[PI.RANGE_THRESHOLD]);
156
+ const proofComparison = hexToBigInt(pi[PI.RANGE_COMPARISON]);
157
+ if (proofData.range) {
158
+ // Validate operator is gte or lte
159
+ if (proofData.range.operator !== 'gte' && proofData.range.operator !== 'lte') {
160
+ tampered.push(`Invalid range operator: "${proofData.range.operator}" - must be "gte" or "lte"`);
54
161
  }
55
- console.log(` Generated: ${proofData.generatedAt || 'unknown'}`);
162
+ else {
163
+ const claimedOp = proofData.range.operator === 'lte' ? 1n : 0n;
164
+ if (claimedOp !== proofComparison) {
165
+ tampered.push(`Range operator mismatch: metadata says "${proofData.range.operator}", proof has comparison_type=${proofComparison}`);
166
+ }
167
+ }
168
+ try {
169
+ const claimedThreshold = BigInt(proofData.range.threshold);
170
+ if (claimedThreshold !== proofThreshold) {
171
+ tampered.push(`Range threshold mismatch: metadata says ${proofData.range.threshold}, proof has ${proofThreshold}`);
172
+ }
173
+ }
174
+ catch {
175
+ tampered.push(`Range threshold is not a valid number: "${proofData.range.threshold}"`);
176
+ }
177
+ }
178
+ else if (proofThreshold !== 0n) {
179
+ // No range in metadata but proof has a non-zero threshold - metadata stripped
180
+ tampered.push('Range proof missing from metadata but proof contains a non-zero threshold - metadata stripped');
181
+ }
182
+ // Replay protection: nonce MUST be present and match (MANDATORY)
183
+ const proofNonce = hexToBigInt(pi[PI.NONCE]);
184
+ if (proofNonce === 0n) {
185
+ tampered.push('Nonce is zero - proof has no replay protection');
186
+ }
187
+ if (proofData.nonce === undefined || proofData.nonce === null) {
188
+ tampered.push('Missing nonce in metadata - cannot verify replay protection');
56
189
  }
57
190
  else {
58
- console.log('\nProof INVALID');
59
- console.log('The proof does not verify. The credential may have been tampered with.');
191
+ try {
192
+ const claimedNonce = BigInt(proofData.nonce);
193
+ if (claimedNonce !== proofNonce) {
194
+ tampered.push(`Nonce mismatch: metadata has ${claimedNonce}, proof has ${proofNonce}`);
195
+ }
196
+ }
197
+ catch {
198
+ tampered.push(`Invalid nonce value: "${proofData.nonce}"`);
199
+ }
200
+ }
201
+ // Expiry check: MUST be present, non-zero, and not expired (MANDATORY)
202
+ const proofExpiry = hexToBigInt(pi[PI.EXPIRY]);
203
+ const nowSeconds = BigInt(Math.floor(Date.now() / 1000));
204
+ if (proofExpiry === 0n) {
205
+ tampered.push('Expiry is zero - proof has no temporal bound');
206
+ }
207
+ else if (proofExpiry < nowSeconds) {
208
+ tampered.push(`Proof expired at ${new Date(Number(proofExpiry) * 1000).toISOString()}`);
209
+ }
210
+ if (proofData.expiry === undefined || proofData.expiry === null) {
211
+ tampered.push('Missing expiry in metadata - cannot verify temporal bound');
212
+ }
213
+ else {
214
+ try {
215
+ const claimedExpiry = BigInt(proofData.expiry);
216
+ if (claimedExpiry !== proofExpiry) {
217
+ tampered.push(`Expiry mismatch: metadata has ${claimedExpiry}, proof has ${proofExpiry}`);
218
+ }
219
+ }
220
+ catch {
221
+ tampered.push(`Invalid expiry value: "${proofData.expiry}"`);
222
+ }
223
+ }
224
+ // Holder commitment: MUST be present, non-zero, and match (MANDATORY)
225
+ const proofHolderCommitment = hexToBigInt(pi[PI.HOLDER_COMMITMENT]);
226
+ if (proofHolderCommitment === 0n) {
227
+ tampered.push('Holder commitment is zero - proof has no subject binding');
228
+ }
229
+ if (proofData.holderCommitment === undefined || proofData.holderCommitment === null) {
230
+ tampered.push('Missing holderCommitment in metadata - cannot verify subject binding');
231
+ }
232
+ else {
233
+ try {
234
+ const claimedCommitment = BigInt(proofData.holderCommitment);
235
+ if (claimedCommitment !== proofHolderCommitment) {
236
+ tampered.push(`Holder commitment mismatch: metadata has ${claimedCommitment}, proof has ${proofHolderCommitment}`);
237
+ }
238
+ }
239
+ catch {
240
+ tampered.push(`Invalid holderCommitment value: "${proofData.holderCommitment}"`);
241
+ }
242
+ }
243
+ if (tampered.length > 0) {
244
+ console.log('\nProof INVALID - METADATA TAMPERED');
245
+ console.log('The ZK proof is cryptographically valid but the metadata has been altered:');
246
+ for (const t of tampered) {
247
+ console.log(` - ${t}`);
248
+ }
249
+ console.log('\nThis proof file has been tampered with. Do not trust it.');
60
250
  process.exit(1);
61
251
  }
252
+ // --- All checks passed ---
253
+ console.log('\nProof VALID');
254
+ console.log(` Circuit: ${circuitName}`);
255
+ console.log(` Issuer: ${proofData.issuer?.name || 'unknown'} (unverified label)`);
256
+ console.log(` Public key X: ${pi[PI.PUB_KEY_X]}`);
257
+ console.log(` Public key Y: ${pi[PI.PUB_KEY_Y]}`);
258
+ if (hasDisclosed) {
259
+ console.log(' Disclosed fields:');
260
+ for (const [field, value] of Object.entries(proofData.disclosed)) {
261
+ console.log(` ${field} (label unverified) = "${value}" (value verified)`);
262
+ }
263
+ }
264
+ if (proofData.range) {
265
+ const op = proofData.range.operator === 'gte' ? '>=' : '<=';
266
+ console.log(` Range proof: ${proofData.range.field} ${op} ${proofData.range.threshold} PASSED (verified)`);
267
+ }
268
+ console.log(` Nonce: ${proofNonce} (verified)`);
269
+ console.log(` Expires: ${new Date(Number(proofExpiry) * 1000).toISOString()} (verified)`);
270
+ console.log(` Holder: ${proofHolderCommitment} (verified)`);
271
+ console.log(` Generated: ${proofData.generatedAt || 'unknown'} (unverified)`);
272
+ console.log(`\nNote: Issuer name and field labels are self-reported. Verify the public key against a trusted registry.`);
62
273
  }
63
274
  //# sourceMappingURL=verify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../../cli/src/commands/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../../cli/src/commands/verify.ts"],"names":[],"mappings":"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"}
@@ -31,9 +31,11 @@ program
31
31
  program
32
32
  .command('prove')
33
33
  .description('Generate a ZK proof of selected credential fields')
34
- .option('--credential <path>', 'Path to credential JSON (auto-detects credential-*.json)')
34
+ .option('--wallet <path>', 'Path to wallet JSON (auto-detects wallet-*.json)')
35
35
  .option('--disclose <fields>', 'Comma-separated field names to disclose')
36
36
  .option('--range <spec>', 'Range proof: field:operator:threshold (e.g. gpa:gte:3.0)')
37
+ .option('--nonce <value>', 'Verifier challenge nonce (auto-generated if omitted)')
38
+ .option('--expiry <seconds>', 'Proof expiry as Unix timestamp (defaults to 1 hour)')
37
39
  .option('--out <path>', 'Output proof path')
38
40
  .action(prove);
39
41
  program
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../cli/src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,yGAAyG,CAAC;KACtH,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,eAAe,EAAE,aAAa,EAAE,QAAQ,CAAC;KAChD,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;KAC1C,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,cAAc,EAAE,kEAAkE,CAAC;KAC1F,MAAM,CAAC,iBAAiB,EAAE,4CAA4C,CAAC;KACvE,MAAM,CAAC,cAAc,EAAE,wBAAwB,CAAC;KAChD,MAAM,CAAC,KAAK,CAAC,CAAC;AAEjB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,qBAAqB,EAAE,0DAA0D,CAAC;KACzF,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,0DAA0D,CAAC;KACzF,MAAM,CAAC,qBAAqB,EAAE,yCAAyC,CAAC;KACxE,MAAM,CAAC,gBAAgB,EAAE,0DAA0D,CAAC;KACpF,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC;KAC3C,MAAM,CAAC,KAAK,CAAC,CAAC;AAEjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,gBAAgB,EAAE,gDAAgD,CAAC;KAC1E,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../cli/src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,yGAAyG,CAAC;KACtH,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,eAAe,EAAE,aAAa,EAAE,QAAQ,CAAC;KAChD,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;KAC1C,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,cAAc,EAAE,kEAAkE,CAAC;KAC1F,MAAM,CAAC,iBAAiB,EAAE,4CAA4C,CAAC;KACvE,MAAM,CAAC,cAAc,EAAE,wBAAwB,CAAC;KAChD,MAAM,CAAC,KAAK,CAAC,CAAC;AAEjB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,qBAAqB,EAAE,0DAA0D,CAAC;KACzF,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,iBAAiB,EAAE,kDAAkD,CAAC;KAC7E,MAAM,CAAC,qBAAqB,EAAE,yCAAyC,CAAC;KACxE,MAAM,CAAC,gBAAgB,EAAE,0DAA0D,CAAC;KACpF,MAAM,CAAC,iBAAiB,EAAE,sDAAsD,CAAC;KACjF,MAAM,CAAC,oBAAoB,EAAE,qDAAqD,CAAC;KACnF,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC;KAC3C,MAAM,CAAC,KAAK,CAAC,CAAC;AAEjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,gBAAgB,EAAE,gDAAgD,CAAC;KAC1E,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface EncryptedKey {
2
+ ciphertext: string;
3
+ iv: string;
4
+ salt: string;
5
+ tag: string;
6
+ }
7
+ export declare function encryptPrivateKey(privateKey: string, password: string): EncryptedKey;
8
+ export declare function decryptPrivateKey(encrypted: EncryptedKey, password: string): string;
9
+ export declare function promptPassword(prompt: string): Promise<string>;
10
+ //# sourceMappingURL=keystore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.d.ts","sourceRoot":"","sources":["../../../cli/src/keystore.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAapF;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAanF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwC9D"}
@@ -0,0 +1,70 @@
1
+ import { createCipheriv, createDecipheriv, scryptSync, randomBytes } from 'crypto';
2
+ // scrypt parameters - N=32768 balances security with Node.js memory limits on Windows
3
+ const SCRYPT_OPTS = { N: 32768, r: 8, p: 1, maxmem: 64 * 1024 * 1024 };
4
+ export function encryptPrivateKey(privateKey, password) {
5
+ const salt = randomBytes(32);
6
+ const key = scryptSync(password, salt, 32, SCRYPT_OPTS);
7
+ const iv = randomBytes(12);
8
+ const cipher = createCipheriv('aes-256-gcm', key, iv);
9
+ const encrypted = Buffer.concat([cipher.update(privateKey, 'utf8'), cipher.final()]);
10
+ const tag = cipher.getAuthTag();
11
+ return {
12
+ ciphertext: encrypted.toString('hex'),
13
+ iv: iv.toString('hex'),
14
+ salt: salt.toString('hex'),
15
+ tag: tag.toString('hex'),
16
+ };
17
+ }
18
+ export function decryptPrivateKey(encrypted, password) {
19
+ const key = scryptSync(password, Buffer.from(encrypted.salt, 'hex'), 32, SCRYPT_OPTS);
20
+ const decipher = createDecipheriv('aes-256-gcm', key, Buffer.from(encrypted.iv, 'hex'));
21
+ decipher.setAuthTag(Buffer.from(encrypted.tag, 'hex'));
22
+ const decrypted = Buffer.concat([
23
+ decipher.update(Buffer.from(encrypted.ciphertext, 'hex')),
24
+ decipher.final(),
25
+ ]);
26
+ return decrypted.toString('utf8');
27
+ }
28
+ export function promptPassword(prompt) {
29
+ return new Promise((resolve, reject) => {
30
+ if (!process.stdin.isTTY) {
31
+ reject(new Error('No TTY available - cannot prompt for password'));
32
+ return;
33
+ }
34
+ process.stderr.write(prompt);
35
+ // Suppress echo for password input
36
+ const stdin = process.stdin;
37
+ const wasRaw = stdin.isRaw;
38
+ stdin.setRawMode(true);
39
+ stdin.resume();
40
+ let password = '';
41
+ const onData = (data) => {
42
+ const char = data.toString('utf8');
43
+ if (char === '\r' || char === '\n') {
44
+ stdin.setRawMode(wasRaw ?? false);
45
+ stdin.removeListener('data', onData);
46
+ stdin.pause();
47
+ process.stderr.write('\n');
48
+ if (!password || password.length === 0) {
49
+ reject(new Error('Password cannot be empty'));
50
+ return;
51
+ }
52
+ resolve(password);
53
+ }
54
+ else if (char === '\u007F' || char === '\b') {
55
+ // Backspace
56
+ password = password.slice(0, -1);
57
+ }
58
+ else if (char === '\u0003') {
59
+ // Ctrl+C
60
+ stdin.setRawMode(wasRaw ?? false);
61
+ process.exit(1);
62
+ }
63
+ else {
64
+ password += char;
65
+ }
66
+ };
67
+ stdin.on('data', onData);
68
+ });
69
+ }
70
+ //# sourceMappingURL=keystore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.js","sourceRoot":"","sources":["../../../cli/src/keystore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAEnF,sFAAsF;AACtF,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AASvE,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,QAAgB;IACpE,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAChC,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1B,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAuB,EAAE,QAAgB;IACzE,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,aAAa,EACb,GAAG,EACH,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CACjC,CAAC;IACF,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACzD,QAAQ,CAAC,KAAK,EAAE;KACjB,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE7B,mCAAmC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;gBAClC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACrC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;oBAC9C,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC9C,YAAY;gBACZ,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,SAAS;gBACT,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,IAAI,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QACF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -25,10 +25,20 @@ export interface EncodedCredential {
25
25
  /**
26
26
  * Convert a string value to a BN254 field element.
27
27
  *
28
- * - Numeric strings and bigint-like hex strings are parsed directly.
29
- * - Other strings are hashed: UTF-8 bytes are packed into a bigint, then reduced mod p.
28
+ * SINGLE encoding path: always encodes as UTF-8 bytes packed into a bigint,
29
+ * then reduced mod field order. No special-casing for hex or decimal strings.
30
+ * This prevents encoding collisions where "3", "003", "0x3" would otherwise
31
+ * all map to the same field element.
30
32
  */
31
33
  export declare function stringToField(value: string): bigint;
34
+ /**
35
+ * Convert an explicit numeric value to a BN254 field element.
36
+ *
37
+ * Use this ONLY for values that are semantically numeric (e.g. range proof
38
+ * thresholds), never for credential field encoding. Credential fields must
39
+ * always go through stringToField for collision safety.
40
+ */
41
+ export declare function numberToField(n: number | bigint): bigint;
32
42
  /**
33
43
  * Encode a record of string key-value pairs into circuit inputs.
34
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../sdk/src/encoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,UAAU,QAAwB,CAAC;AAEhD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,uCAAuC;IACvC,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA2BnD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,CA8BlF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAkB5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAkB7E"}
1
+ {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../sdk/src/encoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,UAAU,QAAwB,CAAC;AAEhD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,uCAAuC;IACvC,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASnD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAKxD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,CA8BlF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAkB5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAkB7E"}
@@ -12,29 +12,13 @@ export const MAX_LEAVES = 1 << FIELD_TREE_DEPTH; // 16
12
12
  /**
13
13
  * Convert a string value to a BN254 field element.
14
14
  *
15
- * - Numeric strings and bigint-like hex strings are parsed directly.
16
- * - Other strings are hashed: UTF-8 bytes are packed into a bigint, then reduced mod p.
15
+ * SINGLE encoding path: always encodes as UTF-8 bytes packed into a bigint,
16
+ * then reduced mod field order. No special-casing for hex or decimal strings.
17
+ * This prevents encoding collisions where "3", "003", "0x3" would otherwise
18
+ * all map to the same field element.
17
19
  */
18
20
  export function stringToField(value) {
19
- // Try numeric parse first
20
21
  const trimmed = value.trim();
21
- // Hex
22
- if (trimmed.startsWith('0x') || trimmed.startsWith('0X')) {
23
- const val = BigInt(trimmed);
24
- if (val >= 0n && val < BN254_FIELD_ORDER)
25
- return val;
26
- return val % BN254_FIELD_ORDER;
27
- }
28
- // Decimal integer or bigint
29
- if (/^-?\d+$/.test(trimmed)) {
30
- let val = BigInt(trimmed);
31
- if (val < 0n)
32
- val = val + BN254_FIELD_ORDER;
33
- if (val >= BN254_FIELD_ORDER)
34
- val = val % BN254_FIELD_ORDER;
35
- return val;
36
- }
37
- // Arbitrary string: pack UTF-8 bytes into bigint, reduce mod p
38
22
  const encoder = new TextEncoder();
39
23
  const bytes = encoder.encode(trimmed);
40
24
  let val = 0n;
@@ -43,6 +27,21 @@ export function stringToField(value) {
43
27
  }
44
28
  return val % BN254_FIELD_ORDER;
45
29
  }
30
+ /**
31
+ * Convert an explicit numeric value to a BN254 field element.
32
+ *
33
+ * Use this ONLY for values that are semantically numeric (e.g. range proof
34
+ * thresholds), never for credential field encoding. Credential fields must
35
+ * always go through stringToField for collision safety.
36
+ */
37
+ export function numberToField(n) {
38
+ let val = BigInt(n);
39
+ if (val < 0n)
40
+ val = val + BN254_FIELD_ORDER;
41
+ if (val >= BN254_FIELD_ORDER)
42
+ val = val % BN254_FIELD_ORDER;
43
+ return val;
44
+ }
46
45
  /**
47
46
  * Encode a record of string key-value pairs into circuit inputs.
48
47
  *
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../sdk/src/encoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../sdk/src/encoder.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ export { sign, verify, getPublicKey, BJJ, G, IDENTITY } from './eddsa.js';
3
3
  export type { Point, EdDSASignature } from './eddsa.js';
4
4
  export { parseVC, extractSubjectFields, getIssuerId, VCParseError } from './vc-parser.js';
5
5
  export type { VerifiableCredential, CredentialSubject, CredentialProof } from './vc-parser.js';
6
- export { encodeCredential, buildMerkleTree, getMerklePath, stringToField, FIELD_TREE_DEPTH, MAX_LEAVES, } from './encoder.js';
6
+ export { encodeCredential, buildMerkleTree, getMerklePath, stringToField, numberToField, FIELD_TREE_DEPTH, MAX_LEAVES, } from './encoder.js';
7
7
  export type { EncodedCredential, MerklePath } from './encoder.js';
8
8
  export { validateProofRequest, createDisclosureRequest, createRangeRequest, ProofRequestError, } from './proof-request.js';
9
9
  export type { ProofRequest, ProofResponse, Predicate, PredicateOperator, } from './proof-request.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../sdk/src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1F,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAG/F,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../sdk/src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1F,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAG/F,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
@@ -4,7 +4,7 @@ export { sign, verify, getPublicKey, BJJ, G, IDENTITY } from './eddsa.js';
4
4
  // -- VC parsing --
5
5
  export { parseVC, extractSubjectFields, getIssuerId, VCParseError } from './vc-parser.js';
6
6
  // -- Encoding --
7
- export { encodeCredential, buildMerkleTree, getMerklePath, stringToField, FIELD_TREE_DEPTH, MAX_LEAVES, } from './encoder.js';
7
+ export { encodeCredential, buildMerkleTree, getMerklePath, stringToField, numberToField, FIELD_TREE_DEPTH, MAX_LEAVES, } from './encoder.js';
8
8
  // -- Proof request/response protocol --
9
9
  export { validateProofRequest, createDisclosureRequest, createRangeRequest, ProofRequestError, } from './proof-request.js';
10
10
  // -- Identity --
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../sdk/src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG1E,mBAAmB;AACnB,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG1F,iBAAiB;AACjB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,cAAc,CAAC;AAGtB,wCAAwC;AACxC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAQ5B,iBAAiB;AACjB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../sdk/src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG1E,mBAAmB;AACnB,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG1F,iBAAiB;AACjB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,cAAc,CAAC;AAGtB,wCAAwC;AACxC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAQ5B,iBAAiB;AACjB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reputrans",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Zero-knowledge credential toolkit - issue, prove, and verify credentials without revealing private data",
5
5
  "license": "MIT",
6
6
  "private": false,