Suyash Bagad
Cryptography Engineer
├── acir_formal_proofs
├── api
├── bb
│ └── deps
├── benchmark
│ ├── append_only_tree_bench
│ ├── basics_bench
│ ├── bb_cli_bench
│ ├── circuit_construction_bench
│ ├── client_ivc_bench
│ ├── decrypt_bench
│ ├── goblin_bench
│ ├── indexed_tree_bench
│ ├── ipa_bench
│ ├── mega_memory_bench
│ ├── merkle_tree_bench
│ ├── pippenger_bench
│ ├── poseidon2_bench
│ ├── protogalaxy_bench
│ ├── protogalaxy_rounds_bench
│ ├── relations_bench
│ └── ultra_bench
├── boomerang_value_detection
├── circuit_checker
├── client_ivc
├── commitment_schemes
│ ├── gemini
│ ├── ipa
│ ├── kzg
│ ├── shplonk
│ ├── small_subgroup_ipa
│ └── utils
├── commitment_schemes_recursion
├── common
├── crypto
│ ├── aes128
│ ├── blake2s
│ ├── blake3s
│ ├── blake3s_full
│ ├── ecdsa
│ ├── generators
│ ├── hashers
│ ├── hmac
│ ├── keccak
│ ├── merkle_tree
│ │ ├── append_only_tree
│ │ ├── indexed_tree
│ │ ├── lmdb_store
│ │ ├── node_store
│ │ └── nullifier_tree
│ ├── pedersen_commitment
│ ├── pedersen_hash
│ ├── poseidon2
│ │ └── sponge
│ ├── schnorr
│ └── sha256
├── dsl
│ ├── acir_format
│ │ └── serde
│ └── acir_proofs
├── ecc
│ ├── batched_affine_addition
│ ├── curves
│ │ ├── bn254
│ │ ├── grumpkin
│ │ ├── secp256k1
│ │ └── secp256r1
│ ├── fields
│ ├── groups
│ └── scalar_multiplication
├── eccvm
├── env
├── ext
│ └── starknet
│ ├── crypto
│ │ └── poseidon
│ ├── ecc
│ │ └── curves
│ │ └── stark252
│ ├── stdlib_circuit_builders
│ └── transcript
├── flavor
├── goblin
├── grumpkin_srs_gen
├── honk
│ ├── composer
│ ├── execution_trace
│ ├── library
│ ├── proof_system
│ │ └── types
│ ├── types
│ └── utils
├── lmdblib
├── messaging
├── nodejs_module
│ ├── lmdb_store
│ ├── node_modules
│ │ ├── node-addon-api
│ │ │ └── tools
│ │ └── node-api-headers
│ │ ├── def
│ │ └── include
│ ├── util
│ └── world_state
├── numeric
│ ├── bitop
│ ├── random
│ ├── uint128
│ ├── uint256
│ └── uintx
├── op_queue
├── polynomials
├── protogalaxy
├── relations
│ ├── ecc_vm
│ ├── generic_lookup
│ ├── generic_permutation
│ └── translator_vm
├── serialize
│ └── msgpack_impl
├── smt_verification
│ ├── circuit
│ ├── solver
│ ├── terms
│ └── util
├── solidity_helpers
│ ├── circuits
│ └── utils
├── srs
│ └── factories
├── stdlib
│ ├── client_ivc_verifier
│ ├── commitment
│ │ └── pedersen
│ ├── eccvm_verifier
│ ├── encryption
│ │ ├── aes128
│ │ ├── ecdsa
│ │ └── schnorr
│ ├── goblin_verifier
│ ├── hash
│ │ ├── blake2s
│ │ ├── blake3s
│ │ ├── keccak
│ │ ├── pedersen
│ │ ├── poseidon2
│ │ │ └── sponge
│ │ └── sha256
│ ├── honk_verifier
│ ├── merkle_tree
│ │ └── indexed_tree
│ ├── primitives
│ │ ├── address
│ │ ├── bigfield
│ │ ├── biggroup
│ │ ├── bit_array
│ │ ├── bool
│ │ ├── byte_array
│ │ ├── circuit_builders
│ │ ├── curves
│ │ ├── databus
│ │ ├── field
│ │ ├── group
│ │ ├── logic
│ │ ├── memory
│ │ ├── packed_byte_array
│ │ ├── padding_indicator_array
│ │ ├── plookup
│ │ ├── public_input_component
│ │ ├── safe_uint
│ │ ├── uint
│ │ │ └── plookup
│ │ └── witness
│ ├── protogalaxy_verifier
│ ├── test_utils
│ ├── transcript
│ └── translator_vm_verifier
├── stdlib_circuit_builders
│ └── plookup_tables
│ ├── fixed_base
│ └── keccak
├── sumcheck
├── trace_to_polynomials
├── transcript
├── translator_vm
├── ultra_honk
├── vm2
│ ├── common
│ ├── constraining
│ │ ├── benchmark
│ │ ├── recursion
│ │ ├── relations
│ │ └── testing
│ ├── generated
│ │ └── relations
│ ├── simulation
│ │ ├── events
│ │ ├── lib
│ │ └── testing
│ ├── testing
│ ├── tooling
│ └── tracegen
│ └── lib
├── wasi
└── world_state
\(\rightarrow\) client_ivc
\(\rightarrow\) commitment_schemes
\(\rightarrow\) crypto
\(\rightarrow\) dsl
\(\rightarrow\) ecc
\(\rightarrow\) eccvm
\(\rightarrow\) flavor
\(\rightarrow\) goblin
\(\rightarrow\) honk
\(\rightarrow\) messaging
\(\rightarrow\) numeric
\(\rightarrow\) polynomials
\(\rightarrow\) protogalaxy
\(\rightarrow\) relations
\(\rightarrow\) stdlib
\(\rightarrow\) sumcheck
\(\rightarrow\) trace_to_poly
\(\rightarrow\) transcript
\(\rightarrow\) ultra_honk
\(\rightarrow\) translator_vm
\(\rightarrow\) vm2
\(\rightarrow\) client_ivc
\(\rightarrow\) commitment_schemes
\(\rightarrow\) crypto
\(\rightarrow\) dsl
\(\rightarrow\) ecc
\(\rightarrow\) eccvm
\(\rightarrow\) flavor
\(\rightarrow\) goblin
\(\rightarrow\) honk
\(\rightarrow\) messaging
\(\rightarrow\) numeric
\(\rightarrow\) polynomials
\(\rightarrow\) protogalaxy
\(\rightarrow\) relations
\(\rightarrow\) stdlib
\(\rightarrow\) sumcheck
\(\rightarrow\) trace_to_poly
\(\rightarrow\) transcript
\(\rightarrow\) ultra_honk
\(\rightarrow\) translator_vm
\(\rightarrow\) vm2
⚠️
⚠️
⚠️
⚠️
⚠️
⚠️
⚠️
\(\rightarrow\) client_ivc
\(\rightarrow\) commitment_schemes
\(\rightarrow\) crypto
\(\rightarrow\) dsl
\(\rightarrow\) ecc
\(\rightarrow\) eccvm
\(\rightarrow\) flavor
\(\rightarrow\) goblin
\(\rightarrow\) honk
\(\rightarrow\) messaging
\(\rightarrow\) numeric
\(\rightarrow\) polynomials
\(\rightarrow\) protogalaxy
\(\rightarrow\) relations
\(\rightarrow\) stdlib
\(\rightarrow\) sumcheck
\(\rightarrow\) trace_to_poly
\(\rightarrow\) transcript
\(\rightarrow\) ultra_honk
\(\rightarrow\) translator_vm
\(\rightarrow\) vm2
⚠️
⚠️
⚠️
⚠️
⚠️
⚠️
⚠️
⚠️
Non-circuit
Circuit
\(\rightarrow\) stdlib
├── stdlib
│ ├── client_ivc_verifier
│ ├── commitment
│ │ └── pedersen
│ ├── eccvm_verifier
│ ├── encryption
│ │ ├── aes128
│ │ ├── ecdsa
│ │ └── schnorr
│ ├── goblin_verifier
│ ├── hash
│ │ ├── blake2s
│ │ ├── blake3s
│ │ ├── keccak
│ │ ├── pedersen
│ │ ├── poseidon2
│ │ │ └── sponge
│ │ └── sha256
│ ├── honk_verifier
│ ├── merkle_tree
│ │ └── indexed_tree
│ ├── primitives
│ │ ├── address
│ │ ├── bigfield
│ │ ├── biggroup
│ │ ├── bit_array
│ │ ├── bool
│ │ ├── byte_array
│ │ ├── circuit_builders
│ │ ├── curves
│ │ ├── databus
│ │ ├── field
│ │ ├── group
│ │ ├── logic
│ │ ├── memory
│ │ ├── packed_byte_array
│ │ ├── padding_indicator_array
│ │ ├── plookup
│ │ ├── public_input_component
│ │ ├── safe_uint
│ │ ├── uint
│ │ │ └── plookup
│ │ └── witness
│ ├── protogalaxy_verifier
│ ├── test_utils
│ ├── transcript
│ └── translator_vm_verifier
├── stdlib_circuit_builders
│ └── plookup_tables
│ ├── fixed_base
│ └── keccak
│ ├── client_ivc_verifier
│ ├── eccvm_verifier
│ ├── goblin_verifier
│ ├── honk_verifier
│ ├── protogalaxy_verifier
│ ├── transcript
│ └── translator_vm_verifier
├── stdlib_circuit_builders
│ └── plookup_tables
│ ├── fixed_base
│ └── keccak
│ ├── commitment
│ │ └── pedersen
│ ├── encryption
│ │ ├── aes128
│ │ ├── ecdsa
│ │ └── schnorr
│ ├── hash
│ │ ├── blake2s
│ │ ├── blake3s
│ │ ├── keccak
│ │ ├── pedersen
│ │ ├── poseidon2
│ │ │ └── sponge
│ │ └── sha256
│ ├── merkle_tree
│ │ └── indexed_tree
│ ├── primitives
│ │ ├── address
│ │ ├── bigfield
│ │ ├── biggroup
│ │ ├── bit_array
│ │ ├── bool
│ │ ├── byte_array
│ │ ├── circuit_builders
│ │ ├── curves
│ │ ├── databus
│ │ ├── field
│ │ ├── group
│ │ ├── logic
│ │ ├── memory
│ │ ├── packed_byte_array
│ │ ├── padding_indicator_array
│ │ ├── plookup
│ │ ├── public_input_component
│ │ ├── safe_uint
│ │ ├── uint
│ │ │ └── plookup
│ │ └── witness
Building blocks
Cryptography
Recursive verifiers
Lookup tables
dsl
field
bool
uint
witness
byte_array
bigfield
databus
logic
memory
packed_byte_array
padding_indicator_array
plookup
public_input_component
safe_uint
biggroup
group
bit_array
ultra
circuit
builder
mega
circuit
builder
noir
field
bool
uint
witness
byte_array
bigfield
databus
logic
memory
packed_byte_array
padding_indicator_array
plookup
public_input_component
safe_uint
biggroup
group
bit_array
June 2025
now
October 2025
ignition
2026?
alpha
20**?
beta
if no bugs are found
user deposit
total deposit
user withdrawal
total withdrawal
// Split a field_t element into 4 68-bit limbs
const auto split_into_limbs = [&composer, &shift_1, &shift_2, &shift_3](const field_ct& input) {
const uint256_t value = input.get_value();
const uint256_t t0 = value.slice(0, 68);
const uint256_t t1 = value.slice(68, 136);
const uint256_t t2 = value.slice(136, 204);
const uint256_t t3 = value.slice(204, 272);
std::array<field_ct, 4> limbs{
witness_ct(&composer, t0),
witness_ct(&composer, t1),
witness_ct(&composer, t2),
witness_ct(&composer, t3),
};
field_ct limb_sum_1 = limbs[0].add_two(limbs[1] * shift_1, limbs[2] * shift_2);
field_ct limb_sum_2 = input - (limbs[3] * shift_3);
limb_sum_1.assert_equal(limb_sum_2);
limbs[0].create_range_constraint(68);
limbs[1].create_range_constraint(68);
limbs[2].create_range_constraint(68);
limbs[3].create_range_constraint(68);
return limbs;
};
❗❗❗❗
Allowed to overflow
No range constraints at all!
By Suyash Bagad