Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Audit preparedness: listing key cases #5360

Closed
5 of 93 tasks
Tracked by #5173
michaeljklein opened this issue Jun 28, 2024 · 0 comments
Closed
5 of 93 tasks
Tracked by #5173

Audit preparedness: listing key cases #5360

michaeljklein opened this issue Jun 28, 2024 · 0 comments
Assignees
Labels
enhancement New feature or request

Comments

@michaeljklein
Copy link
Contributor

michaeljklein commented Jun 28, 2024

Problem

  • List ACIR opcodes
  • List black-box functions
  • List acir-gen cases
  • List SSA passes
  • List monomorphizer key cases

Assorted TODO's:

  • Make dummy-ID for (monomorphizer) FuncId (other than 0)
  • Make monomorphizer AST's Program::take_function_body error when called twice on the same function (FuncId)

List

pub enum Opcode<F> {
  • AssertZero
  • BlackBoxFuncCall
  • Directive
  • MemoryOp
  • MemoryInit
  • BrilligCall
  • Call
pub enum Directive<F> {
  • ToLeRadix
pub enum BlackBoxFunc {
  • AES128Encrypt
  • AND
  • XOR
  • RANGE
  • SHA256
  • Blake2s
  • Blake3
  • SchnorrVerify
  • PedersenCommitment
  • PedersenHash
  • EcdsaSecp256k1
  • EcdsaSecp256r1
  • MultiScalarMul
  • Keccak256
  • Keccakf1600
  • RecursiveAggregation
  • EmbeddedCurveAdd
  • BigIntAdd
  • BigIntSub
  • BigIntMul
  • BigIntDiv
  • BigIntFromLeBytes
  • BigIntToLeBytes
  • Poseidon2Permutation
  • Sha256Compression

acir-gen Cases:

  • Ssa::into_acir(self, brillig: &Brillig)
  • convert_acir_main
  • convert_brillig_main
  • convert_ssa_block_params (test against behavior from docstring)
  • add_numeric_input_var (check range constraint)
  • handle_constant_index (ensure equivalent to when not used / slow-version of adding a constant, constraining to equivalent with var, etc. see docstring)
  • handle_array_operation get/set
  • convert_array_operation_inputs (test with a couple types of nesting / included tuples/struct-types)
  • array_get / array_set (get gets last set value)
  • array_get_value / array_set_value (get gets last set value)
  • init_element_type_sizes_array (check_array_is_initialized on result)
  • copy_dynamic_array (check_array_is_initialized on result)
  • initialize_array (check_array_is_initialized on result)
  • flattened_slice_size / flattened_value_size (various nesting)
  • convert_ssa_binary (test expected operation occurs)
  • check_unsigned_overflow (1. test key successful/failing cases, 2. ensure non-tested operations cannot exceed size) ((consider adding a bool argument to unconditionally range-constrain var, then test that both versions are equivalent))
  • type_of_binary_operation (see docstring for cases)
  • convert_ssa_intrinsic_call
  • array_element_type (test docstring properties)

SSA Passes:

  • Ssa::defunctionalize
  • Ssa::remove_paired_rc
  • Ssa::separate_runtime
  • Ssa::resolve_is_unconstrained
  • Ssa::inline_functions
  • Ssa::mem2reg
  • Ssa::as_slice_optimization
  • Ssa::evaluate_static_assert_and_assert_constant
  • Ssa::unroll_loops_iteratively
  • Ssa::simplify_cfg
  • Ssa::flatten_cfg
  • Ssa::remove_bit_shifts
  • Ssa::mem2reg
  • Ssa::inline_functions_with_no_predicates
  • Ssa::remove_if_else
  • Ssa::fold_constants
  • Ssa::remove_enable_side_effects
  • Ssa::fold_constants_using_constraints
  • Ssa::dead_instruction_elimination
  • Ssa::array_set_optimization

Monomorphizer:

  • constructor
  • unpack_pattern / unpack_tuple_pattern (ensure they convert key examples to expected accesses)
  • resolve_trait_method_reference (ensure it handles assumed traits)
  • function_call
  • try_evaluate_call
  • try_evaluate_call: "modulus_num_bits"
  • try_evaluate_call: "zeroed"
  • try_evaluate_call: "modulus_le_bits"
  • try_evaluate_call: "modulus_be_bits"
  • try_evaluate_call: "modulus_be_bytes"
  • try_evaluate_call: "modulus_le_bytes"
  • lambda_with_setup (test key cases of zero/trivial/two-var env, as well as 2-3 lambdas in a row / nested)
  • zeroed_value_of_type
  • create_zeroed_function (ensure it behaves as described in docstring)
  • perform_instantiation_bindings
  • undo_instantiation_bindings (ensure it reverses the effect of perform_instantiation_bindings)

Happy Case

Add the list to the next issue: #5361

Project Impact

None

Impact Context

No response

Workaround

None

Workaround Description

No response

Additional Context

No response

Would you like to submit a PR for this Issue?

None

Support Needs

No response

@michaeljklein michaeljklein added the enhancement New feature or request label Jun 28, 2024
@michaeljklein michaeljklein self-assigned this Jun 28, 2024
@github-project-automation github-project-automation bot moved this to 📋 Backlog in Noir Jun 28, 2024
@github-project-automation github-project-automation bot moved this from 📋 Backlog to ✅ Done in Noir Jul 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: ✅ Done
Development

No branches or pull requests

1 participant