diff --git a/packages/circuits/helpers/body-masker.circom b/packages/circuits/helpers/body-masker.circom new file mode 100644 index 000000000..f3178ddc2 --- /dev/null +++ b/packages/circuits/helpers/body-masker.circom @@ -0,0 +1,11 @@ +pragma circom 2.1.6; + +template BodyMasker(maxBodyLength) { + signal input body[maxBodyLength]; + signal input mask[maxBodyLength]; + signal output masked_body[maxBodyLength]; + + for (var i = 0; i < maxBodyLength; i++) { + masked_body[i] <== body[i] * mask[i]; + } +} \ No newline at end of file diff --git a/packages/circuits/tests/body-masker.test.ts b/packages/circuits/tests/body-masker.test.ts new file mode 100644 index 000000000..7e966a0cb --- /dev/null +++ b/packages/circuits/tests/body-masker.test.ts @@ -0,0 +1,30 @@ +import { wasm as wasm_tester } from "circom_tester"; +import path from "path"; + +describe("BodyMasker Circuit", () => { + let circuit: any; + + beforeAll(async () => { + circuit = await wasm_tester( + path.join(__dirname, "./test-circuits/body-masker-test.circom"), + { + recompile: true, + include: path.join(__dirname, "../../../node_modules"), + output: path.join(__dirname, "./compiled-test-circuits"), + } + ); + }); + + it("should mask the body correctly", async () => { + const input = { + body: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + mask: [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], + }; + + const witness = await circuit.calculateWitness(input); + await circuit.checkConstraints(witness); + await circuit.assertOut(witness, { + masked_body: [1, 0, 3, 0, 5, 0, 7, 0, 9, 0], + }); + }); +}); diff --git a/packages/circuits/tests/test-circuits/body-masker-test.circom b/packages/circuits/tests/test-circuits/body-masker-test.circom new file mode 100644 index 000000000..7066b248a --- /dev/null +++ b/packages/circuits/tests/test-circuits/body-masker-test.circom @@ -0,0 +1,5 @@ +pragma circom 2.1.6; + +include "../../helpers/body-masker.circom"; + +component main = BodyMasker(10); \ No newline at end of file