openvm-circuit-primitives 2.0.1

Library of plonky3 primitives for general purpose use in other ZK circuits.
Documentation
# XOR Chip

This chip gets requests to compute the xor of two numbers `x` and `y` of at most `M` bits

It generates a preprocessed table with a row for each possible triple `(x, y, x^y)` and keeps count of the number of times each triple is requested in the main trace column.

**Preprocessed Columns:**
- `x`: First input value
- `y`: Second input value
- `z`: XOR result ($x \oplus y$)

**IO Columns:**
- `mult`: Multiplicity counter tracking the number of XOR operations requested for each triple

The `XorLookupAir` adds interaction constraints for each triple `(x, y, x^y)` requested.
```rust
    self.bus
        .receive(prep_local.x, prep_local.y, prep_local.z)
        .eval(builder, local.mult);
```

Then similar to the [RangeCheckerChip](../range/README.md), if the non-materialized send and receive multisets on the shared `XorBus` are equal, then the xor lookup is satisfied.