circomspect_program_analysis/
lib.rs1use analysis_context::AnalysisContext;
2
3use program_structure::cfg::Cfg;
4use program_structure::report::ReportCollection;
5
6extern crate num_bigint_dig as num_bigint;
7
8pub mod constraint_analysis;
9pub mod taint_analysis;
10pub mod analysis_context;
11pub mod analysis_runner;
12pub mod config;
13
14mod bitwise_complement;
16mod bn254_specific_circuit;
17mod constant_conditional;
18mod definition_complexity;
19mod field_arithmetic;
20mod field_comparisons;
21mod nonstrict_binary_conversion;
22mod under_constrained_signals;
23mod unconstrained_less_than;
24mod unconstrained_division;
25mod side_effect_analysis;
26mod signal_assignments;
27
28mod unused_output_signal;
30
31type AnalysisPass = dyn Fn(&mut dyn AnalysisContext, &Cfg) -> ReportCollection;
34
35pub fn get_analysis_passes() -> Vec<Box<AnalysisPass>> {
36 vec![
37 Box::new(|_, cfg| bitwise_complement::find_bitwise_complement(cfg)),
39 Box::new(|_, cfg| signal_assignments::find_signal_assignments(cfg)),
40 Box::new(|_, cfg| definition_complexity::run_complexity_analysis(cfg)),
41 Box::new(|_, cfg| side_effect_analysis::run_side_effect_analysis(cfg)),
42 Box::new(|_, cfg| field_arithmetic::find_field_element_arithmetic(cfg)),
43 Box::new(|_, cfg| field_comparisons::find_field_element_comparisons(cfg)),
44 Box::new(|_, cfg| unconstrained_division::find_unconstrained_division(cfg)),
45 Box::new(|_, cfg| bn254_specific_circuit::find_bn254_specific_circuits(cfg)),
46 Box::new(|_, cfg| unconstrained_less_than::find_unconstrained_less_than(cfg)),
47 Box::new(|_, cfg| constant_conditional::find_constant_conditional_statement(cfg)),
48 Box::new(|_, cfg| under_constrained_signals::find_under_constrained_signals(cfg)),
49 Box::new(|_, cfg| nonstrict_binary_conversion::find_nonstrict_binary_conversion(cfg)),
50 Box::new(unused_output_signal::find_unused_output_signals),
52 ]
53}