reputrans 0.1.0

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 (94) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -0
  3. package/circuits/composite/target/composite.json +1 -0
  4. package/circuits/field_disclosure/target/field_disclosure.json +1 -0
  5. package/circuits/map_to_curve/target/map_to_curve.json +1 -0
  6. package/circuits/poseidon_compat/target/poseidon_compat.json +1 -0
  7. package/circuits/range_proof/target/range_proof.json +1 -0
  8. package/circuits/set_membership/target/set_membership.json +1 -0
  9. package/circuits/signature_verify/target/signature_verify.json +1 -0
  10. package/dist/cli/src/auto-detect.d.ts +9 -0
  11. package/dist/cli/src/auto-detect.d.ts.map +1 -0
  12. package/dist/cli/src/auto-detect.js +21 -0
  13. package/dist/cli/src/auto-detect.js.map +1 -0
  14. package/dist/cli/src/commands/inspect.d.ts +6 -0
  15. package/dist/cli/src/commands/inspect.d.ts.map +1 -0
  16. package/dist/cli/src/commands/inspect.js +43 -0
  17. package/dist/cli/src/commands/inspect.js.map +1 -0
  18. package/dist/cli/src/commands/issue.d.ts +8 -0
  19. package/dist/cli/src/commands/issue.d.ts.map +1 -0
  20. package/dist/cli/src/commands/issue.js +107 -0
  21. package/dist/cli/src/commands/issue.js.map +1 -0
  22. package/dist/cli/src/commands/keygen.d.ts +7 -0
  23. package/dist/cli/src/commands/keygen.d.ts.map +1 -0
  24. package/dist/cli/src/commands/keygen.js +39 -0
  25. package/dist/cli/src/commands/keygen.js.map +1 -0
  26. package/dist/cli/src/commands/prove.d.ts +9 -0
  27. package/dist/cli/src/commands/prove.d.ts.map +1 -0
  28. package/dist/cli/src/commands/prove.js +139 -0
  29. package/dist/cli/src/commands/prove.js.map +1 -0
  30. package/dist/cli/src/commands/verify.d.ts +6 -0
  31. package/dist/cli/src/commands/verify.d.ts.map +1 -0
  32. package/dist/cli/src/commands/verify.js +63 -0
  33. package/dist/cli/src/commands/verify.js.map +1 -0
  34. package/dist/cli/src/index.d.ts +3 -0
  35. package/dist/cli/src/index.d.ts.map +1 -0
  36. package/dist/cli/src/index.js +45 -0
  37. package/dist/cli/src/index.js.map +1 -0
  38. package/dist/sdk/src/circuit-loader.d.ts +19 -0
  39. package/dist/sdk/src/circuit-loader.d.ts.map +1 -0
  40. package/dist/sdk/src/circuit-loader.js +65 -0
  41. package/dist/sdk/src/circuit-loader.js.map +1 -0
  42. package/dist/sdk/src/eddsa.d.ts +63 -0
  43. package/dist/sdk/src/eddsa.d.ts.map +1 -0
  44. package/dist/sdk/src/eddsa.js +177 -0
  45. package/dist/sdk/src/eddsa.js.map +1 -0
  46. package/dist/sdk/src/encoder.d.ts +49 -0
  47. package/dist/sdk/src/encoder.d.ts.map +1 -0
  48. package/dist/sdk/src/encoder.js +117 -0
  49. package/dist/sdk/src/encoder.js.map +1 -0
  50. package/dist/sdk/src/identity.d.ts +69 -0
  51. package/dist/sdk/src/identity.d.ts.map +1 -0
  52. package/dist/sdk/src/identity.js +110 -0
  53. package/dist/sdk/src/identity.js.map +1 -0
  54. package/dist/sdk/src/index.d.ts +18 -0
  55. package/dist/sdk/src/index.d.ts.map +1 -0
  56. package/dist/sdk/src/index.js +18 -0
  57. package/dist/sdk/src/index.js.map +1 -0
  58. package/dist/sdk/src/poseidon.d.ts +33 -0
  59. package/dist/sdk/src/poseidon.d.ts.map +1 -0
  60. package/dist/sdk/src/poseidon.js +59 -0
  61. package/dist/sdk/src/poseidon.js.map +1 -0
  62. package/dist/sdk/src/proof-request.d.ts +58 -0
  63. package/dist/sdk/src/proof-request.d.ts.map +1 -0
  64. package/dist/sdk/src/proof-request.js +68 -0
  65. package/dist/sdk/src/proof-request.js.map +1 -0
  66. package/dist/sdk/src/prover.d.ts +38 -0
  67. package/dist/sdk/src/prover.d.ts.map +1 -0
  68. package/dist/sdk/src/prover.js +108 -0
  69. package/dist/sdk/src/prover.js.map +1 -0
  70. package/dist/sdk/src/vc-parser.d.ts +50 -0
  71. package/dist/sdk/src/vc-parser.d.ts.map +1 -0
  72. package/dist/sdk/src/vc-parser.js +96 -0
  73. package/dist/sdk/src/vc-parser.js.map +1 -0
  74. package/dist/sdk/src/verifier.d.ts +19 -0
  75. package/dist/sdk/src/verifier.d.ts.map +1 -0
  76. package/dist/sdk/src/verifier.js +31 -0
  77. package/dist/sdk/src/verifier.js.map +1 -0
  78. package/dist/verifier/src/did-resolver.d.ts +36 -0
  79. package/dist/verifier/src/did-resolver.d.ts.map +1 -0
  80. package/dist/verifier/src/did-resolver.js +179 -0
  81. package/dist/verifier/src/did-resolver.js.map +1 -0
  82. package/dist/verifier/src/index.d.ts +2 -0
  83. package/dist/verifier/src/index.d.ts.map +1 -0
  84. package/dist/verifier/src/index.js +9 -0
  85. package/dist/verifier/src/index.js.map +1 -0
  86. package/dist/verifier/src/server.d.ts +6 -0
  87. package/dist/verifier/src/server.d.ts.map +1 -0
  88. package/dist/verifier/src/server.js +75 -0
  89. package/dist/verifier/src/server.js.map +1 -0
  90. package/dist/verifier/src/verify.d.ts +20 -0
  91. package/dist/verifier/src/verify.d.ts.map +1 -0
  92. package/dist/verifier/src/verify.js +97 -0
  93. package/dist/verifier/src/verify.js.map +1 -0
  94. package/package.json +41 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Find the most recent file matching a glob pattern in the current directory.
3
+ * Returns the full path, or null if none found.
4
+ */
5
+ export declare function findFile(pattern: RegExp, dir?: string): Promise<string | null>;
6
+ export declare function findKeyFile(dir?: string): Promise<string | null>;
7
+ export declare function findCredentialFile(dir?: string): Promise<string | null>;
8
+ export declare function findProofFile(dir?: string): Promise<string | null>;
9
+ //# sourceMappingURL=auto-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-detect.d.ts","sourceRoot":"","sources":["../../../cli/src/auto-detect.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIjF;AAED,wBAAsB,WAAW,CAAC,GAAG,SAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEnE;AAED,wBAAsB,kBAAkB,CAAC,GAAG,SAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE1E;AAED,wBAAsB,aAAa,CAAC,GAAG,SAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAErE"}
@@ -0,0 +1,21 @@
1
+ import { readdir } from 'fs/promises';
2
+ import { resolve } from 'path';
3
+ /**
4
+ * Find the most recent file matching a glob pattern in the current directory.
5
+ * Returns the full path, or null if none found.
6
+ */
7
+ export async function findFile(pattern, dir = '.') {
8
+ const entries = await readdir(resolve(dir));
9
+ const matches = entries.filter((f) => pattern.test(f)).sort().reverse();
10
+ return matches.length > 0 ? resolve(dir, matches[0]) : null;
11
+ }
12
+ export async function findKeyFile(dir = '.') {
13
+ return findFile(/-key\.json$/, dir);
14
+ }
15
+ export async function findCredentialFile(dir = '.') {
16
+ return findFile(/^credential-.*\.json$/, dir);
17
+ }
18
+ export async function findProofFile(dir = '.') {
19
+ return findFile(/^proof-.*\.json$/, dir);
20
+ }
21
+ //# sourceMappingURL=auto-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-detect.js","sourceRoot":"","sources":["../../../cli/src/auto-detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,GAAG,GAAG,GAAG;IACvD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACxE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAG,GAAG,GAAG;IACzC,OAAO,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAG,GAAG,GAAG;IAChD,OAAO,QAAQ,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAG,GAAG,GAAG;IAC3C,OAAO,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface InspectOptions {
2
+ credential?: string;
3
+ }
4
+ export declare function inspect(opts: InspectOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/inspect.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CjE"}
@@ -0,0 +1,43 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { resolve } from 'path';
3
+ import { findCredentialFile } from '../auto-detect.js';
4
+ export async function inspect(opts) {
5
+ let credPath = opts.credential;
6
+ if (!credPath) {
7
+ const found = await findCredentialFile();
8
+ if (!found) {
9
+ console.error('No credential file found. Run "npx tsx cli/src/index.ts issue" first.');
10
+ process.exit(1);
11
+ }
12
+ credPath = found;
13
+ console.log(`Using credential: ${credPath}`);
14
+ }
15
+ const raw = await readFile(resolve(credPath), 'utf-8');
16
+ const cred = JSON.parse(raw);
17
+ console.log(`\nREPUTRANS Credential (v${cred.version})`);
18
+ console.log(` Issuer: ${cred.issuer.name || 'unknown'}`);
19
+ console.log(` Issued: ${cred.issuedAt || 'unknown'}`);
20
+ console.log(` Merkle root: ${cred.merkle.root.slice(0, 20)}...`);
21
+ console.log();
22
+ console.log('Fields:');
23
+ const claims = cred.claims;
24
+ const sortedKeys = Object.keys(claims).sort();
25
+ for (let i = 0; i < sortedKeys.length; i++) {
26
+ const key = sortedKeys[i];
27
+ const value = claims[key];
28
+ const isNumeric = /^-?\d+(\.\d+)?$/.test(value);
29
+ const proofTypes = ['disclose'];
30
+ if (isNumeric)
31
+ proofTypes.push('range (gte, lte)');
32
+ console.log(` [${i}] ${key} = "${value}"`);
33
+ console.log(` Proof types: ${proofTypes.join(', ')}`);
34
+ }
35
+ console.log();
36
+ console.log('Next:');
37
+ console.log(` npx tsx cli/src/index.ts prove --disclose ${sortedKeys[0]}`);
38
+ if (sortedKeys.some((k) => /^-?\d+(\.\d+)?$/.test(claims[k]))) {
39
+ const numericKey = sortedKeys.find((k) => /^-?\d+(\.\d+)?$/.test(claims[k]));
40
+ console.log(` npx tsx cli/src/index.ts prove --range ${numericKey}:gte:${claims[numericKey]}`);
41
+ }
42
+ }
43
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../../cli/src/commands/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface IssueOptions {
2
+ key?: string;
3
+ claims?: string;
4
+ out?: string;
5
+ }
6
+ export declare function issue(opts: IssueOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=issue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/issue.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AASD,wBAAsB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmG7D"}
@@ -0,0 +1,107 @@
1
+ import { readFile, writeFile } from 'fs/promises';
2
+ import { resolve } from 'path';
3
+ import { sign } from '../../../sdk/src/eddsa.js';
4
+ import { encodeCredential } from '../../../sdk/src/encoder.js';
5
+ import { findKeyFile } from '../auto-detect.js';
6
+ const EXAMPLE_CLAIMS = {
7
+ name: 'Alice',
8
+ field_of_study: 'Computer Science',
9
+ graduation_year: '2025',
10
+ gpa: '3.8',
11
+ };
12
+ export async function issue(opts) {
13
+ // Auto-detect key file
14
+ let keyPath = opts.key;
15
+ if (!keyPath) {
16
+ const found = await findKeyFile();
17
+ if (!found) {
18
+ console.error('No key file found. Run "npx tsx cli/src/index.ts keygen" first.');
19
+ process.exit(1);
20
+ }
21
+ keyPath = found;
22
+ console.log(`Using key: ${keyPath}`);
23
+ }
24
+ // Load issuer key
25
+ const keyRaw = await readFile(resolve(keyPath), 'utf-8');
26
+ const keyData = JSON.parse(keyRaw);
27
+ const privateKey = BigInt(keyData.privateKey);
28
+ // Parse claims - inline JSON, file path, or use example
29
+ let claims;
30
+ if (!opts.claims) {
31
+ claims = EXAMPLE_CLAIMS;
32
+ console.log('No --claims provided, using example credential:');
33
+ console.log(` ${JSON.stringify(claims)}`);
34
+ console.log();
35
+ }
36
+ else if (opts.claims.startsWith('{')) {
37
+ try {
38
+ claims = JSON.parse(opts.claims);
39
+ }
40
+ catch {
41
+ // PowerShell strips quotes from JSON - try to fix common mangling
42
+ const fixed = opts.claims.replace(/([{,])\s*([a-zA-Z_]\w*)\s*:/g, '$1"$2":').replace(/:([^",{}\[\]]+)([,}])/g, ':"$1"$2');
43
+ try {
44
+ claims = JSON.parse(fixed);
45
+ }
46
+ catch {
47
+ console.error('Invalid JSON in --claims. Use a file instead:');
48
+ console.error(' echo \'{"role":"engineer"}\' > claims.json');
49
+ console.error(' npx tsx cli/src/index.ts issue --claims claims.json');
50
+ process.exit(1);
51
+ }
52
+ }
53
+ }
54
+ else {
55
+ const claimsRaw = await readFile(resolve(opts.claims), 'utf-8');
56
+ claims = JSON.parse(claimsRaw);
57
+ }
58
+ // Ensure all values are strings
59
+ for (const [k, v] of Object.entries(claims)) {
60
+ if (typeof v !== 'string') {
61
+ claims[k] = String(v);
62
+ }
63
+ }
64
+ // Encode into Merkle tree
65
+ const encoded = encodeCredential(claims);
66
+ // Sign the Merkle root
67
+ const { signature, publicKey } = sign(privateKey, encoded.merkleRoot);
68
+ const credential = {
69
+ version: '1.0',
70
+ issuer: {
71
+ name: keyData.name,
72
+ publicKey: {
73
+ x: publicKey.x.toString(),
74
+ y: publicKey.y.toString(),
75
+ },
76
+ },
77
+ claims,
78
+ merkle: {
79
+ root: encoded.merkleRoot.toString(),
80
+ fieldNames: encoded.fieldNames,
81
+ fieldValues: encoded.fieldValues.map(String),
82
+ paths: encoded.merklePaths.map((p) => ({
83
+ siblings: p.siblings.map(String),
84
+ indices: p.indices,
85
+ })),
86
+ },
87
+ signature: {
88
+ r8: {
89
+ x: signature.r8.x.toString(),
90
+ y: signature.r8.y.toString(),
91
+ },
92
+ s: signature.s.toString(),
93
+ },
94
+ issuedAt: new Date().toISOString(),
95
+ };
96
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
97
+ const outPath = opts.out
98
+ ? resolve(opts.out)
99
+ : resolve(`credential-${timestamp}.json`);
100
+ await writeFile(outPath, JSON.stringify(credential, null, 2));
101
+ const fieldNames = Object.keys(claims).sort();
102
+ console.log(`Credential issued by "${keyData.name}"`);
103
+ console.log(` Fields: ${fieldNames.join(', ')}`);
104
+ console.log(` Saved to: ${outPath}`);
105
+ console.log(`\nNext: npx tsx cli/src/index.ts inspect`);
106
+ }
107
+ //# sourceMappingURL=issue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../../cli/src/commands/issue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface KeygenOptions {
2
+ name: string;
3
+ out?: string;
4
+ }
5
+ export declare function keygen(opts: KeygenOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=keygen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keygen.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/keygen.ts"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC/D"}
@@ -0,0 +1,39 @@
1
+ import { writeFile, chmod } from 'fs/promises';
2
+ import { resolve } from 'path';
3
+ import { getPublicKey } from '../../../sdk/src/eddsa.js';
4
+ import { BN254_FIELD_ORDER } from '../../../sdk/src/poseidon.js';
5
+ export async function keygen(opts) {
6
+ const name = opts.name || 'issuer';
7
+ // Generate a random BN254 field element as private key
8
+ const bytes = new Uint8Array(32);
9
+ crypto.getRandomValues(bytes);
10
+ let privateKey = 0n;
11
+ for (const b of bytes)
12
+ privateKey = (privateKey << 8n) | BigInt(b);
13
+ privateKey = privateKey % BN254_FIELD_ORDER;
14
+ // Derive public key
15
+ const publicKey = getPublicKey(privateKey);
16
+ const keyData = {
17
+ version: '1.0',
18
+ name,
19
+ privateKey: privateKey.toString(),
20
+ publicKey: {
21
+ x: publicKey.x.toString(),
22
+ y: publicKey.y.toString(),
23
+ },
24
+ createdAt: new Date().toISOString(),
25
+ };
26
+ const filename = `${name.toLowerCase().replace(/[^a-z0-9]/g, '-')}-key.json`;
27
+ const outPath = opts.out ? resolve(opts.out) : resolve(filename);
28
+ await writeFile(outPath, JSON.stringify(keyData, null, 2));
29
+ // Restrict key file permissions (owner-only read/write)
30
+ if (process.platform !== 'win32') {
31
+ await chmod(outPath, 0o600);
32
+ }
33
+ console.log(`Keypair generated for "${name}"`);
34
+ console.log(` Saved to: ${outPath}`);
35
+ console.log(` Public key X: ${publicKey.x.toString().slice(0, 20)}...`);
36
+ console.log(` Public key Y: ${publicKey.y.toString().slice(0, 20)}...`);
37
+ console.log(`\nNext: npx tsx cli/src/index.ts issue --claims '{"field":"value"}'`);
38
+ }
39
+ //# sourceMappingURL=keygen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keygen.js","sourceRoot":"","sources":["../../../../cli/src/commands/keygen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAOjE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAmB;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC;IAEnC,uDAAuD;IACvD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,UAAU,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnE,UAAU,GAAG,UAAU,GAAG,iBAAiB,CAAC;IAE5C,oBAAoB;IACpB,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,KAAK;QACd,IAAI;QACJ,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;QACjC,SAAS,EAAE;YACT,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;YACzB,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC1B;QACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjE,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,wDAAwD;IACxD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;AACrF,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface ProveOptions {
2
+ credential?: string;
3
+ disclose?: string;
4
+ range?: string;
5
+ out?: string;
6
+ }
7
+ export declare function prove(opts: ProveOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=prove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prove.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/prove.ts"],"names":[],"mappings":"AAKA,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8J7D"}
@@ -0,0 +1,139 @@
1
+ import { readFile, writeFile } from 'fs/promises';
2
+ import { resolve } from 'path';
3
+ import { loadCircuit } from '../../../sdk/src/circuit-loader.js';
4
+ import { findCredentialFile } from '../auto-detect.js';
5
+ export async function prove(opts) {
6
+ // Auto-detect credential
7
+ let credPath = opts.credential;
8
+ if (!credPath) {
9
+ const found = await findCredentialFile();
10
+ if (!found) {
11
+ console.error('No credential file found. Run "npx tsx cli/src/index.ts issue" first.');
12
+ process.exit(1);
13
+ }
14
+ credPath = found;
15
+ console.log(`Using credential: ${credPath}`);
16
+ }
17
+ if (!opts.disclose && !opts.range) {
18
+ console.error('Specify what to prove:');
19
+ console.error(' --disclose field_name Reveal a specific field');
20
+ console.error(' --range field:gte:threshold Prove a field meets a threshold');
21
+ console.error('\nRun "npx tsx cli/src/index.ts inspect" to see available fields.');
22
+ process.exit(1);
23
+ }
24
+ // Load credential
25
+ const raw = await readFile(resolve(credPath), 'utf-8');
26
+ const cred = JSON.parse(raw);
27
+ // Parse disclose field
28
+ const disclosedFieldName = opts.disclose || '';
29
+ const disclosedIdx = cred.merkle.fieldNames.indexOf(disclosedFieldName);
30
+ if (opts.disclose && disclosedIdx < 0) {
31
+ const available = cred.merkle.fieldNames.filter((n) => n !== '');
32
+ console.error(`Field "${disclosedFieldName}" not found. Available: ${available.join(', ')}`);
33
+ process.exit(1);
34
+ }
35
+ // Parse range spec
36
+ let rangeFieldName = '';
37
+ let rangeIdx = 0;
38
+ let rangeThreshold = '0';
39
+ let rangeComparisonType = '0'; // 0=gte, 1=lte
40
+ if (opts.range) {
41
+ const parts = opts.range.split(':');
42
+ if (parts.length !== 3) {
43
+ console.error('Range format: field:operator:threshold (e.g. gpa:gte:3)');
44
+ process.exit(1);
45
+ }
46
+ rangeFieldName = parts[0];
47
+ const operator = parts[1];
48
+ rangeThreshold = parts[2];
49
+ rangeIdx = cred.merkle.fieldNames.indexOf(rangeFieldName);
50
+ if (rangeIdx < 0) {
51
+ const available = cred.merkle.fieldNames.filter((n) => n !== '');
52
+ console.error(`Field "${rangeFieldName}" not found. Available: ${available.join(', ')}`);
53
+ process.exit(1);
54
+ }
55
+ rangeComparisonType = operator === 'lte' ? '1' : '0';
56
+ }
57
+ // If no disclose specified but range is, use the range field index for disclosure too
58
+ const effectiveDisclosedIdx = opts.disclose ? disclosedIdx : rangeIdx;
59
+ console.log('Loading circuit...');
60
+ const circuit = await loadCircuit('composite');
61
+ console.log('Initializing proof system...');
62
+ const { Noir } = await import('@noir-lang/noir_js');
63
+ const { BarretenbergBackend } = await import('@noir-lang/backend_barretenberg');
64
+ const backend = new BarretenbergBackend(circuit);
65
+ const noir = new Noir(circuit);
66
+ // Build circuit inputs from credential data
67
+ const inputs = {
68
+ // Signature verification
69
+ pub_key_x: cred.issuer.publicKey.x,
70
+ pub_key_y: cred.issuer.publicKey.y,
71
+ signature_r8_x: cred.signature.r8.x,
72
+ signature_r8_y: cred.signature.r8.y,
73
+ signature_s: cred.signature.s,
74
+ msg: cred.merkle.root,
75
+ // Field disclosure
76
+ credential_root: cred.merkle.root,
77
+ disclosed_field_value: cred.merkle.fieldValues[effectiveDisclosedIdx],
78
+ disclosed_field_index: effectiveDisclosedIdx.toString(),
79
+ disclosed_merkle_path: cred.merkle.paths[effectiveDisclosedIdx].siblings,
80
+ disclosed_path_indices: cred.merkle.paths[effectiveDisclosedIdx].indices.map(String),
81
+ // Range proof - when no range requested, use a padded zero leaf (index 15)
82
+ // so the Merkle check passes and range check is 0 >= 0 = trivially true
83
+ range_field_value: opts.range ? cred.merkle.fieldValues[rangeIdx] : cred.merkle.fieldValues[15],
84
+ range_field_index: opts.range ? rangeIdx.toString() : '15',
85
+ range_merkle_path: opts.range
86
+ ? cred.merkle.paths[rangeIdx].siblings
87
+ : cred.merkle.paths[15].siblings,
88
+ range_path_indices: opts.range
89
+ ? cred.merkle.paths[rangeIdx].indices.map(String)
90
+ : cred.merkle.paths[15].indices.map(String),
91
+ range_threshold: rangeThreshold,
92
+ range_comparison_type: rangeComparisonType,
93
+ };
94
+ console.log('Generating ZK proof (this takes 10-40 seconds)...');
95
+ const startTime = Date.now();
96
+ const { witness } = await noir.execute(inputs);
97
+ const proof = await backend.generateProof(witness);
98
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
99
+ console.log(`Proof generated in ${elapsed}s`);
100
+ // Build proof output
101
+ const proofHex = '0x' + Array.from(proof.proof).map((b) => b.toString(16).padStart(2, '0')).join('');
102
+ const disclosed = {};
103
+ if (opts.disclose) {
104
+ disclosed[disclosedFieldName] = cred.claims[disclosedFieldName];
105
+ }
106
+ const proofOutput = {
107
+ version: '1.0',
108
+ circuit: 'composite',
109
+ proof: proofHex,
110
+ publicInputs: proof.publicInputs,
111
+ issuer: {
112
+ name: cred.issuer.name,
113
+ publicKey: cred.issuer.publicKey,
114
+ },
115
+ disclosed,
116
+ generatedAt: new Date().toISOString(),
117
+ generationTimeMs: Date.now() - startTime,
118
+ };
119
+ if (opts.range) {
120
+ proofOutput.range = {
121
+ field: rangeFieldName,
122
+ operator: rangeComparisonType === '0' ? 'gte' : 'lte',
123
+ threshold: rangeThreshold,
124
+ };
125
+ }
126
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
127
+ const outPath = opts.out ? resolve(opts.out) : resolve(`proof-${timestamp}.json`);
128
+ await writeFile(outPath, JSON.stringify(proofOutput, null, 2));
129
+ await backend.destroy?.();
130
+ console.log(`\nProof saved: ${outPath}`);
131
+ if (opts.disclose) {
132
+ console.log(` Disclosed: ${disclosedFieldName} = "${cred.claims[disclosedFieldName]}"`);
133
+ }
134
+ if (opts.range) {
135
+ console.log(` Range: ${rangeFieldName} ${rangeComparisonType === '0' ? '>=' : '<='} ${rangeThreshold}`);
136
+ }
137
+ console.log(`\nNext: npx tsx cli/src/index.ts verify`);
138
+ }
139
+ //# sourceMappingURL=prove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prove.js","sourceRoot":"","sources":["../../../../cli/src/commands/prove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AASvD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAkB;IAC5C,yBAAyB;IACzB,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;IAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,QAAQ,GAAG,KAAK,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7B,uBAAuB;IACvB,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACxE,IAAI,IAAI,CAAC,QAAQ,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,UAAU,kBAAkB,2BAA2B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,cAAc,GAAG,GAAG,CAAC;IACzB,IAAI,mBAAmB,GAAG,GAAG,CAAC,CAAC,eAAe;IAE9C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1B,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,KAAK,CAAC,UAAU,cAAc,2BAA2B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,mBAAmB,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,CAAC;IAED,sFAAsF;IACtF,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAEhF,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,OAAc,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAc,CAAC,CAAC;IAEtC,4CAA4C;IAC5C,MAAM,MAAM,GAAsC;QAChD,yBAAyB;QACzB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QAErB,mBAAmB;QACnB,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACjC,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC;QACrE,qBAAqB,EAAE,qBAAqB,CAAC,QAAQ,EAAE;QACvD,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ;QACxE,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAEpF,2EAA2E;QAC3E,wEAAwE;QACxE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/F,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QAC1D,iBAAiB,EAAE,IAAI,CAAC,KAAK;YAC3B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ;YACtC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ;QAClC,kBAAkB,EAAE,IAAI,CAAC,KAAK;YAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAC7C,eAAe,EAAE,cAAc;QAC/B,qBAAqB,EAAE,mBAAmB;KAC3C,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,GAAG,CAAC,CAAC;IAE9C,qBAAqB;IACrB,MAAM,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAErG,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,WAAW,GAA4B;QAC3C,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,MAAM,EAAE;YACN,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SACjC;QACD,SAAS;QACT,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;KACzC,CAAC;IAEF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,GAAG;YAClB,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,mBAAmB,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;YACrD,SAAS,EAAE,cAAc;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,SAAS,OAAO,CAAC,CAAC;IAElF,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/D,MAAO,OAAe,CAAC,OAAO,EAAE,EAAE,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,kBAAkB,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,YAAY,cAAc,IAAI,mBAAmB,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface VerifyOptions {
2
+ proof?: string;
3
+ }
4
+ export declare function verify(opts: VerifyOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/verify.ts"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE/D"}
@@ -0,0 +1,63 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { resolve } from 'path';
3
+ import { loadCircuit } from '../../../sdk/src/circuit-loader.js';
4
+ import { findProofFile } from '../auto-detect.js';
5
+ export async function verify(opts) {
6
+ // Auto-detect proof file
7
+ let proofPath = opts.proof;
8
+ if (!proofPath) {
9
+ const found = await findProofFile();
10
+ if (!found) {
11
+ console.error('No proof file found. Run "npx tsx cli/src/index.ts prove" first.');
12
+ process.exit(1);
13
+ }
14
+ proofPath = found;
15
+ console.log(`Using proof: ${proofPath}`);
16
+ }
17
+ // Load proof
18
+ const raw = await readFile(resolve(proofPath), 'utf-8');
19
+ const proofData = JSON.parse(raw);
20
+ console.log('Loading circuit...');
21
+ const circuit = await loadCircuit(proofData.circuit || 'composite');
22
+ console.log('Verifying proof...');
23
+ const { BarretenbergBackend } = await import('@noir-lang/backend_barretenberg');
24
+ const backend = new BarretenbergBackend(circuit);
25
+ // Decode proof hex to Uint8Array
26
+ const proofHex = proofData.proof.startsWith('0x')
27
+ ? proofData.proof.slice(2)
28
+ : proofData.proof;
29
+ const proofBytes = Uint8Array.from(proofHex.match(/.{2}/g).map((b) => parseInt(b, 16)));
30
+ let valid;
31
+ try {
32
+ valid = await backend.verifyProof({
33
+ proof: proofBytes,
34
+ publicInputs: proofData.publicInputs,
35
+ });
36
+ }
37
+ catch {
38
+ valid = false;
39
+ }
40
+ 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}"`);
49
+ }
50
+ }
51
+ if (proofData.range) {
52
+ const op = proofData.range.operator === 'gte' ? '>=' : '<=';
53
+ console.log(` Range proof: ${proofData.range.field} ${op} ${proofData.range.threshold} PASSED`);
54
+ }
55
+ console.log(` Generated: ${proofData.generatedAt || 'unknown'}`);
56
+ }
57
+ else {
58
+ console.log('\nProof INVALID');
59
+ console.log('The proof does not verify. The credential may have been tampered with.');
60
+ process.exit(1);
61
+ }
62
+ }
63
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../../cli/src/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMlD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAmB;IAC9C,yBAAyB;IACzB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,SAAS,GAAG,KAAK,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa;IACb,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,OAAO,IAAI,WAAW,CAAC,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,OAAc,CAAC,CAAC;IAExD,iCAAiC;IACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAC/C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;IACpB,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAChC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAC7D,CAAC;IAEF,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;YAChC,KAAK,EAAE,UAAU;YACjB,YAAY,EAAE,SAAS,CAAC,YAAY;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,MAAO,OAAe,CAAC,OAAO,EAAE,EAAE,CAAC;IAEnC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,CAAC,MAAM,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;QAEhE,IAAI,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,KAAK,GAAG,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,CAAC;QACnG,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../cli/src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { keygen } from './commands/keygen.js';
4
+ import { issue } from './commands/issue.js';
5
+ import { inspect } from './commands/inspect.js';
6
+ import { prove } from './commands/prove.js';
7
+ import { verify } from './commands/verify.js';
8
+ const program = new Command();
9
+ program
10
+ .name('reputrans')
11
+ .description('Zero-knowledge credential toolkit - issue, prove, and verify credentials without revealing private data')
12
+ .version('0.1.0');
13
+ program
14
+ .command('keygen')
15
+ .description('Generate an issuer keypair')
16
+ .option('--name <name>', 'Issuer name', 'issuer')
17
+ .option('--out <path>', 'Output file path')
18
+ .action(keygen);
19
+ program
20
+ .command('issue')
21
+ .description('Sign claims into a verifiable credential')
22
+ .option('--key <path>', 'Path to issuer key JSON (auto-detects *-key.json in current dir)')
23
+ .option('--claims <json>', 'Claims as JSON string or path to JSON file')
24
+ .option('--out <path>', 'Output credential path')
25
+ .action(issue);
26
+ program
27
+ .command('inspect')
28
+ .description('Show credential fields and available proof types')
29
+ .option('--credential <path>', 'Path to credential JSON (auto-detects credential-*.json)')
30
+ .action(inspect);
31
+ program
32
+ .command('prove')
33
+ .description('Generate a ZK proof of selected credential fields')
34
+ .option('--credential <path>', 'Path to credential JSON (auto-detects credential-*.json)')
35
+ .option('--disclose <fields>', 'Comma-separated field names to disclose')
36
+ .option('--range <spec>', 'Range proof: field:operator:threshold (e.g. gpa:gte:3.0)')
37
+ .option('--out <path>', 'Output proof path')
38
+ .action(prove);
39
+ program
40
+ .command('verify')
41
+ .description('Verify a ZK proof')
42
+ .option('--proof <path>', 'Path to proof JSON (auto-detects proof-*.json)')
43
+ .action(verify);
44
+ program.parse();
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Circuit artifact loader for REPUTRANS.
3
+ *
4
+ * Loads compiled Noir ACIR artifacts from the filesystem.
5
+ * Works in Node.js only (uses fs). For browser usage, load
6
+ * the JSON via fetch and pass directly to createProver/createVerifier.
7
+ */
8
+ import type { CompiledCircuit } from './prover.js';
9
+ export type CircuitName = 'composite' | 'field_disclosure' | 'range_proof' | 'set_membership' | 'signature_verify' | 'poseidon_compat' | 'map_to_curve';
10
+ /**
11
+ * Load a compiled circuit artifact by name.
12
+ *
13
+ * @param name - Circuit name (must match the directory and JSON filename)
14
+ * @param circuitsDir - Override the circuits directory path. Defaults to
15
+ * the monorepo's circuits/ directory relative to this file, or the
16
+ * REPUTRANS_CIRCUITS_DIR environment variable.
17
+ */
18
+ export declare function loadCircuit(name: CircuitName | string, circuitsDir?: string): Promise<CompiledCircuit>;
19
+ //# sourceMappingURL=circuit-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-loader.d.ts","sourceRoot":"","sources":["../../../sdk/src/circuit-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA0BnD,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,kBAAkB,GAClB,aAAa,GACb,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,cAAc,CAAC;AAEnB;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,GAAG,MAAM,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC,CA8B1B"}