barretenberg
Loading...
Searching...
No Matches
logic.hpp
1#pragma once
2#include "barretenberg/numeric/uint256/uint256.hpp"
3#include "barretenberg/stdlib/primitives/circuit_builders/circuit_builders_fwd.hpp"
4#include "barretenberg/stdlib/primitives/field/field.hpp"
5#include "barretenberg/stdlib/primitives/witness/witness.hpp"
6#include <cstdint>
7#include <functional>
8#include <utility>
9
10namespace proof_system::plonk::stdlib {
11
12template <typename Builder> class logic {
13 public:
16
17 public:
19 field_pt& a,
20 field_pt& b,
21 size_t num_bits,
22 bool is_xor_gate,
23 const std::function<std::pair<uint256_t, uint256_t>(uint256_t, uint256_t, size_t)>& get_chunk =
24 [](uint256_t left, uint256_t right, size_t chunk_size) {
25 uint256_t left_chunk = left & ((uint256_t(1) << chunk_size) - 1);
26 uint256_t right_chunk = right & ((uint256_t(1) << chunk_size) - 1);
27 return std::make_pair(left_chunk, right_chunk);
28 });
29};
30
31EXTERN_STDLIB_TYPE(logic);
32
33} // namespace proof_system::plonk::stdlib
Definition: uint256.hpp:25
Definition: field.hpp:10
Definition: logic.hpp:12
static field_pt create_logic_constraint(field_pt &a, field_pt &b, size_t num_bits, bool is_xor_gate, const std::function< std::pair< uint256_t, uint256_t >(uint256_t, uint256_t, size_t)> &get_chunk=[](uint256_t left, uint256_t right, size_t chunk_size) { uint256_t left_chunk=left &((uint256_t(1)<< chunk_size) - 1);uint256_t right_chunk=right &((uint256_t(1)<< chunk_size) - 1);return std::make_pair(left_chunk, right_chunk);})
A logical AND or XOR over a variable number of bits.
Definition: logic.cpp:26
Definition: witness.hpp:10