@lemmaoracle/seal 0.3.7 → 0.3.8
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/bits.d.ts.map +1 -1
- package/dist/bits.js +9 -6
- package/dist/bits.js.map +1 -1
- package/dist/proof.d.ts.map +1 -1
- package/dist/proof.js +5 -0
- package/dist/proof.js.map +1 -1
- package/package.json +3 -3
package/dist/bits.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bits.d.ts","sourceRoot":"","sources":["../src/bits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,QAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"bits.d.ts","sourceRoot":"","sources":["../src/bits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,QAAwB,CAAC;AAiBtD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,aAAa,CAAC,GAAG,CAO9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,KACnC,MAGsE,CAAC"}
|
package/dist/bits.js
CHANGED
|
@@ -11,6 +11,13 @@ export const SEAL_SECRET_BITS = SEAL_SECRET_BYTES * 8;
|
|
|
11
11
|
* order circomlib's SHA-256 gadget expects.
|
|
12
12
|
*/
|
|
13
13
|
const byteToBits = (byte) => Array.from({ length: 8 }, (_, i) => ((byte >> (7 - i)) & 1));
|
|
14
|
+
/** Raise a validation error at the API boundary. */
|
|
15
|
+
// imperative: pre-condition validation — no functional alternative for call-site abort
|
|
16
|
+
/* eslint-disable functional/no-throw-statements */
|
|
17
|
+
const raise = (message) => {
|
|
18
|
+
throw new Error(message);
|
|
19
|
+
};
|
|
20
|
+
/* eslint-enable functional/no-throw-statements */
|
|
14
21
|
/**
|
|
15
22
|
* Convert a raw secret string into the `keyBits` witness signal — the
|
|
16
23
|
* UTF-8 bytes of the secret, MSB-first per byte.
|
|
@@ -22,9 +29,7 @@ export const secretToBits = (secret) => {
|
|
|
22
29
|
const bytes = new TextEncoder().encode(secret);
|
|
23
30
|
return bytes.length === SEAL_SECRET_BYTES
|
|
24
31
|
? [...bytes].flatMap(byteToBits)
|
|
25
|
-
: (()
|
|
26
|
-
throw new Error(`seal: secret must be ${SEAL_SECRET_BYTES} bytes, got ${bytes.length}`);
|
|
27
|
-
})();
|
|
32
|
+
: raise(`seal: secret must be ${String(SEAL_SECRET_BYTES)} bytes, got ${String(bytes.length)}`);
|
|
28
33
|
};
|
|
29
34
|
/**
|
|
30
35
|
* Reassemble the circuit's 256-bit `keyHash` public output into the
|
|
@@ -32,7 +37,5 @@ export const secretToBits = (secret) => {
|
|
|
32
37
|
*/
|
|
33
38
|
export const hashBitsToHex = (bits) => bits.length === 256
|
|
34
39
|
? BigInt(`0b${bits.map(String).join("")}`).toString(16).padStart(64, "0")
|
|
35
|
-
: (
|
|
36
|
-
throw new Error(`seal: keyHash must be 256 bits, got ${bits.length}`);
|
|
37
|
-
})();
|
|
40
|
+
: raise(`seal: keyHash must be 256 bits, got ${String(bits.length)}`);
|
|
38
41
|
//# sourceMappingURL=bits.js.map
|
package/dist/bits.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bits.js","sourceRoot":"","sources":["../src/bits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,yEAAyE;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,qDAAqD;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,CAAC,CAAC;AAEtD;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAsB,EAAE,CACtD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAQ,CAAC,CAAC;AAE3E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAsB,EAAE;IACjE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,MAAM,KAAK,iBAAiB;QACvC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAChC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"bits.js","sourceRoot":"","sources":["../src/bits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,yEAAyE;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,qDAAqD;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,CAAC,CAAC;AAEtD;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAsB,EAAE,CACtD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAQ,CAAC,CAAC;AAE3E,oDAAoD;AACpD,uFAAuF;AACvF,mDAAmD;AACnD,MAAM,KAAK,GAAG,CAAC,OAAe,EAAS,EAAE;IACvC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC,CAAC;AACF,kDAAkD;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAsB,EAAE;IACjE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,MAAM,KAAK,iBAAiB;QACvC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAChC,CAAC,CAAC,KAAK,CACH,wBAAwB,MAAM,CAAC,iBAAiB,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CACvF,CAAC;AACR,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,IAAoC,EAC5B,EAAE,CACV,IAAI,CAAC,MAAM,KAAK,GAAG;IACjB,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACzE,CAAC,CAAC,KAAK,CAAC,uCAAuC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC"}
|
package/dist/proof.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../src/proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5D,2EAA2E;AAC3E,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAEpD,KAAK,YAAY,GAAG,QAAQ,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../src/proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5D,2EAA2E;AAC3E,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAEpD,KAAK,YAAY,GAAG,QAAQ,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAQnE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,KAAK,GAAU,OAAO,cAAc,KAAG,OAAO,CAAC,SAAS,CAmBpE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GACjB,OAAO,SAAS,KACf,OAAO,CAAC,YAAY,GAAG,IAAI,CAgB7B,CAAC"}
|
package/dist/proof.js
CHANGED
|
@@ -30,17 +30,21 @@ export const SEAL_CIRCUIT_ID = "seal-identity-v2.2";
|
|
|
30
30
|
* paths are required.
|
|
31
31
|
*/
|
|
32
32
|
export const prove = async (input) => {
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
|
33
34
|
const client = create({});
|
|
34
35
|
const witness = {
|
|
35
36
|
keyBits: secretToBits(input.secret).map(Number),
|
|
36
37
|
nonce: input.nonce,
|
|
37
38
|
};
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
38
40
|
const { proof, inputs } = await prover.prove(client, {
|
|
39
41
|
circuitId: SEAL_CIRCUIT_ID,
|
|
40
42
|
witness,
|
|
41
43
|
});
|
|
42
44
|
return {
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
43
46
|
proof: JSON.parse(atob(proof)),
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
44
48
|
publicSignals: inputs,
|
|
45
49
|
nullifier: inputs[0] ?? "",
|
|
46
50
|
};
|
|
@@ -52,6 +56,7 @@ export const prove = async (input) => {
|
|
|
52
56
|
* `null` if invalid. Delegates to `@lemmaoracle/sdk` verifier.
|
|
53
57
|
*/
|
|
54
58
|
export const verify = async (proof) => {
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
55
60
|
const { ok } = await verifier.verify({
|
|
56
61
|
alg: "groth16-bn254-snarkjs",
|
|
57
62
|
inputs: {
|
package/dist/proof.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof.js","sourceRoot":"","sources":["../src/proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"proof.js","sourceRoot":"","sources":["../src/proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAUpD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,KAAqB,EAAsB,EAAE;IACvE,sGAAsG;IACtG,MAAM,MAAM,GAAc,MAAM,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/C,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;IACF,kJAAkJ;IAClJ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAmB,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;QACnE,SAAS,EAAE,eAAe;QAC1B,OAAO;KACR,CAAC,CAAC;IACH,OAAO;QACL,mEAAmE;QACnE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QACxC,mEAAmE;QACnE,aAAa,EAAE,MAAM;QACrB,SAAS,EAAG,MAAwB,CAAC,CAAC,CAAC,IAAI,EAAE;KAC9C,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EACzB,KAAgB,EACc,EAAE;IAChC,kJAAkJ;IAClJ,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACnC,GAAG,EAAE,uBAAuB;QAC5B,MAAM,EAAE;YACN,IAAI;YACJ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC;KACF,CAAC,CAAC;IACH,OAAO,EAAE;QACP,CAAC,CAAC;YACE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE;YACvC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE;SACpC;QACH,CAAC,CAAC,IAAI,CAAC;AACX,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lemmaoracle/seal",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"description": "Seal — ZK auth circuit for Lemma dashboard Proof-based sign-in. Proves knowledge of a secret pre-image without revealing the secret or its hash (v2: Poseidon nullifier).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"sign-in"
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@lemmaoracle/sdk": "^0.0.
|
|
42
|
-
"@lemmaoracle/spec": "^0.0.
|
|
41
|
+
"@lemmaoracle/sdk": "^0.0.39",
|
|
42
|
+
"@lemmaoracle/spec": "^0.0.37"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/snarkjs": "^0.7.9",
|