From d4b0930f190c08f2effb36d19a20cf212c153392 Mon Sep 17 00:00:00 2001 From: lonerapier Date: Wed, 15 Jan 2025 18:04:26 +0530 Subject: [PATCH 1/8] add multi-packet ciphertext support --- circuits/chacha20/authentication.circom | 7 +- circuits/http/verification.circom | 3 +- circuits/test/common/index.ts | 28 +++++- circuits/test/full/full.test.ts | 122 +++++++++++++++++++++++- package-lock.json | 89 ++++++++++------- package.json | 3 +- 6 files changed, 208 insertions(+), 44 deletions(-) diff --git a/circuits/chacha20/authentication.circom b/circuits/chacha20/authentication.circom index 973feef..e7a45fa 100644 --- a/circuits/chacha20/authentication.circom +++ b/circuits/chacha20/authentication.circom @@ -149,8 +149,9 @@ template PlaintextAuthentication(DATA_BYTES) { // Sets any padding bytes to zero (which are presumably at the end) so they don't accum into the poly hash zeroed_plaintext[i] <== (1 - isPadding[i]) * plaintext[i]; } - signal plaintext_digest <== PolynomialDigest(DATA_BYTES)(zeroed_plaintext, ciphertext_digest); - signal plaintext_digest_hashed <== Poseidon(1)([plaintext_digest]); + // signal plaintext_digest <== PolynomialDigest(DATA_BYTES)(zeroed_plaintext, ciphertext_digest); + // signal plaintext_digest_hashed <== Poseidon(1)([plaintext_digest]); // TODO: I'm not sure we need to subtract the CT digest - step_out[0] <== step_in[0] - ciphertext_digest + plaintext_digest_hashed; + step_out[0] <== step_in[0] - ciphertext_digest; + // + plaintext_digest_hashed; } \ No newline at end of file diff --git a/circuits/http/verification.circom b/circuits/http/verification.circom index 6c53dc4..70bcf4e 100644 --- a/circuits/http/verification.circom +++ b/circuits/http/verification.circom @@ -118,5 +118,6 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS) { accumulated_main_digests_hashed += main_digests_hashed[i]; } - step_out[0] <== step_in[0] + body_digest_hashed - accumulated_main_digests_hashed - data_digest_hashed; // TODO: data_digest is really plaintext_digest from before, consider changing names + step_out[0] <== step_in[0] + body_digest_hashed - accumulated_main_digests_hashed; + // - data_digest_hashed; // TODO: data_digest is really plaintext_digest from before, consider changing names } diff --git a/circuits/test/common/index.ts b/circuits/test/common/index.ts index 045ad32..fc3646b 100644 --- a/circuits/test/common/index.ts +++ b/circuits/test/common/index.ts @@ -306,6 +306,24 @@ export const http_response_ciphertext = [ 220, 67, 16, 26, ]; +export const http_response_ciphertext_dup = [ + 42, 116, 77, 230, 223, 218, 155, 193, 244, 120, 237, 102, 105, 104, 214, 166, 100, 103, 49, 250, + 27, 220, 88, 187, 119, 163, 183, 203, 168, 75, 35, 34, 214, 113, 114, 144, 20, 247, 6, 49, 27, 71, + 135, 1, 10, 81, 0, 103, 59, 230, 49, 170, 19, 108, 235, 206, 146, 28, 74, 53, 86, 120, 113, 227, 44, + 44, 199, 114, 221, 163, 36, 44, 224, 186, 135, 46, 227, 147, 76, 53, 29, 50, 101, 55, 154, 154, 51, + 77, 254, 129, 49, 72, 247, 30, 186, 10, 95, 110, 181, 180, 173, 31, 220, 95, 0, 18, 9, 173, 119, 22, + 165, 175, 230, 22, 195, 48, 51, 67, 149, 104, 40, 102, 238, 165, 45, 219, 59, 124, 174, 148, 26, 69, + 104, 199, 174, 22, 219, 250, 22, 69, 50, 122, 83, 154, 89, 29, 99, 132, 4, 22, 22, 23, 66, 35, 235, + 217, 233, 138, 174, 145, 64, 206, 60, 150, 226, 219, 36, 175, 145, 12, 211, 88, 162, 78, 146, 32, 82, + 100, 222, 103, 86, 52, 23, 136, 60, 31, 240, 33, 108, 69, 96, 208, 15, 237, 122, 243, 137, 210, 225, + 146, 27, 237, 204, 64, 49, 146, 119, 240, 59, 71, 124, 137, 197, 36, 85, 198, 47, 103, 121, 36, 227, + 129, 229, 169, 209, 195, 100, 196, 101, 87, 148, 126, 233, 221, 236, 219, 127, 91, 230, 134, 70, 247, + 194, 212, 254, 209, 13, 33, 83, 8, 99, 136, 45, 218, 123, 90, 125, 83, 213, 131, 142, 233, 71, 5, 220, + 213, 115, 178, 191, 173, 30, 176, 72, 63, 240, 93, 53, 159, 252, 105, 142, 98, 186, 9, 233, 115, 99, + 75, 187, 146, 38, 246, 208, 90, 111, 242, 98, 228, 192, 152, 32, 183, 194, 137, 217, 196, 235, 110, 168, + 3, 23, 11, 45, 85, 227, 88, 227, 228, 176, 114 +]; + export const http_start_line = [72, 84, 84, 80, 47, 49, 46, 49, 32, 50, 48, 48, 32, 79, 75]; export const http_header_0 = [ @@ -441,11 +459,17 @@ function headersToBytes(headers: Record): number[][] { export function InitialDigest( manifest: Manifest, - ciphertext: number[], + ciphertexts: number[][], maxStackHeight: number ): [bigint, bigint] { + let ciphertextDigests: bigint[] = []; // Create a digest of the ciphertext itself - const ciphertextDigest = DataHasher(ciphertext); + ciphertexts.forEach(ciphertext => { + const ciphertextDigest = DataHasher(ciphertext); + ciphertextDigests.push(ciphertextDigest); + }); + + let ciphertextDigest = ciphertextDigests.reduce((a, b) => a + b, BigInt(0)); // Digest the start line using the ciphertext_digest as a random input const startLineBytes = strToBytes( diff --git a/circuits/test/full/full.test.ts b/circuits/test/full/full.test.ts index 13ca7db..9cc4a81 100644 --- a/circuits/test/full/full.test.ts +++ b/circuits/test/full/full.test.ts @@ -1,7 +1,8 @@ import { assert } from "chai"; -import { circomkit, WitnessTester, uintArray32ToBits, http_response_plaintext, http_response_ciphertext, http_start_line, http_header_0, http_header_1, http_body, PolynomialDigest, strToBytes, JsonMaskType, jsonTreeHasher, compressTreeHash, modAdd, InitialDigest, MockManifest } from "../common"; +import { circomkit, WitnessTester, uintArray32ToBits, http_response_plaintext, http_response_ciphertext, http_start_line, http_header_0, http_header_1, http_body, PolynomialDigest, strToBytes, JsonMaskType, jsonTreeHasher, compressTreeHash, modAdd, InitialDigest, MockManifest, http_response_ciphertext_dup } from "../common"; import { toInput } from "../chacha20/authentication.test"; import { poseidon1 } from "poseidon-lite"; +import { DataHasher } from "../common/poseidon"; // HTTP/1.1 200 OK // content-type: application/json; charset=utf-8 @@ -29,8 +30,25 @@ const MAX_STACK_HEIGHT = 10; // These `check_*` are currently from Rust to ensure we have parity const check_ciphertext_digest = BigInt("5947802862726868637928743536818722886587721698845887498686185738472802646104"); +const check_ciphertext_digest_dup = BigInt( + "10533684210547111058940459285576829498255433421882238742557401503782754130789" +); const check_init_nivc_input = BigInt("10288873638660630335427615297930270928433661836597941144520949467184902553219"); +function to_nonce(iv: Uint8Array, seq: number): Uint8Array { + let nonce = new Uint8Array(12); + nonce.fill(0); + + for (let i = 0; i < 8; i++) { + nonce[12 - i] = (seq >> (8 * i)) & 0xff; + } + + nonce.forEach((_, i) => { + nonce[i] ^= iv[i]; + }); + + return nonce; +} describe("Example NIVC Proof", async () => { let PlaintextAuthentication: WitnessTester<["step_in", "plaintext", "key", "nonce", "counter"], ["step_out"]>; @@ -65,7 +83,7 @@ describe("Example NIVC Proof", async () => { let ciphertext_padded = http_response_ciphertext.concat(Array(DATA_BYTES - http_response_ciphertext.length).fill(-1)); - const [ciphertext_digest, init_nivc_input] = InitialDigest(MockManifest(), ciphertext_padded, MAX_STACK_HEIGHT); + const [ciphertext_digest, init_nivc_input] = InitialDigest(MockManifest(), [ciphertext_padded], MAX_STACK_HEIGHT); assert.deepEqual(ciphertext_digest, check_ciphertext_digest); assert.deepEqual(init_nivc_input, check_init_nivc_input); @@ -141,4 +159,104 @@ describe("Example NIVC Proof", async () => { }, ["step_out"]); assert.deepEqual(json_extraction.step_out, value_digest); }); + + it("multiple ciphertext packets", async () => { + // Run PlaintextAuthentication + + let http_response_padded = http_response_plaintext.concat(Array(DATA_BYTES - http_response_plaintext.length).fill(-1)); + let http_response_0_padded = http_response_plaintext.concat(Array(DATA_BYTES - http_start_line.length).fill(0)); + let ciphertext_padded = http_response_ciphertext.concat(Array(DATA_BYTES - http_response_ciphertext.length).fill(-1)); + let ciphertext_padded_2 = http_response_ciphertext_dup.concat(Array(DATA_BYTES - http_response_ciphertext_dup.length).fill(-1)); + assert.deepEqual(http_response_ciphertext.length, http_response_ciphertext_dup.length); + + const [ciphertext_digest, init_nivc_input] = InitialDigest(MockManifest(), [ciphertext_padded, ciphertext_padded_2], MAX_STACK_HEIGHT); + + assert.deepEqual(ciphertext_digest, check_ciphertext_digest_dup + check_ciphertext_digest); + // assert.deepEqual(init_nivc_input, check_init_nivc_input_dup); + + const counterBits = uintArray32ToBits([1])[0]; + const keyIn = toInput(Buffer.from(Array(32).fill(0))); + const nonceIn = toInput(Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00])); + let plaintext_authentication1 = await PlaintextAuthentication.compute({ + step_in: init_nivc_input, + plaintext: http_response_padded, + key: keyIn, + nonce: nonceIn, + counter: counterBits, + }, ["step_out"]); + + let ct1Digest = DataHasher(ciphertext_padded); + assert.deepEqual(plaintext_authentication1.step_out, init_nivc_input - ct1Digest); + + const nonceIn2 = toInput(Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x01])); + let plaintext_authentication2 = await PlaintextAuthentication.compute({ + step_in: plaintext_authentication1.step_out, + plaintext: http_response_padded, + key: keyIn, + nonce: nonceIn2, + counter: counterBits, + }, ["step_out"]); + + let ct2Digest = DataHasher(ciphertext_padded_2); + assert.deepEqual(plaintext_authentication2.step_out, init_nivc_input - ct1Digest - ct2Digest); + + const http_response_plaintext_digest = PolynomialDigest(http_response_0_padded, ciphertext_digest); + const http_response_plaintext_digest_hashed = poseidon1([http_response_plaintext_digest]); + + // Run HTTPVerification + const start_line_digest = PolynomialDigest(http_start_line, ciphertext_digest); + const header_0_digest = PolynomialDigest(http_header_0, ciphertext_digest); + const header_1_digest = PolynomialDigest(http_header_1, ciphertext_digest); + + let main_digests = Array(MAX_NUMBER_OF_HEADERS + 1).fill(0); + main_digests[0] = start_line_digest; + main_digests[1] = header_0_digest; + main_digests[2] = header_1_digest; + + let step_in = BigInt(plaintext_authentication2.step_out.toString(10)); + let http_verification = await HTTPVerification.compute({ + step_in, + ciphertext_digest, + data: http_response_padded, + main_digests, + }, ["step_out"]); + + const padded_http_body = http_body.concat(Array(DATA_BYTES - http_body.length).fill(0)); + let http_verification_step_out = BigInt((http_verification.step_out as number[])[0]); + let body_digest = PolynomialDigest(http_body, ciphertext_digest); + + const body_digest_hashed = poseidon1([body_digest]); + const start_line_digest_digest_hashed = poseidon1([start_line_digest]); + const header_0_digest_hashed = poseidon1([header_0_digest]); + const header_1_digest_hashed = poseidon1([header_1_digest]); + const correct_http_verification_step_out = modAdd(step_in - start_line_digest_digest_hashed - header_0_digest_hashed - header_1_digest_hashed, body_digest_hashed); + assert.deepEqual(http_verification_step_out, correct_http_verification_step_out); + + // Run JSONExtraction + const KEY0 = strToBytes("data"); + const KEY1 = strToBytes("items"); + const KEY2 = strToBytes("profile"); + const KEY3 = strToBytes("name"); + const targetValue = strToBytes("Taylor Swift"); + const keySequence: JsonMaskType[] = [ + { type: "Object", value: KEY0 }, + { type: "Object", value: KEY1 }, + { type: "ArrayIndex", value: 0 }, + { type: "Object", value: KEY2 }, + { type: "Object", value: KEY3 }, + ]; + + const [stack, treeHashes] = jsonTreeHasher(ciphertext_digest, keySequence, MAX_STACK_HEIGHT); + const sequence_digest = compressTreeHash(ciphertext_digest, [stack, treeHashes]); + const value_digest = PolynomialDigest(targetValue, ciphertext_digest); + + let json_extraction = await JSONExtraction.compute({ + step_in: http_verification_step_out, + ciphertext_digest, + data: padded_http_body, + value_digest, + sequence_digest, + }, ["step_out"]); + assert.deepEqual(json_extraction.step_out, value_digest); + }); }); diff --git a/package-lock.json b/package-lock.json index 4759fef..f6d2715 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,14 @@ { "name": "web-prover-circuits", - "version": "0.5.9", + "version": "0.7.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "web-prover-circuits", - "version": "0.5.9", + "version": "0.7.1", "license": "Apache-2.0", "dependencies": { - "@zk-email/circuits": "^6.1.1", "circomlib": "^2.0.5" }, "devDependencies": { @@ -83,6 +82,7 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/@iden3/bigarray/-/bigarray-0.0.2.tgz", "integrity": "sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g==", + "dev": true, "license": "GPL-3.0" }, "node_modules/@iden3/binfileutils": { @@ -920,36 +920,6 @@ "license": "MIT", "peer": true }, - "node_modules/@zk-email/circuits": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@zk-email/circuits/-/circuits-6.2.0.tgz", - "integrity": "sha512-G68nAwl4svlE4pCxytgV7NLz80uUCmwzFFdMZ0qcvqzccT1ytMsay19cV1tcKJdzDrMWphGXjxpCNtn+lb7NXA==", - "license": "MIT", - "dependencies": { - "@zk-email/zk-regex-circom": "^2.1.0", - "circomlib": "^2.0.5" - } - }, - "node_modules/@zk-email/zk-regex-circom": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@zk-email/zk-regex-circom/-/zk-regex-circom-2.2.0.tgz", - "integrity": "sha512-4uCHad2AhNjl+gBkRZPv+mTHrXEGV1atte76gaIN4rTsIxZZxHsQ0h66n16Td/UiqE4vjjpt2cGfEzMnhmFtoA==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "commander": "^11.0.0", - "snarkjs": "^0.7.0" - } - }, - "node_modules/@zk-email/zk-regex-circom/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, "node_modules/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -1043,6 +1013,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -1117,6 +1088,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, "license": "MIT" }, "node_modules/available-typed-arrays": { @@ -1139,12 +1111,14 @@ "version": "1.6.7", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true, "license": "Apache-2.0" }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, "node_modules/before-after-hook": { @@ -1158,6 +1132,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "dev": true, "license": "MIT", "dependencies": { "bluebird": "^3.7.2", @@ -1187,6 +1162,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", + "dev": true, "license": "MIT", "dependencies": { "b4a": "^1.0.1", @@ -1197,6 +1173,7 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, "license": "MIT" }, "node_modules/bottleneck": { @@ -1210,6 +1187,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -1302,6 +1280,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -1341,6 +1320,7 @@ "version": "11.2.3", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==", + "dev": true, "license": "MIT" }, "node_modules/child_process": { @@ -1379,6 +1359,7 @@ "version": "0.1.25", "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.25.tgz", "integrity": "sha512-xBGsBFF5Uv6AKvbpgExYqpHfmfawH2HKe+LyjfKSRevqEV8u63i9KGHVIILsbJNW+0c5bm/66f0PUYQ7qZSkJA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "ffjavascript": "0.3.0" @@ -1391,6 +1372,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.3.0.tgz", "integrity": "sha512-l7sR5kmU3gRwDy8g0Z2tYBXy5ttmafRPFOqY7S6af5cq51JqJWt5eQ/lSR/rs2wQNbDYaYlQr5O+OSUf/oMLoQ==", + "dev": true, "license": "GPL-3.0", "dependencies": { "wasmbuilder": "0.0.16", @@ -1608,6 +1590,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -1620,6 +1603,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/commander": { @@ -1647,6 +1631,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, "license": "MIT" }, "node_modules/config-chain": { @@ -1898,6 +1883,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, "license": "MIT" }, "node_modules/define-data-property": { @@ -1975,6 +1961,7 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" @@ -2241,6 +2228,7 @@ "version": "1.14.3", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", @@ -2263,6 +2251,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -2276,6 +2265,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -2288,6 +2278,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -2297,6 +2288,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -2360,12 +2352,14 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, "license": "MIT" }, "node_modules/fastfile": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/fastfile/-/fastfile-0.0.20.tgz", "integrity": "sha512-r5ZDbgImvVWCP0lA/cGNgQcZqR+aYdFx3u+CtJqUE510pBUVGMn4ulL/iRTI4tACTYsNJ736uzFxEBXesPAktA==", + "dev": true, "license": "GPL-3.0" }, "node_modules/fastq": { @@ -2410,6 +2404,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" @@ -2419,6 +2414,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -2428,6 +2424,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -2805,6 +2802,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2915,6 +2913,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 6.0.0" @@ -3321,6 +3320,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", @@ -3349,6 +3349,7 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true, "license": "MIT" }, "node_modules/js-tokens": { @@ -3419,6 +3420,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dev": true, "license": "MIT", "dependencies": { "esprima": "1.2.2", @@ -3447,6 +3449,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", @@ -3604,6 +3607,7 @@ "version": "1.2.15", "resolved": "https://registry.npmjs.org/logplease/-/logplease-1.2.15.tgz", "integrity": "sha512-jLlHnlsPSJjpwUfcNyUxXCl33AYg2cHhIf9QhGL2T4iPT0XPB+xP1LRKFPgIg1M/sg9kAJvy94w9CzBNrfnstA==", + "dev": true, "license": "MIT" }, "node_modules/loupe": { @@ -3751,6 +3755,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -4009,6 +4014,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==", + "dev": true, "license": "ISC" }, "node_modules/neo-async": { @@ -7267,6 +7273,7 @@ "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, "license": "MIT", "dependencies": { "deep-is": "~0.1.3", @@ -7551,6 +7558,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, "engines": { "node": ">= 0.8.0" } @@ -8627,6 +8635,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/snarkjs/-/snarkjs-0.7.4.tgz", "integrity": "sha512-x4cOCR4YXSyBlLtfnUUwfbZrw8wFd/Y0lk83eexJzKwZB8ELdpH+10ts8YtDsm2/a3WK7c7p514bbE8NpqxW8w==", + "dev": true, "license": "GPL-3.0", "dependencies": { "@iden3/binfileutils": "0.0.12", @@ -8648,6 +8657,7 @@ "version": "0.0.12", "resolved": "https://registry.npmjs.org/@iden3/binfileutils/-/binfileutils-0.0.12.tgz", "integrity": "sha512-naAmzuDufRIcoNfQ1d99d7hGHufLA3wZSibtr4dMe6ZeiOPV1KwOZWTJ1YVz4HbaWlpDuzVU72dS4ATQS4PXBQ==", + "dev": true, "license": "GPL-3.0", "dependencies": { "fastfile": "0.0.20", @@ -8658,6 +8668,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.3.0.tgz", "integrity": "sha512-l7sR5kmU3gRwDy8g0Z2tYBXy5ttmafRPFOqY7S6af5cq51JqJWt5eQ/lSR/rs2wQNbDYaYlQr5O+OSUf/oMLoQ==", + "dev": true, "license": "GPL-3.0", "dependencies": { "wasmbuilder": "0.0.16", @@ -8669,6 +8680,7 @@ "version": "0.0.48", "resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.48.tgz", "integrity": "sha512-kHRkKUJNaor31l05f2+RFzvcH5XSa7OfEfd/l4hzjte6NL6fjRkSMfZ4BjySW9wmfdwPOtq3mXurzPvPGEf5Tw==", + "dev": true, "license": "GPL-3.0", "dependencies": { "@iden3/bigarray": "0.0.2", @@ -8681,7 +8693,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -8744,6 +8756,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dev": true, "license": "MIT", "dependencies": { "escodegen": "^1.8.1" @@ -8849,6 +8862,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -9049,6 +9063,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true, "license": "MIT" }, "node_modules/ts-node": { @@ -9109,6 +9124,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" @@ -9172,6 +9188,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "dev": true, "license": "MIT" }, "node_modules/undici-types": { @@ -9290,12 +9307,14 @@ "version": "0.0.16", "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz", "integrity": "sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==", + "dev": true, "license": "GPL-3.0" }, "node_modules/wasmcurves": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.2.2.tgz", "integrity": "sha512-JRY908NkmKjFl4ytnTu5ED6AwPD+8VJ9oc94kdq7h5bIwbj0L4TDJ69mG+2aLs2SoCmGfqIesMWTEJjtYsoQXQ==", + "dev": true, "license": "GPL-3.0", "dependencies": { "wasmbuilder": "0.0.16" @@ -9305,6 +9324,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "dev": true, "license": "Apache-2.0" }, "node_modules/which": { @@ -9347,6 +9367,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" diff --git a/package.json b/package.json index a66f5a3..eaa8e39 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "par-test": "npx mocha --parallel" }, "dependencies": { - "@zk-email/circuits": "^6.1.1", "circomlib": "^2.0.5" }, "devDependencies": { @@ -32,4 +31,4 @@ "ts-node": "^10.9.1", "typescript": "5.6.2" } -} \ No newline at end of file +} From 81e88eeedd081f091b4e6fc7e2f4a1d751be0c6c Mon Sep 17 00:00:00 2001 From: lonerapier Date: Wed, 15 Jan 2025 18:05:46 +0530 Subject: [PATCH 2/8] chore: update package version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eaa8e39..07ecfab 100644 --- a/package.json +++ b/package.json @@ -31,4 +31,4 @@ "ts-node": "^10.9.1", "typescript": "5.6.2" } -} +} \ No newline at end of file From f09a7edc4880e8895e82b7bb1f94bc53c15afc4b Mon Sep 17 00:00:00 2001 From: lonerapier Date: Thu, 16 Jan 2025 17:21:03 +0530 Subject: [PATCH 3/8] feat: add polynomial digest with counter --- circuits/http/verification.circom | 6 ++-- circuits/json/extraction.circom | 8 ++--- circuits/test/common/index.ts | 26 +++++--------- circuits/test/http/verification.test.ts | 46 +++++++++++-------------- circuits/test/json/extraction.test.ts | 20 +++++------ circuits/test/utils/hash.test.ts | 33 +++++++++++++++++- circuits/utils/functions.circom | 13 +++++++ circuits/utils/hash.circom | 39 +++++++++++++++++++-- 8 files changed, 127 insertions(+), 64 deletions(-) create mode 100644 circuits/utils/functions.circom diff --git a/circuits/http/verification.circom b/circuits/http/verification.circom index 70bcf4e..61b8d57 100644 --- a/circuits/http/verification.circom +++ b/circuits/http/verification.circom @@ -17,7 +17,7 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS) { isPadding[i] <== IsEqual()([data[i], -1]); zeroed_data[i] <== (1 - isPadding[i]) * data[i]; } - signal data_digest <== PolynomialDigest(DATA_BYTES)(zeroed_data, ciphertext_digest); + signal pt_digest <== PolynomialDigest(DATA_BYTES)(zeroed_data, ciphertext_digest); signal input main_digests[MAX_NUMBER_OF_HEADERS + 1]; // Contains digests of start line and all intended headers (up to `MAX_NUMBER_OF_HEADERS`) signal not_contained[MAX_NUMBER_OF_HEADERS + 1]; @@ -108,7 +108,6 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS) { // TODO: Need to subtract all the header digests here and also wrap them in poseidon. We can use the ones from the input to make this cheaper since they're verified in this circuit! signal body_digest_hashed <== Poseidon(1)([body_digest[DATA_BYTES - 1]]); - signal data_digest_hashed <== Poseidon(1)([data_digest]); signal option_hash[MAX_NUMBER_OF_HEADERS + 1]; signal main_digests_hashed[MAX_NUMBER_OF_HEADERS + 1]; var accumulated_main_digests_hashed = 0; @@ -118,6 +117,5 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS) { accumulated_main_digests_hashed += main_digests_hashed[i]; } - step_out[0] <== step_in[0] + body_digest_hashed - accumulated_main_digests_hashed; - // - data_digest_hashed; // TODO: data_digest is really plaintext_digest from before, consider changing names + step_out[0] <== step_in[0] + body_digest_hashed - accumulated_main_digests_hashed - pt_digest; // TODO: data_digest is really plaintext_digest from before, consider changing names } diff --git a/circuits/json/extraction.circom b/circuits/json/extraction.circom index e5185c9..7447ae0 100644 --- a/circuits/json/extraction.circom +++ b/circuits/json/extraction.circom @@ -6,7 +6,7 @@ include "hash_machine.circom"; template JSONExtraction(DATA_BYTES, MAX_STACK_HEIGHT) { signal input data[DATA_BYTES]; signal input ciphertext_digest; - signal input sequence_digest; + signal input sequence_digest; signal input value_digest; signal input step_in[1]; @@ -23,7 +23,7 @@ template JSONExtraction(DATA_BYTES, MAX_STACK_HEIGHT) { } signal intermediate_digest[DATA_BYTES][3 * MAX_STACK_HEIGHT]; signal state_digest[DATA_BYTES]; - + // Debugging // for(var i = 0; i - PolynomialDigest(bytes, ciphertextDigest) + PolynomialDigest(bytes, ciphertextDigest, BigInt(0)) ); // Digest the JSON sequence diff --git a/circuits/test/http/verification.test.ts b/circuits/test/http/verification.test.ts index ce97d66..bf0ff09 100644 --- a/circuits/test/http/verification.test.ts +++ b/circuits/test/http/verification.test.ts @@ -36,16 +36,15 @@ describe("HTTP Verification", async () => { it("witness: http_response_plaintext, no header", async () => { // Get all the hashes we need - let data_digest = PolynomialDigest(http_response_plaintext, mock_ct_digest); - let data_digest_hashed = poseidon1([data_digest]); + let data_digest = PolynomialDigest(http_response_plaintext, mock_ct_digest, BigInt(0)); // Compute the HTTP info digest - let start_line_digest = PolynomialDigest(http_start_line, mock_ct_digest); + let start_line_digest = PolynomialDigest(http_start_line, mock_ct_digest, BigInt(0)); let start_line_digest_hashed = poseidon1([start_line_digest]); - let body_digest = PolynomialDigest(http_body, mock_ct_digest); + let body_digest = PolynomialDigest(http_body, mock_ct_digest, BigInt(0)); let body_digest_hashed = poseidon1([body_digest]); // Use `modAdd` to get back a number between 0 and PRIME - let output_difference = modAdd(body_digest_hashed - start_line_digest_hashed - data_digest_hashed, BigInt(0)); + let output_difference = modAdd(body_digest_hashed - start_line_digest_hashed - data_digest, BigInt(0)); // Run the HTTP circuit // POTENTIAL BUG: I didn't get this to work with `expectPass` as it didn't compute `step_out` that way??? @@ -61,18 +60,17 @@ describe("HTTP Verification", async () => { it("witness: http_response_plaintext, one header", async () => { // Get all the hashes we need - let data_digest = PolynomialDigest(http_response_plaintext, mock_ct_digest); - let data_digest_hashed = poseidon1([data_digest]); + let data_digest = PolynomialDigest(http_response_plaintext, mock_ct_digest, BigInt(0)); // Compute the HTTP info digest - let start_line_digest = PolynomialDigest(http_start_line, mock_ct_digest); + let start_line_digest = PolynomialDigest(http_start_line, mock_ct_digest, BigInt(0)); let start_line_digest_hashed = poseidon1([start_line_digest]); - let header_0_digest = PolynomialDigest(http_header_0, mock_ct_digest); + let header_0_digest = PolynomialDigest(http_header_0, mock_ct_digest, BigInt(0)); let header_0_digest_hashed = poseidon1([header_0_digest]); - let body_digest = PolynomialDigest(http_body, mock_ct_digest); + let body_digest = PolynomialDigest(http_body, mock_ct_digest, BigInt(0)); let body_digest_hashed = poseidon1([body_digest]); // Use `modAdd` to get back a number between 0 and PRIME - let output_difference = modAdd(body_digest_hashed - start_line_digest_hashed - header_0_digest_hashed - data_digest_hashed, BigInt(0)); + let output_difference = modAdd(body_digest_hashed - start_line_digest_hashed - header_0_digest_hashed - data_digest, BigInt(0)); // Run the HTTP circuit // POTENTIAL BUG: I didn't get this to work with `expectPass` as it didn't compute `step_out` that way??? @@ -88,20 +86,19 @@ describe("HTTP Verification", async () => { it("witness: http_response_plaintext, two headers", async () => { // Get all the hashes we need - let data_digest = PolynomialDigest(http_response_plaintext, mock_ct_digest); - let data_digest_hashed = poseidon1([data_digest]); + let data_digest = PolynomialDigest(http_response_plaintext, mock_ct_digest, BigInt(0)); // Compute the HTTP info digest - let start_line_digest = PolynomialDigest(http_start_line, mock_ct_digest); + let start_line_digest = PolynomialDigest(http_start_line, mock_ct_digest, BigInt(0)); let start_line_digest_hashed = poseidon1([start_line_digest]); - let header_0_digest = PolynomialDigest(http_header_0, mock_ct_digest); + let header_0_digest = PolynomialDigest(http_header_0, mock_ct_digest, BigInt(0)); let header_0_digest_hashed = poseidon1([header_0_digest]); - let header_1_digest = PolynomialDigest(http_header_1, mock_ct_digest); + let header_1_digest = PolynomialDigest(http_header_1, mock_ct_digest, BigInt(0)); let header_1_digest_hashed = poseidon1([header_1_digest]); - let body_digest = PolynomialDigest(http_body, mock_ct_digest); + let body_digest = PolynomialDigest(http_body, mock_ct_digest, BigInt(0)); let body_digest_hashed = poseidon1([body_digest]); // Use `modAdd` to get back a number between 0 and PRIME - let output_difference = modAdd(body_digest_hashed - start_line_digest_hashed - header_0_digest_hashed - header_1_digest_hashed - data_digest_hashed, BigInt(0)); + let output_difference = modAdd(body_digest_hashed - start_line_digest_hashed - header_0_digest_hashed - header_1_digest_hashed - data_digest, BigInt(0)); // Run the HTTP circuit // POTENTIAL BUG: I didn't get this to work with `expectPass` as it didn't compute `step_out` that way??? @@ -117,20 +114,19 @@ describe("HTTP Verification", async () => { it("witness: http_response_plaintext, two headers, order does not matter", async () => { // Get all the hashes we need - let data_digest = PolynomialDigest(http_response_plaintext, mock_ct_digest); - let data_digest_hashed = poseidon1([data_digest]); + let data_digest = PolynomialDigest(http_response_plaintext, mock_ct_digest, BigInt(0)); // Compute the HTTP info digest - let start_line_digest = PolynomialDigest(http_start_line, mock_ct_digest); + let start_line_digest = PolynomialDigest(http_start_line, mock_ct_digest, BigInt(0)); let start_line_digest_hashed = poseidon1([start_line_digest]); - let header_0_digest = PolynomialDigest(http_header_0, mock_ct_digest); + let header_0_digest = PolynomialDigest(http_header_0, mock_ct_digest, BigInt(0)); let header_0_digest_hashed = poseidon1([header_0_digest]); - let header_1_digest = PolynomialDigest(http_header_1, mock_ct_digest); + let header_1_digest = PolynomialDigest(http_header_1, mock_ct_digest, BigInt(0)); let header_1_digest_hashed = poseidon1([header_1_digest]); - let body_digest = PolynomialDigest(http_body, mock_ct_digest); + let body_digest = PolynomialDigest(http_body, mock_ct_digest, BigInt(0)); let body_digest_hashed = poseidon1([body_digest]); // Use `modAdd` to get back a number between 0 and PRIME - let output_difference = modAdd(body_digest_hashed - start_line_digest_hashed - header_0_digest_hashed - header_1_digest_hashed - data_digest_hashed, BigInt(0)); + let output_difference = modAdd(body_digest_hashed - start_line_digest_hashed - header_0_digest_hashed - header_1_digest_hashed - data_digest, BigInt(0)); // Run the HTTP circuit // POTENTIAL BUG: I didn't get this to work with `expectPass` as it didn't compute `step_out` that way??? diff --git a/circuits/test/json/extraction.test.ts b/circuits/test/json/extraction.test.ts index 152df1a..36d17f0 100644 --- a/circuits/test/json/extraction.test.ts +++ b/circuits/test/json/extraction.test.ts @@ -24,8 +24,8 @@ describe("JSON Extraction", () => { let [stack, treeHashes] = jsonTreeHasher(mock_ct_digest, keySequence, MAX_STACK_HEIGHT); let sequence_digest = compressTreeHash(mock_ct_digest, [stack, treeHashes]); let sequence_digest_hashed = poseidon1([sequence_digest]); - let value_digest = PolynomialDigest(targetValue, mock_ct_digest); - let data_digest = PolynomialDigest(input, mock_ct_digest); + let value_digest = PolynomialDigest(targetValue, mock_ct_digest, BigInt(0)); + let data_digest = PolynomialDigest(input, mock_ct_digest, BigInt(0)); let data_digest_hashed = poseidon1([data_digest]); let step_in = modAdd(sequence_digest_hashed, data_digest_hashed); @@ -47,7 +47,7 @@ describe("JSON Extraction", () => { [stack, treeHashes] = jsonTreeHasher(mock_ct_digest, keySequence, MAX_STACK_HEIGHT); sequence_digest = compressTreeHash(mock_ct_digest, [stack, treeHashes]); sequence_digest_hashed = poseidon1([sequence_digest]); - value_digest = PolynomialDigest(targetValue, mock_ct_digest); + value_digest = PolynomialDigest(targetValue, mock_ct_digest, BigInt(0)); step_in = modAdd(sequence_digest_hashed, data_digest_hashed); await hash_parser.expectPass({ @@ -80,9 +80,9 @@ describe("JSON Extraction", () => { let [stack, treeHashes] = jsonTreeHasher(mock_ct_digest, keySequence, MAX_STACK_HEIGHT); let sequence_digest = compressTreeHash(mock_ct_digest, [stack, treeHashes]); let sequence_digest_hashed = poseidon1([sequence_digest]); - let data_digest = PolynomialDigest(input, mock_ct_digest); + let data_digest = PolynomialDigest(input, mock_ct_digest, BigInt(0)); let data_digest_hashed = poseidon1([data_digest]); - let value_digest = PolynomialDigest(targetValue, mock_ct_digest); + let value_digest = PolynomialDigest(targetValue, mock_ct_digest, BigInt(0)); let step_in = modAdd(sequence_digest_hashed, data_digest_hashed); await hash_parser.expectPass({ @@ -103,7 +103,7 @@ describe("JSON Extraction", () => { [stack, treeHashes] = jsonTreeHasher(mock_ct_digest, keySequence, MAX_STACK_HEIGHT); sequence_digest = compressTreeHash(mock_ct_digest, [stack, treeHashes]); sequence_digest_hashed = poseidon1([sequence_digest]); - value_digest = PolynomialDigest(targetValue, mock_ct_digest); + value_digest = PolynomialDigest(targetValue, mock_ct_digest, BigInt(0)); step_in = modAdd(sequence_digest_hashed, data_digest_hashed); await hash_parser.expectPass({ data: input, @@ -138,9 +138,9 @@ describe("JSON Extraction", () => { const [stack, treeHashes] = jsonTreeHasher(mock_ct_digest, keySequence, 10); const sequence_digest = compressTreeHash(mock_ct_digest, [stack, treeHashes]); const sequence_digest_hashed = poseidon1([sequence_digest]); - const data_digest = PolynomialDigest(input, mock_ct_digest); + const data_digest = PolynomialDigest(input, mock_ct_digest, BigInt(0)); const data_digest_hashed = poseidon1([data_digest]); - const value_digest = PolynomialDigest(targetValue, mock_ct_digest); + const value_digest = PolynomialDigest(targetValue, mock_ct_digest, BigInt(0)); const step_in = modAdd(sequence_digest_hashed, data_digest_hashed); await hash_parser.expectPass({ @@ -178,9 +178,9 @@ describe("JSON Extraction", () => { const [stack, treeHashes] = jsonTreeHasher(mock_ct_digest, keySequence, 10); const sequence_digest = compressTreeHash(mock_ct_digest, [stack, treeHashes]); const sequence_digest_hashed = poseidon1([sequence_digest]); - const data_digest = PolynomialDigest(input, mock_ct_digest); + const data_digest = PolynomialDigest(input, mock_ct_digest, BigInt(0)); const data_digest_hashed = poseidon1([data_digest]); - const value_digest = PolynomialDigest(targetValue, mock_ct_digest); + const value_digest = PolynomialDigest(targetValue, mock_ct_digest, BigInt(0)); const step_in = modAdd(sequence_digest_hashed, data_digest_hashed); await hash_parser.expectPass({ diff --git a/circuits/test/utils/hash.test.ts b/circuits/test/utils/hash.test.ts index 3c8718a..2dc93f0 100644 --- a/circuits/test/utils/hash.test.ts +++ b/circuits/test/utils/hash.test.ts @@ -129,7 +129,7 @@ describe("PolynomialDigest", () => { it("witness: bytes = [4*random], polynomial_input = random", async () => { const bytes = Array.from({ length: 4 }, () => Math.floor(Math.random() * 256)); const polynomial_input = poseidon1([BigInt(Math.floor(Math.random() * 694206942069420))]); - const digest = PolynomialDigest(bytes, polynomial_input); + const digest = PolynomialDigest(bytes, polynomial_input, BigInt(0)); await circuit.expectPass( { bytes, polynomial_input }, @@ -139,3 +139,34 @@ describe("PolynomialDigest", () => { }); +describe("PolynomialDigestWithCounter", () => { + let circuit: WitnessTester<["bytes", "polynomial_input", "counter"], ["digest"]>; + + before(async () => { + circuit = await circomkit.WitnessTester(`PolynomialDigestWithCounter`, { + file: "utils/hash", + template: "PolynomialDigestWithCounter", + params: [4], + }); + }); + + it("witness: bytes = [1,2,3,4], polynomial_input = 7, counter = 0", async () => { + const bytes = [1, 2, 3, 4]; + const polynomial_input = 7; + + await circuit.expectPass( + { bytes, polynomial_input, counter: 0 }, + { digest: 1 + 2 * 7 + 3 * 7 ** 2 + 4 * 7 ** 3 } + ); + }); + + it("witness: bytes = [1,2,3,4], polynomial_input = 7, counter = 2", async () => { + const bytes = [1, 2, 3, 4]; + const polynomial_input = 7; + + await circuit.expectPass( + { bytes, polynomial_input, counter: 2 }, + { digest: 1 * 7 ** 2 + 2 * 7 ** 3 + 3 * 7 ** 4 + 4 * 7 ** 5 } + ); + }); +}); \ No newline at end of file diff --git a/circuits/utils/functions.circom b/circuits/utils/functions.circom new file mode 100644 index 0000000..528dec8 --- /dev/null +++ b/circuits/utils/functions.circom @@ -0,0 +1,13 @@ +pragma circom 2.1.9; + +function log2Ceil(a) { + var n = a - 1; + var r = 0; + + while (n > 0) { + r++; + n \= 2; + } + + return r; +} \ No newline at end of file diff --git a/circuits/utils/hash.circom b/circuits/utils/hash.circom index 5da3c12..5bc151a 100644 --- a/circuits/utils/hash.circom +++ b/circuits/utils/hash.circom @@ -2,6 +2,7 @@ pragma circom 2.1.9; include "circomlib/circuits/poseidon.circom"; include "./array.circom"; +include "./functions.circom"; template MaskedByteStreamDigest(DATA_BYTES) { signal input in[DATA_BYTES]; @@ -35,13 +36,13 @@ template DataHasher(DATA_BYTES) { var packedInput = 0; var isPaddedChunk = 0; for(var j = 0 ; j < 16 ; j++) { - /* + /* If in[16 * i + j] is ever -1 we get `isPadding[16 * i + j] === 1` and since we add this we get zero which does not change `packedInput`. */ isPadding[16 * i + j] <== IsEqual()([in[16 * i + j], -1]); isPaddedChunk += isPadding[16 * i + j]; - packedInput += (in[16 * i + j] + isPadding[16 * i + j]) * 2**(8*j); + packedInput += (in[16 * i + j] + isPadding[16 * i + j]) * 2**(8*j); } not_to_hash[i] <== IsEqual()([isPaddedChunk, 16]); option_hash[i] <== Poseidon(2)([hashes[i],packedInput]); @@ -67,4 +68,38 @@ template PolynomialDigest(N) { accumulation += terms[i]; } digest <== accumulation; +} + +template PolynomialDigestWithCounter(N) { + signal input bytes[N]; + signal input polynomial_input; + signal input counter; + + var logN = log2Ceil(N); + + signal output digest; + + signal monomials[N]; + signal terms[N]; + + signal pow_accumulation[N+1]; + pow_accumulation[0] <== 1; + signal isLessThanCounter[N]; + signal multFactor[N]; + for (var i = 0 ; i < N ; i++) { + isLessThanCounter[i] <== LessThan(logN)([i, counter]); + multFactor[i] <== isLessThanCounter[i] * polynomial_input + (1 - isLessThanCounter[i]); + pow_accumulation[i+1] <== pow_accumulation[i] * multFactor[i]; + } + + // monomials[0] = polynomial_input ** counter + monomials[0] <== pow_accumulation[N]; + terms[0] <== bytes[0] * monomials[0]; + var accumulation = terms[0]; + for(var i = 1 ; i < N ; i++) { + monomials[i] <== monomials[i - 1] * polynomial_input; + terms[i] <== monomials[i] * bytes[i]; + accumulation += terms[i]; + } + digest <== accumulation; } \ No newline at end of file From f9c9448e9169a0cf1bddc710ec586418b809533a Mon Sep 17 00:00:00 2001 From: lonerapier Date: Thu, 16 Jan 2025 17:21:57 +0530 Subject: [PATCH 4/8] add plaintext_index in authentication and support chaining --- circuits/chacha20/authentication.circom | 14 ++-- circuits/test/chacha20/authentication.test.ts | 25 +++--- circuits/test/full/full.test.ts | 82 ++++++++++++------- 3 files changed, 73 insertions(+), 48 deletions(-) diff --git a/circuits/chacha20/authentication.circom b/circuits/chacha20/authentication.circom index e7a45fa..188d1a6 100644 --- a/circuits/chacha20/authentication.circom +++ b/circuits/chacha20/authentication.circom @@ -36,6 +36,9 @@ template PlaintextAuthentication(DATA_BYTES) { // in => N 32-bit words => N 4 byte words signal input plaintext[DATA_BYTES]; + signal input ciphertext_digest; + signal input plaintext_index_counter; + // step_in should be the ciphertext digest + the HTTP digests + JSON seq digest signal input step_in[1]; @@ -142,16 +145,13 @@ template PlaintextAuthentication(DATA_BYTES) { } } - signal ciphertext_digest <== DataHasher(DATA_BYTES)(bigEndianCiphertext); - signal zeroed_plaintext[DATA_BYTES]; for(var i = 0 ; i < DATA_BYTES ; i++) { // Sets any padding bytes to zero (which are presumably at the end) so they don't accum into the poly hash zeroed_plaintext[i] <== (1 - isPadding[i]) * plaintext[i]; } - // signal plaintext_digest <== PolynomialDigest(DATA_BYTES)(zeroed_plaintext, ciphertext_digest); - // signal plaintext_digest_hashed <== Poseidon(1)([plaintext_digest]); - // TODO: I'm not sure we need to subtract the CT digest - step_out[0] <== step_in[0] - ciphertext_digest; - // + plaintext_digest_hashed; + signal part_ciphertext_digest <== DataHasher(DATA_BYTES)(bigEndianCiphertext); + signal plaintext_digest <== PolynomialDigestWithCounter(DATA_BYTES)(zeroed_plaintext, ciphertext_digest, plaintext_index_counter); + + step_out[0] <== step_in[0] - part_ciphertext_digest + plaintext_digest; } \ No newline at end of file diff --git a/circuits/test/chacha20/authentication.test.ts b/circuits/test/chacha20/authentication.test.ts index 972abf0..8c93314 100644 --- a/circuits/test/chacha20/authentication.test.ts +++ b/circuits/test/chacha20/authentication.test.ts @@ -2,10 +2,9 @@ import { WitnessTester } from "circomkit"; import { circomkit, PolynomialDigest, toByte, toUint32Array, uintArray32ToBits, modAdd } from "../common"; import { DataHasher } from "../common/poseidon"; import { assert } from "chai"; -import { poseidon1 } from "poseidon-lite"; describe("Plaintext Authentication", () => { - let circuit: WitnessTester<["key", "nonce", "counter", "plaintext", "step_in"], ["step_out"]>; + let circuit: WitnessTester<["key", "nonce", "counter", "plaintext", "plaintext_index_counter", "ciphertext_digest", "step_in"], ["step_out"]>; describe("16 block test", () => { it("should perform encryption", async () => { circuit = await circomkit.WitnessTester(`PlaintextAuthentication`, { @@ -49,18 +48,21 @@ describe("Plaintext Authentication", () => { 0xf9, 0x1b, 0x65, 0xc5, 0x52, 0x47, 0x33, 0xab, 0x8f, 0x59, 0x3d, 0xab, 0xcd, 0x62, 0xb3, 0x57, 0x16, 0x39, 0xd6, 0x24, 0xe6, 0x51, 0x52, 0xab, 0x8f, 0x53, 0x0c, 0x35, 0x9f, 0x08, 0x61, 0xd8 ]; - const counterBits = uintArray32ToBits([1])[0] + const counterBits = uintArray32ToBits([1])[0]; + let ciphertext_digest = DataHasher(ciphertextBytes); let w = await circuit.compute({ key: toInput(Buffer.from(keyBytes)), nonce: toInput(Buffer.from(nonceBytes)), counter: counterBits, plaintext: plaintextBytes, + plaintext_index_counter: 0, + ciphertext_digest: ciphertext_digest, step_in: 0 }, (["step_out"])); + // Output - let ciphertext_digest = DataHasher(ciphertextBytes); - let plaintext_digest_hashed = poseidon1([PolynomialDigest(plaintextBytes, ciphertext_digest)]); - let output = modAdd(plaintext_digest_hashed - ciphertext_digest, BigInt(0)); + let plaintext_digest = PolynomialDigest(plaintextBytes, ciphertext_digest, BigInt(0)); + let output = modAdd(plaintext_digest - ciphertext_digest, BigInt(0)); assert.deepEqual(w.step_out, output); }); }); @@ -107,16 +109,19 @@ describe("Plaintext Authentication", () => { ]; let totalLength = 128; let paddedPlaintextBytes = plaintextBytes.concat(Array(totalLength - plaintextBytes.length).fill(-1)); - const counterBits = uintArray32ToBits([1])[0] + const counterBits = uintArray32ToBits([1])[0]; + let ciphertext_digest = DataHasher(ciphertextBytes); let w = await circuit.compute({ key: toInput(Buffer.from(keyBytes)), nonce: toInput(Buffer.from(nonceBytes)), counter: counterBits, plaintext: paddedPlaintextBytes, - step_in: 0 + step_in: 0, + plaintext_index_counter: 0, + ciphertext_digest: ciphertext_digest, }, (["step_out"])); - let ciphertext_digest = DataHasher(ciphertextBytes); - let plaintext_digest = poseidon1([PolynomialDigest(plaintextBytes, ciphertext_digest)]); + + let plaintext_digest = PolynomialDigest(plaintextBytes, ciphertext_digest, BigInt(0)); let output = modAdd(plaintext_digest - ciphertext_digest, BigInt(0)); assert.deepEqual(w.step_out, output); }); diff --git a/circuits/test/full/full.test.ts b/circuits/test/full/full.test.ts index 9cc4a81..4fbaa76 100644 --- a/circuits/test/full/full.test.ts +++ b/circuits/test/full/full.test.ts @@ -31,7 +31,7 @@ const MAX_STACK_HEIGHT = 10; // These `check_*` are currently from Rust to ensure we have parity const check_ciphertext_digest = BigInt("5947802862726868637928743536818722886587721698845887498686185738472802646104"); const check_ciphertext_digest_dup = BigInt( - "10533684210547111058940459285576829498255433421882238742557401503782754130789" + "9719560477146706366275627147615553588605800736547946825367443581777188004918" ); const check_init_nivc_input = BigInt("10288873638660630335427615297930270928433661836597941144520949467184902553219"); @@ -51,7 +51,7 @@ function to_nonce(iv: Uint8Array, seq: number): Uint8Array { } describe("Example NIVC Proof", async () => { - let PlaintextAuthentication: WitnessTester<["step_in", "plaintext", "key", "nonce", "counter"], ["step_out"]>; + let PlaintextAuthentication: WitnessTester<["step_in", "plaintext", "key", "nonce", "counter", "plaintext_index_counter", "ciphertext_digest"], ["step_out"]>; let HTTPVerification: WitnessTester<["step_in", "ciphertext_digest", "data", "main_digests"], ["step_out"]>; let JSONExtraction: WitnessTester<["step_in", "ciphertext_digest", "data", "sequence_digest", "value_digest"], ["step_out"]>; @@ -96,17 +96,18 @@ describe("Example NIVC Proof", async () => { key: keyIn, nonce: nonceIn, counter: counterBits, + plaintext_index_counter: 0, + ciphertext_digest, }, ["step_out"]); - const http_response_plaintext_digest = PolynomialDigest(http_response_0_padded, ciphertext_digest); - const http_response_plaintext_digest_hashed = poseidon1([http_response_plaintext_digest]); - const correct_plaintext_authentication_step_out = modAdd(init_nivc_input - ciphertext_digest, http_response_plaintext_digest_hashed); + const http_response_plaintext_digest = PolynomialDigest(http_response_0_padded, ciphertext_digest, BigInt(0)); + const correct_plaintext_authentication_step_out = modAdd(init_nivc_input - ciphertext_digest, http_response_plaintext_digest); assert.deepEqual(plaintext_authentication.step_out, correct_plaintext_authentication_step_out); // Run HTTPVerification - const start_line_digest = PolynomialDigest(http_start_line, ciphertext_digest); - const header_0_digest = PolynomialDigest(http_header_0, ciphertext_digest); - const header_1_digest = PolynomialDigest(http_header_1, ciphertext_digest); + const start_line_digest = PolynomialDigest(http_start_line, ciphertext_digest, BigInt(0)); + const header_0_digest = PolynomialDigest(http_header_0, ciphertext_digest, BigInt(0)); + const header_1_digest = PolynomialDigest(http_header_1, ciphertext_digest, BigInt(0)); let main_digests = Array(MAX_NUMBER_OF_HEADERS + 1).fill(0); main_digests[0] = start_line_digest; @@ -123,13 +124,13 @@ describe("Example NIVC Proof", async () => { const padded_http_body = http_body.concat(Array(DATA_BYTES - http_body.length).fill(0)); let http_verification_step_out = BigInt((http_verification.step_out as number[])[0]); - let body_digest = PolynomialDigest(http_body, ciphertext_digest); + let body_digest = PolynomialDigest(http_body, ciphertext_digest, BigInt(0)); const body_digest_hashed = poseidon1([body_digest]); const start_line_digest_digest_hashed = poseidon1([start_line_digest]); const header_0_digest_hashed = poseidon1([header_0_digest]); const header_1_digest_hashed = poseidon1([header_1_digest]); - const correct_http_verification_step_out = modAdd(step_in - start_line_digest_digest_hashed - header_0_digest_hashed - header_1_digest_hashed - http_response_plaintext_digest_hashed, body_digest_hashed); + const correct_http_verification_step_out = modAdd(step_in - start_line_digest_digest_hashed - header_0_digest_hashed - header_1_digest_hashed - http_response_plaintext_digest, body_digest_hashed); assert.deepEqual(http_verification_step_out, correct_http_verification_step_out); // Run JSONExtraction @@ -148,7 +149,7 @@ describe("Example NIVC Proof", async () => { const [stack, treeHashes] = jsonTreeHasher(ciphertext_digest, keySequence, MAX_STACK_HEIGHT); const sequence_digest = compressTreeHash(ciphertext_digest, [stack, treeHashes]); - const value_digest = PolynomialDigest(targetValue, ciphertext_digest); + const value_digest = PolynomialDigest(targetValue, ciphertext_digest, BigInt(0)); let json_extraction = await JSONExtraction.compute({ step_in: http_verification_step_out, @@ -163,15 +164,29 @@ describe("Example NIVC Proof", async () => { it("multiple ciphertext packets", async () => { // Run PlaintextAuthentication + assert.deepEqual(http_response_ciphertext.length / 2, http_response_ciphertext_dup.length); + + let http_response_plaintext_1 = http_response_plaintext.slice(0, http_response_plaintext.length / 2); + let http_response_plaintext_2 = http_response_plaintext.slice(http_response_plaintext.length / 2); + let http_response_ciphertext_1 = http_response_ciphertext.slice(0, http_response_ciphertext.length / 2); + let http_response_ciphertext_2 = http_response_ciphertext_dup; + let http_response_padded = http_response_plaintext.concat(Array(DATA_BYTES - http_response_plaintext.length).fill(-1)); - let http_response_0_padded = http_response_plaintext.concat(Array(DATA_BYTES - http_start_line.length).fill(0)); - let ciphertext_padded = http_response_ciphertext.concat(Array(DATA_BYTES - http_response_ciphertext.length).fill(-1)); - let ciphertext_padded_2 = http_response_ciphertext_dup.concat(Array(DATA_BYTES - http_response_ciphertext_dup.length).fill(-1)); - assert.deepEqual(http_response_ciphertext.length, http_response_ciphertext_dup.length); + let http_response1_padded = http_response_plaintext_1.concat(Array(DATA_BYTES - http_response_plaintext_1.length).fill(-1)); + let http_response1_0_padded = http_response_plaintext_1.concat(Array(DATA_BYTES - http_response_plaintext_1.length).fill(0)); + let http_response2_padded = http_response_plaintext_2.concat(Array(DATA_BYTES - http_response_plaintext_2.length).fill(-1)); + let http_response2_0_padded = http_response_plaintext_2.concat(Array(DATA_BYTES - http_response_plaintext_2.length).fill(0)); + let ciphertext1_padded = http_response_ciphertext_1.concat(Array(DATA_BYTES - http_response_ciphertext_1.length).fill(-1)); + let ciphertext2_padded = http_response_ciphertext_2.concat(Array(DATA_BYTES - http_response_ciphertext_2.length).fill(-1)); - const [ciphertext_digest, init_nivc_input] = InitialDigest(MockManifest(), [ciphertext_padded, ciphertext_padded_2], MAX_STACK_HEIGHT); + const [ciphertext_digest, init_nivc_input] = InitialDigest(MockManifest(), [ciphertext1_padded, ciphertext2_padded], MAX_STACK_HEIGHT); - assert.deepEqual(ciphertext_digest, check_ciphertext_digest_dup + check_ciphertext_digest); + let pt11Digest = PolynomialDigest(http_response1_0_padded, ciphertext_digest, BigInt(0)); + let pt21Digest = PolynomialDigest(http_response2_0_padded, ciphertext_digest, BigInt(http_response_plaintext_1.length)); + let ptDigest = PolynomialDigest(http_response_plaintext, ciphertext_digest, BigInt(0)); + assert.deepEqual(pt11Digest + pt21Digest, ptDigest); + + // assert.deepEqual(ciphertext_digest, check_ciphertext_digest_dup + check_ciphertext_digest); // assert.deepEqual(init_nivc_input, check_init_nivc_input_dup); const counterBits = uintArray32ToBits([1])[0]; @@ -179,34 +194,39 @@ describe("Example NIVC Proof", async () => { const nonceIn = toInput(Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00])); let plaintext_authentication1 = await PlaintextAuthentication.compute({ step_in: init_nivc_input, - plaintext: http_response_padded, + plaintext: http_response1_padded, key: keyIn, nonce: nonceIn, counter: counterBits, + plaintext_index_counter: 0, + ciphertext_digest, }, ["step_out"]); - let ct1Digest = DataHasher(ciphertext_padded); - assert.deepEqual(plaintext_authentication1.step_out, init_nivc_input - ct1Digest); + let pt1Digest = PolynomialDigest(http_response1_0_padded, ciphertext_digest, BigInt(0)); + let ct1Digest = DataHasher(ciphertext1_padded); + assert.deepEqual(plaintext_authentication1.step_out, init_nivc_input - ct1Digest + pt1Digest); const nonceIn2 = toInput(Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x01])); let plaintext_authentication2 = await PlaintextAuthentication.compute({ step_in: plaintext_authentication1.step_out, - plaintext: http_response_padded, + plaintext: http_response2_padded, key: keyIn, nonce: nonceIn2, counter: counterBits, + plaintext_index_counter: http_response_plaintext_1.length, + ciphertext_digest, }, ["step_out"]); - let ct2Digest = DataHasher(ciphertext_padded_2); - assert.deepEqual(plaintext_authentication2.step_out, init_nivc_input - ct1Digest - ct2Digest); + let pt2Digest = PolynomialDigest(http_response2_0_padded, ciphertext_digest, BigInt(http_response_plaintext_1.length)); + let ct2Digest = DataHasher(ciphertext2_padded); + assert.deepEqual(plaintext_authentication2.step_out, init_nivc_input - ct1Digest - ct2Digest + pt1Digest + pt2Digest); - const http_response_plaintext_digest = PolynomialDigest(http_response_0_padded, ciphertext_digest); - const http_response_plaintext_digest_hashed = poseidon1([http_response_plaintext_digest]); + const http_response_plaintext_digest = PolynomialDigest(http_response_plaintext, ciphertext_digest, BigInt(0)); // Run HTTPVerification - const start_line_digest = PolynomialDigest(http_start_line, ciphertext_digest); - const header_0_digest = PolynomialDigest(http_header_0, ciphertext_digest); - const header_1_digest = PolynomialDigest(http_header_1, ciphertext_digest); + const start_line_digest = PolynomialDigest(http_start_line, ciphertext_digest, BigInt(0)); + const header_0_digest = PolynomialDigest(http_header_0, ciphertext_digest, BigInt(0)); + const header_1_digest = PolynomialDigest(http_header_1, ciphertext_digest, BigInt(0)); let main_digests = Array(MAX_NUMBER_OF_HEADERS + 1).fill(0); main_digests[0] = start_line_digest; @@ -223,13 +243,13 @@ describe("Example NIVC Proof", async () => { const padded_http_body = http_body.concat(Array(DATA_BYTES - http_body.length).fill(0)); let http_verification_step_out = BigInt((http_verification.step_out as number[])[0]); - let body_digest = PolynomialDigest(http_body, ciphertext_digest); + let body_digest = PolynomialDigest(http_body, ciphertext_digest, BigInt(0)); const body_digest_hashed = poseidon1([body_digest]); const start_line_digest_digest_hashed = poseidon1([start_line_digest]); const header_0_digest_hashed = poseidon1([header_0_digest]); const header_1_digest_hashed = poseidon1([header_1_digest]); - const correct_http_verification_step_out = modAdd(step_in - start_line_digest_digest_hashed - header_0_digest_hashed - header_1_digest_hashed, body_digest_hashed); + const correct_http_verification_step_out = modAdd(step_in - http_response_plaintext_digest - start_line_digest_digest_hashed - header_0_digest_hashed - header_1_digest_hashed, body_digest_hashed); assert.deepEqual(http_verification_step_out, correct_http_verification_step_out); // Run JSONExtraction @@ -248,7 +268,7 @@ describe("Example NIVC Proof", async () => { const [stack, treeHashes] = jsonTreeHasher(ciphertext_digest, keySequence, MAX_STACK_HEIGHT); const sequence_digest = compressTreeHash(ciphertext_digest, [stack, treeHashes]); - const value_digest = PolynomialDigest(targetValue, ciphertext_digest); + const value_digest = PolynomialDigest(targetValue, ciphertext_digest, BigInt(0)); let json_extraction = await JSONExtraction.compute({ step_in: http_verification_step_out, From 40bebe73404151ece61e6a9d411e64a2301cb7ec Mon Sep 17 00:00:00 2001 From: lonerapier Date: Thu, 16 Jan 2025 18:14:46 +0530 Subject: [PATCH 5/8] add file generation check --- Makefile | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1551d75..0366e1d 100644 --- a/Makefile +++ b/Makefile @@ -7,12 +7,13 @@ CIRCOM_FILES := $(wildcard $(addsuffix /*_*b.circom,$(TARGET_DIRS))) # Extract target sizes (e.g., "512b", "1024b") from directory names TARGET_SIZES := $(patsubst builds/target_%,%,$(TARGET_DIRS)) + # Create artifacts directories $(shell mkdir -p $(addsuffix /artifacts,$(TARGET_DIRS))) # Default target .PHONY: all clean -all: build params +all: build check params # Build target .PHONY: build @@ -34,6 +35,22 @@ params: cargo +nightly run --release -- "$$target_dir/artifacts" "$${size}b" "5" || exit 1; \ done +.PHONY: check +check: + @echo "Checking that all .bin artifacts exist..." + @set -e; \ + for circuit in $(CIRCOM_FILES); do \ + f1="$$(dirname $${circuit})/artifacts/$$(basename $${circuit} .circom).bin"; \ + f2="$$(dirname $${circuit})/artifacts/$$(basename $${circuit} .circom).r1cs"; \ + if [ ! -f "$${f1}" ] || [ ! -f "$${f2}" ]; then \ + echo "ERROR: Missing artifact '$${f1}', '$${f2}"; \ + exit 1; \ + else \ + echo "OK: $${f1}, $${f2}"; \ + fi; \ + done + @echo "All artifacts present!" + # Clean target clean: rm -rf $(addsuffix /artifacts,$(TARGET_DIRS)) From 1a67a7ca34aaa8485b12fb44e9a70fdacec2a0a3 Mon Sep 17 00:00:00 2001 From: lonerapier Date: Fri, 17 Jan 2025 19:37:44 +0530 Subject: [PATCH 6/8] add complete test case --- circuits/http/verification.circom | 8 +- circuits/test/common/index.ts | 2 +- circuits/test/full/full.test.ts | 114 +++++++++++++++++++++++++++- circuits/test/full/testCase.test.ts | 31 ++++++++ 4 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 circuits/test/full/testCase.test.ts diff --git a/circuits/http/verification.circom b/circuits/http/verification.circom index 61b8d57..934928d 100644 --- a/circuits/http/verification.circom +++ b/circuits/http/verification.circom @@ -1,7 +1,6 @@ pragma circom 2.1.9; include "machine.circom"; -// TODO: we don't need this if we do a poly digest of the plaintext in authentication circuit include "../utils/hash.circom"; template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS) { @@ -19,7 +18,8 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS) { } signal pt_digest <== PolynomialDigest(DATA_BYTES)(zeroed_data, ciphertext_digest); - signal input main_digests[MAX_NUMBER_OF_HEADERS + 1]; // Contains digests of start line and all intended headers (up to `MAX_NUMBER_OF_HEADERS`) + // Contains digests of start line and all intended headers (up to `MAX_NUMBER_OF_HEADERS`) + signal input main_digests[MAX_NUMBER_OF_HEADERS + 1]; signal not_contained[MAX_NUMBER_OF_HEADERS + 1]; var num_to_match = MAX_NUMBER_OF_HEADERS + 1; for(var i = 0 ; i < MAX_NUMBER_OF_HEADERS + 1 ; i++) { @@ -106,7 +106,7 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS) { State[DATA_BYTES - 1].next_parsing_body === 1; State[DATA_BYTES - 1].next_line_status === 0; - // TODO: Need to subtract all the header digests here and also wrap them in poseidon. We can use the ones from the input to make this cheaper since they're verified in this circuit! + // subtract all the header digests here and also wrap them in poseidon. signal body_digest_hashed <== Poseidon(1)([body_digest[DATA_BYTES - 1]]); signal option_hash[MAX_NUMBER_OF_HEADERS + 1]; signal main_digests_hashed[MAX_NUMBER_OF_HEADERS + 1]; @@ -117,5 +117,5 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS) { accumulated_main_digests_hashed += main_digests_hashed[i]; } - step_out[0] <== step_in[0] + body_digest_hashed - accumulated_main_digests_hashed - pt_digest; // TODO: data_digest is really plaintext_digest from before, consider changing names + step_out[0] <== step_in[0] + body_digest_hashed - accumulated_main_digests_hashed - pt_digest; } diff --git a/circuits/test/common/index.ts b/circuits/test/common/index.ts index 2d850d4..ecdefaf 100644 --- a/circuits/test/common/index.ts +++ b/circuits/test/common/index.ts @@ -429,7 +429,7 @@ interface ManifestResponse { }; } -interface Manifest { +export interface Manifest { response: ManifestResponse; } diff --git a/circuits/test/full/full.test.ts b/circuits/test/full/full.test.ts index 4fbaa76..2397086 100644 --- a/circuits/test/full/full.test.ts +++ b/circuits/test/full/full.test.ts @@ -1,5 +1,7 @@ import { assert } from "chai"; import { circomkit, WitnessTester, uintArray32ToBits, http_response_plaintext, http_response_ciphertext, http_start_line, http_header_0, http_header_1, http_body, PolynomialDigest, strToBytes, JsonMaskType, jsonTreeHasher, compressTreeHash, modAdd, InitialDigest, MockManifest, http_response_ciphertext_dup } from "../common"; +import { test_case, TestCaseManifest } from "./testCase.test"; + import { toInput } from "../chacha20/authentication.test"; import { poseidon1 } from "poseidon-lite"; import { DataHasher } from "../common/poseidon"; @@ -39,9 +41,9 @@ function to_nonce(iv: Uint8Array, seq: number): Uint8Array { let nonce = new Uint8Array(12); nonce.fill(0); - for (let i = 0; i < 8; i++) { - nonce[12 - i] = (seq >> (8 * i)) & 0xff; - } + // nonce[4..].copy_from_slice(&seq.to_be_bytes()); + const seqBytes = new Uint8Array(new BigUint64Array([BigInt(seq)]).buffer).reverse(); + nonce.set(seqBytes, 4); nonce.forEach((_, i) => { nonce[i] ^= iv[i]; @@ -279,4 +281,110 @@ describe("Example NIVC Proof", async () => { }, ["step_out"]); assert.deepEqual(json_extraction.step_out, value_digest); }); + + it("github example", async () => { + + let http_response_plaintext = test_case.plaintext; + let http_response_ciphertext = test_case.ciphertext; + let key = test_case.key; + let iv = test_case.iv; + let manifest = TestCaseManifest(); + + let http_response_combined = http_response_plaintext[0].concat(http_response_plaintext[1]); + let http_response_padded = http_response_combined.concat(Array(DATA_BYTES - http_response_combined.length).fill(-1)); + let http_response1_padded = http_response_plaintext[0].concat(Array(DATA_BYTES - http_response_plaintext[0].length).fill(-1)); + let http_response1_0_padded = http_response_plaintext[0].concat(Array(DATA_BYTES - http_response_plaintext[0].length).fill(0)); + let http_response2_padded = http_response_plaintext[1].concat(Array(DATA_BYTES - http_response_plaintext[1].length).fill(-1)); + let http_response2_0_padded = http_response_plaintext[1].concat(Array(DATA_BYTES - http_response_plaintext[1].length).fill(0)); + let ciphertext1_padded = http_response_ciphertext[0].concat(Array(DATA_BYTES - http_response_ciphertext[0].length).fill(-1)); + let ciphertext2_padded = http_response_ciphertext[1].concat(Array(DATA_BYTES - http_response_ciphertext[1].length).fill(-1)); + + const [ciphertext_digest, init_nivc_input] = InitialDigest(manifest, [ciphertext1_padded, ciphertext2_padded], MAX_STACK_HEIGHT); + + const counterBits = uintArray32ToBits([1])[0]; + const keyIn = toInput(Buffer.from(key)); + + let nonce1 = to_nonce(Uint8Array.from(iv), 1); + const nonceIn = toInput(Buffer.from(nonce1)); + let plaintext_authentication1 = await PlaintextAuthentication.compute({ + step_in: init_nivc_input, + plaintext: http_response1_padded, + key: keyIn, + nonce: nonceIn, + counter: counterBits, + plaintext_index_counter: 0, + ciphertext_digest, + }, ["step_out"]); + + let pt1Digest = PolynomialDigest(http_response1_0_padded, ciphertext_digest, BigInt(0)); + let ct1Digest = DataHasher(ciphertext1_padded); + assert.deepEqual(plaintext_authentication1.step_out, init_nivc_input - ct1Digest + pt1Digest); + + let nonce2 = to_nonce(Uint8Array.from(iv), 2); + const nonceIn2 = toInput(Buffer.from(nonce2)); + let plaintext_authentication2 = await PlaintextAuthentication.compute({ + step_in: plaintext_authentication1.step_out, + plaintext: http_response2_padded, + key: keyIn, + nonce: nonceIn2, + counter: counterBits, + plaintext_index_counter: http_response_plaintext[0].length, + ciphertext_digest, + }, ["step_out"]); + + let pt2Digest = PolynomialDigest(http_response2_0_padded, ciphertext_digest, BigInt(http_response_plaintext[0].length)); + let ct2Digest = DataHasher(ciphertext2_padded); + assert.deepEqual(plaintext_authentication2.step_out, modAdd(init_nivc_input - ct1Digest - ct2Digest, pt1Digest + pt2Digest)); + + const http_response_plaintext_digest = PolynomialDigest(http_response_combined, ciphertext_digest, BigInt(0)); + + // Run HTTPVerification + const start_line_digest = PolynomialDigest(http_start_line, ciphertext_digest, BigInt(0)); + let header_0 = test_case.header_0; + const header_0_digest = PolynomialDigest(header_0, ciphertext_digest, BigInt(0)); + + let main_digests = Array(MAX_NUMBER_OF_HEADERS + 1).fill(0); + main_digests[0] = start_line_digest; + main_digests[1] = header_0_digest; + + let step_in = BigInt(plaintext_authentication2.step_out.toString(10)); + let http_verification = await HTTPVerification.compute({ + step_in, + ciphertext_digest, + data: http_response_padded, + main_digests, + }, ["step_out"]); + console.log("http_verification", http_verification.step_out); + let http_body = http_response_plaintext[1]; + const padded_http_body = http_body.concat(Array(DATA_BYTES - http_body.length).fill(0)); + let http_verification_step_out = BigInt((http_verification.step_out as number[])[0]); + let body_digest = PolynomialDigest(http_body, ciphertext_digest, BigInt(0)); + + const body_digest_hashed = poseidon1([body_digest]); + const start_line_digest_digest_hashed = poseidon1([start_line_digest]); + const header_0_digest_hashed = poseidon1([header_0_digest]); + const correct_http_verification_step_out = modAdd(step_in - http_response_plaintext_digest - start_line_digest_digest_hashed - header_0_digest_hashed, body_digest_hashed); + assert.deepEqual(http_verification_step_out, correct_http_verification_step_out); + + // Run JSONExtraction + const KEY0 = strToBytes("hello"); + const targetValue = strToBytes("world"); + const keySequence: JsonMaskType[] = [ + { type: "Object", value: KEY0 }, + ]; + + const [stack, treeHashes] = jsonTreeHasher(ciphertext_digest, keySequence, MAX_STACK_HEIGHT); + const sequence_digest = compressTreeHash(ciphertext_digest, [stack, treeHashes]); + const value_digest = PolynomialDigest(targetValue, ciphertext_digest, BigInt(0)); + + let json_extraction = await JSONExtraction.compute({ + step_in: http_verification_step_out, + ciphertext_digest, + data: padded_http_body, + value_digest, + sequence_digest, + }, ["step_out"]); + console.log("json_extraction", json_extraction.step_out); + assert.deepEqual(json_extraction.step_out, value_digest); + }); }); diff --git a/circuits/test/full/testCase.test.ts b/circuits/test/full/testCase.test.ts new file mode 100644 index 0000000..e84f51c --- /dev/null +++ b/circuits/test/full/testCase.test.ts @@ -0,0 +1,31 @@ +import { strToBytes, Manifest, JsonMaskType } from "../common"; + +export const test_case = { + "plaintext": [[72, 84, 84, 80, 47, 49, 46, 49, 32, 50, 48, 48, 32, 79, 75, 13, 10, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 58, 32, 99, 108, 111, 115, 101, 13, 10, 67, 111, 110, 116, 101, 110, 116, 45, 76, 101, 110, 103, 116, 104, 58, 32, 50, 50, 13, 10, 67, 97, 99, 104, 101, 45, 67, 111, 110, 116, 114, 111, 108, 58, 32, 109, 97, 120, 45, 97, 103, 101, 61, 51, 48, 48, 13, 10, 67, 111, 110, 116, 101, 110, 116, 45, 83, 101, 99, 117, 114, 105, 116, 121, 45, 80, 111, 108, 105, 99, 121, 58, 32, 100, 101, 102, 97, 117, 108, 116, 45, 115, 114, 99, 32, 39, 110, 111, 110, 101, 39, 59, 32, 115, 116, 121, 108, 101, 45, 115, 114, 99, 32, 39, 117, 110, 115, 97, 102, 101, 45, 105, 110, 108, 105, 110, 101, 39, 59, 32, 115, 97, 110, 100, 98, 111, 120, 13, 10, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 32, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 116, 102, 45, 56, 13, 10, 69, 84, 97, 103, 58, 32, 34, 101, 48, 101, 54, 53, 49, 48, 99, 49, 102, 99, 49, 51, 98, 51, 97, 54, 51, 97, 99, 98, 99, 48, 54, 49, 53, 101, 101, 48, 55, 97, 52, 57, 53, 50, 56, 55, 51, 97, 56, 100, 97, 55, 55, 48, 50, 55, 100, 48, 48, 52, 49, 50, 102, 99, 99, 102, 49, 97, 53, 99, 101, 50, 57, 34, 13, 10, 83, 116, 114, 105, 99, 116, 45, 84, 114, 97, 110, 115, 112, 111, 114, 116, 45, 83, 101, 99, 117, 114, 105, 116, 121, 58, 32, 109, 97, 120, 45, 97, 103, 101, 61, 51, 49, 53, 51, 54, 48, 48, 48, 13, 10, 88, 45, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 45, 79, 112, 116, 105, 111, 110, 115, 58, 32, 110, 111, 115, 110, 105, 102, 102, 13, 10, 88, 45, 70, 114, 97, 109, 101, 45, 79, 112, 116, 105, 111, 110, 115, 58, 32, 100, 101, 110, 121, 13, 10, 88, 45, 88, 83, 83, 45, 80, 114, 111, 116, 101, 99, 116, 105, 111, 110, 58, 32, 49, 59, 32, 109, 111, 100, 101, 61, 98, 108, 111, 99, 107, 13, 10, 88, 45, 71, 105, 116, 72, 117, 98, 45, 82, 101, 113, 117, 101, 115, 116, 45, 73, 100, 58, 32, 53, 53, 68, 50, 58, 51, 49, 70, 66, 52, 66, 58, 57, 69, 50, 66, 49, 58, 69, 57, 51, 66, 68, 58, 54, 55, 56, 65, 50, 54, 55, 50, 13, 10, 65, 99, 99, 101, 112, 116, 45, 82, 97, 110, 103, 101, 115, 58, 32, 98, 121, 116, 101, 115, 13, 10, 68, 97, 116, 101, 58, 32, 70, 114, 105, 44, 32, 49, 55, 32, 74, 97, 110, 32, 50, 48, 50, 53, 32, 48, 57, 58, 52, 52, 58, 49, 57, 32, 71, 77, 84, 13, 10, 86, 105, 97, 58, 32, 49, 46, 49, 32, 118, 97, 114, 110, 105, 115, 104, 13, 10, 88, 45, 83, 101, 114, 118, 101, 100, 45, 66, 121, 58, 32, 99, 97, 99, 104, 101, 45, 104, 121, 100, 49, 49, 48, 48, 48, 51, 53, 45, 72, 89, 68, 13, 10, 88, 45, 67, 97, 99, 104, 101, 58, 32, 77, 73, 83, 83, 13, 10, 88, 45, 67, 97, 99, 104, 101, 45, 72, 105, 116, 115, 58, 32, 48, 13, 10, 88, 45, 84, 105, 109, 101, 114, 58, 32, 83, 49, 55, 51, 55, 49, 48, 55, 48, 53, 57, 46, 57, 54, 51, 54, 48, 55, 44, 86, 83, 48, 44, 86, 69, 50, 55, 52, 13, 10, 86, 97, 114, 121, 58, 32, 65, 117, 116, 104, 111, 114, 105, 122, 97, 116, 105, 111, 110, 44, 65, 99, 99, 101, 112, 116, 45, 69, 110, 99, 111, 100, 105, 110, 103, 44, 79, 114, 105, 103, 105, 110, 13, 10, 65, 99, 99, 101, 115, 115, 45, 67, 111, 110, 116, 114, 111, 108, 45, 65, 108, 108, 111, 119, 45, 79, 114, 105, 103, 105, 110, 58, 32, 42, 13, 10, 67, 114, 111, 115, 115, 45, 79, 114, 105, 103, 105, 110, 45, 82, 101, 115, 111, 117, 114, 99, 101, 45, 80, 111, 108, 105, 99, 121, 58, 32, 99, 114, 111, 115, 115, 45, 111, 114, 105, 103, 105, 110, 13, 10, 88, 45, 70, 97, 115, 116, 108, 121, 45, 82, 101, 113, 117, 101, 115, 116, 45, 73, 68, 58, 32, 53, 54, 53, 55, 51, 100, 53, 54, 49, 52, 54, 48, 102, 48, 57, 52, 97, 56, 54, 57, 101, 49, 100, 53, 102, 98, 97, 50, 54, 100, 99, 101, 52, 100, 54, 49, 55, 99, 50, 101, 13, 10, 69, 120, 112, 105, 114, 101, 115, 58, 32, 70, 114, 105, 44, 32, 49, 55, 32, 74, 97, 110, 32, 50, 48, 50, 53, 32, 48, 57, 58, 52, 57, 58, 49, 57, 32, 71, 77, 84, 13, 10, 83, 111, 117, 114, 99, 101, 45, 65, 103, 101, 58, 32, 48, 13, 10, 13, 10], [123, 10, 32, 32, 34, 104, 101, 108, 108, 111, 34, 58, 32, 34, 119, 111, 114, 108, 100, 34, 10, 125]], + "ciphertext": [[212, 211, 72, 95, 188, 93, 171, 80, 240, 211, 106, 143, 28, 70, 130, 157, 76, 194, 90, 207, 102, 233, 239, 157, 229, 161, 195, 78, 133, 251, 249, 56, 29, 75, 167, 251, 29, 32, 194, 210, 102, 2, 193, 170, 83, 144, 56, 185, 71, 10, 75, 211, 123, 222, 28, 175, 61, 104, 124, 117, 45, 205, 100, 163, 126, 77, 251, 245, 171, 147, 19, 104, 106, 53, 142, 20, 233, 217, 163, 148, 180, 39, 208, 156, 42, 119, 64, 47, 183, 117, 141, 98, 254, 229, 29, 128, 130, 204, 67, 13, 141, 196, 68, 7, 110, 246, 66, 149, 248, 35, 109, 45, 215, 134, 171, 156, 136, 14, 74, 86, 150, 152, 14, 75, 158, 189, 225, 252, 255, 98, 217, 235, 45, 152, 210, 43, 73, 98, 40, 139, 83, 83, 58, 253, 108, 137, 134, 239, 212, 128, 122, 200, 223, 60, 176, 159, 76, 169, 134, 132, 41, 236, 217, 38, 47, 11, 8, 22, 65, 42, 63, 245, 232, 28, 142, 215, 11, 20, 178, 153, 46, 237, 69, 6, 100, 150, 96, 184, 137, 203, 195, 45, 174, 209, 27, 223, 211, 47, 66, 74, 69, 78, 245, 13, 64, 126, 244, 133, 42, 187, 28, 44, 59, 234, 239, 223, 216, 12, 126, 77, 151, 248, 180, 210, 243, 92, 9, 111, 140, 200, 5, 240, 121, 196, 92, 19, 54, 199, 177, 130, 124, 95, 177, 99, 205, 97, 195, 24, 51, 30, 70, 186, 228, 235, 232, 73, 205, 10, 233, 102, 118, 205, 236, 250, 3, 113, 16, 94, 64, 240, 23, 1, 29, 207, 69, 184, 41, 42, 87, 88, 116, 45, 163, 79, 228, 217, 160, 13, 12, 189, 95, 125, 121, 58, 36, 250, 173, 29, 189, 125, 98, 54, 249, 26, 37, 251, 223, 28, 74, 127, 255, 178, 197, 86, 109, 234, 188, 167, 137, 204, 173, 57, 65, 36, 115, 151, 99, 2, 147, 60, 12, 48, 235, 81, 3, 243, 82, 31, 122, 35, 150, 68, 124, 228, 122, 215, 23, 115, 107, 202, 168, 157, 116, 186, 202, 213, 238, 58, 101, 107, 17, 107, 89, 251, 200, 50, 90, 20, 94, 94, 215, 238, 215, 226, 47, 129, 38, 196, 150, 92, 79, 51, 198, 42, 162, 23, 40, 172, 120, 160, 20, 183, 105, 91, 231, 166, 168, 89, 39, 160, 168, 99, 160, 15, 68, 94, 85, 76, 68, 195, 9, 54, 125, 200, 35, 30, 218, 206, 76, 176, 247, 97, 107, 46, 239, 56, 154, 138, 119, 66, 234, 74, 194, 145, 130, 230, 23, 69, 136, 71, 56, 136, 109, 106, 189, 153, 3, 7, 91, 71, 237, 242, 52, 10, 165, 116, 245, 246, 188, 156, 99, 113, 230, 45, 226, 222, 34, 67, 152, 63, 161, 154, 142, 17, 17, 113, 154, 131, 170, 142, 183, 218, 223, 241, 165, 38, 125, 156, 228, 15, 38, 133, 31, 89, 6, 192, 99, 20, 15, 5, 49, 14, 15, 224, 82, 183, 196, 234, 90, 149, 156, 107, 42, 248, 179, 205, 102, 127, 7, 152, 209, 119, 216, 124, 217, 243, 23, 130, 74, 224, 119, 82, 38, 87, 67, 156, 23, 72, 87, 254, 111, 145, 12, 218, 138, 176, 220, 201, 106, 169, 138, 19, 88, 224, 228, 87, 119, 53, 24, 42, 73, 107, 237, 50, 60, 135, 181, 235, 116, 3, 126, 97, 236, 239, 217, 77, 134, 33, 26, 139, 2, 217, 5, 128, 31, 40, 251, 77, 96, 237, 230, 234, 136, 253, 164, 210, 2, 146, 33, 100, 230, 115, 159, 76, 232, 52, 122, 106, 131, 41, 239, 194, 85, 14, 198, 38, 157, 254, 235, 132, 110, 214, 218, 125, 132, 99, 107, 173, 17, 1, 138, 64, 253, 108, 17, 125, 46, 41, 6, 76, 164, 54, 31, 194, 219, 12, 62, 217, 175, 184, 206, 164, 233, 104, 255, 54, 203, 75, 95, 44, 119, 213, 244, 163, 12, 178, 71, 82, 81, 143, 72, 163, 191, 244, 141, 15, 183, 194, 24, 226, 32, 45, 243, 5, 88, 151, 175, 117, 30, 126, 17, 45, 68, 89, 78, 163, 33, 96, 248, 164, 146, 158, 143, 28, 152, 161, 103, 200, 198, 73, 124, 204, 37, 179, 178, 153, 94, 131, 172, 156, 198, 225, 17, 188, 103, 87, 123, 14, 232, 34, 68, 147, 141, 60, 223, 208, 10, 247, 199, 251, 71, 19, 77, 210, 5, 212, 91, 148, 199, 127, 58, 71, 173, 86, 24, 52, 129, 245, 63, 187, 13, 242, 140, 74, 63, 149, 115, 236, 230, 68, 219, 30, 194, 171, 238, 104, 208, 125, 72, 24, 201, 94, 31, 48, 71, 65, 13, 76, 216, 226, 210, 162, 225, 157, 213, 197, 236, 141, 150, 199, 9, 81, 39, 15, 193, 254, 161, 183, 75, 170, 191, 149, 169, 81, 233, 69, 43, 80, 209, 111, 122, 181, 13, 127, 109, 41, 224, 95, 210, 252, 130, 91, 190, 97, 115, 1, 43, 161, 37, 27, 238, 160, 8, 40, 210, 124, 183, 106, 152, 243, 89, 246, 1, 235, 242, 250, 194, 153, 78, 252, 155, 88, 57, 93, 66, 179, 172, 112, 21, 136, 134, 181, 121, 22, 137, 223, 226, 108, 190, 49, 217, 193, 243, 53, 132, 216, 142, 154, 64, 60, 160, 134], [166, 14, 37, 201, 179, 42, 196, 229, 65, 36, 34, 155, 207, 66, 18, 125, 60, 107, 190, 196, 98, 136]], + "key": [199, 85, 215, 51, 193, 79, 188, 150, 234, 65, 25, 99, 54, 218, 85, 36, 255, 242, 86, 238, 247, 228, 121, 198, 255, 26, 251, 71, 72, 88, 255, 219], + "iv": [168, 108, 222, 57, 204, 45, 63, 152, 117, 106, 59, 112], + "header_0": [67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 32, 116, 101, 120, 116, 47, 112, 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 116, 102, 45, 56], +} + +export function TestCaseManifest(): Manifest { + const headers: Record = { + "Content-Type": ["text/plain; charset=utf-8"], + }; + + const jsonSequence: JsonMaskType[] = [ + { type: "Object", value: strToBytes("hello") } + ]; + + return { + response: { + status: "200", + version: "HTTP/1.1", + message: "OK", + headers: headers, + body: { + json: jsonSequence + } + } + }; +} \ No newline at end of file From eef739105bcd5d8f07c784cfbc8c9a9637c70ba1 Mon Sep 17 00:00:00 2001 From: lonerapier Date: Fri, 17 Jan 2025 19:38:02 +0530 Subject: [PATCH 7/8] add circuit diagram to readme --- README.md | 6 +++--- docs/images/v0.7.5.jpg | Bin 0 -> 273322 bytes 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 docs/images/v0.7.5.jpg diff --git a/README.md b/README.md index ce212e8..4727be5 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,10 @@ ## Overview -`web-prover-circuits` is a project focused on implementing parsers and extractors/selective-disclosure for various data formats inside zero-knowledge circuits. -Specifically, these are designed to be used in an NIVC folding scheme. +`web-prover-circuits` is a project focused on implementing parsers and extractors/selective-disclosure for various data formats inside zero-knowledge circuits. +Specifically, these are designed to be used in an NIVC folding scheme. Currently, our program layout looks like this: -![v0.7.0](docs/images/v0.7.0.png) +![v0.7.5](docs/images/v0.7.5.png) ## Repository Structure diff --git a/docs/images/v0.7.5.jpg b/docs/images/v0.7.5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac8340feb449c6d9c29c538d295efe7017c6748e GIT binary patch literal 273322 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
<4*SISv`e5DW)FA&x#ddO(>&)aZ9%J5M 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
    RbpZW`F=ML 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 mK$rlcaNWKBJ5>EKEslK!H$ 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 U1@|MLRWGwx(-cEjKDK)EKR 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 Dz0Ew& literal 0 HcmV?d00001 From 53d33e14b6e6b3d3ea3e6546948ceb2f39ee56fb Mon Sep 17 00:00:00 2001 From: lonerapier Date: Fri, 17 Jan 2025 19:42:28 +0530 Subject: [PATCH 8/8] update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 07ecfab..a444d03 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "web-prover-circuits", "description": "ZK Circuits for WebProofs", - "version": "0.7.3", + "version": "0.7.4", "license": "Apache-2.0", "repository": { "type": "git",