Skip to content

Commit

Permalink
fix: added a assert-bit check in body-masker
Browse files Browse the repository at this point in the history
  • Loading branch information
shreyas-londhe committed Jul 13, 2024
1 parent 3d96f71 commit 70174a6
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
26 changes: 26 additions & 0 deletions packages/circuits/helpers/body-masker.circom
Original file line number Diff line number Diff line change
@@ -1,11 +1,37 @@
pragma circom 2.1.6;

// Asserts that a given input is binary.
//
// Inputs:
// - in: an input signal, expected to be 0 or 1.
template AssertBit() {
signal input in;
in * (in - 1) === 0;
}

// The BodyMasker template masks an input body array using a binary mask array.
// Each element in the body array is multiplied by the corresponding element in the mask array.
// The mask array is validated to ensure all elements are binary (0 or 1).
//
// Parameters:
// - maxBodyLength: The maximum length of the body and mask arrays.
//
// Inputs:
// - body: An array of signals representing the body to be masked.
// - mask: An array of signals representing the binary mask.
//
// Outputs:
// - masked_body: An array of signals representing the masked body.
template BodyMasker(maxBodyLength) {
signal input body[maxBodyLength];
signal input mask[maxBodyLength];
signal output masked_body[maxBodyLength];

component bit_check[maxBodyLength];

for (var i = 0; i < maxBodyLength; i++) {
bit_check[i] = AssertBit();
bit_check[i].in <== mask[i];
masked_body[i] <== body[i] * mask[i];
}
}
17 changes: 17 additions & 0 deletions packages/circuits/tests/body-masker.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,21 @@ describe("BodyMasker Circuit", () => {
masked_body: [1, 0, 3, 0, 5, 0, 7, 0, 9, 0],
});
});

it("should fail if mask has non-bit numbers", async () => {
const input = {
body: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
mask: [1, 2, 1, 0, 1, 0, 1, 0, 1, 0], // Mask with non-bit number (2)
};

try {
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],
});
} catch (error) {
expect(error).toBeTruthy();
}
});
});

0 comments on commit 70174a6

Please sign in to comment.