mirror of
https://github.com/rosenpass/rosenpass.git
synced 2026-07-30 23:30:11 -07:00
5.2 KiB
5.2 KiB
TODO for the project of rewriting Marzipan
Done
figure out why ProVerif is started on the non-processed mpv filerework rebound warnings (clean_warningsBash function)rosenpass$ rosenpass-marzipan run-proverif target/proverif/03_identity_hiding_responder.entry.o.pv target/proverif/03_identity_hiding_responder.entry.logprovide log parameter to(no, it was intentionally not used)rosenpass-marzipan-callcpp pre-processing stuffawk pre-processing stuffpretty_outputBash functionpretty_output_lineclick function intervention weirdnesswhy is everything red in the pretty output? (see line 96 in __init__.py)awk RESULT flush in marzipan()move the whole metaverif function to Python
move the whole analyze function to Pythonfind the filesstart subprocesses in parallelwait for them to finish
rebase from main- ~~see if we still need the
extra_args is Nonecheck in_run_proverif~` set colors differently to prevent injection attackby calling a functionby prepared statements
standalone function parse_result_line is no longer necessaryis the clean function still necessary?implement better main function for clickwhy does analyze fail when the target/proverif directory is not empty?return an exit status that is meaningful for CIexception handling in analyze() and in run_proverif()refactor filtering in run_proverif (see karo's comment)configurable target directorylark parser: multiline comments, how???parse errorserror when trying with:nix run .# -- parse ../target/proverif/01_secrecy.entry.i.pvin(C, Cinit_conf(Ssskm, Spsk, Sspkt, ic));- ~ ^~
04_dos… has a syntax error (see below)rewrite marzipan.awk into Python/LARKdefine a LARK grammar for marzipan.awk ruleswrite python code for processing marzipan rules, e.g. alias replacement (step: i.pv->o.pv)
Next Steps
- refactor letfundecl.py into separate modules, shorter functions, …
- write a test framework
- file in, test succeeds if parsing succeeds
- file in, test succeeds if parsing and pretty printing succeeds and matches input up to whitespace, and opinionated things like empty square brackets.
- integrate marzipan.awk into Python, somehow
- review letfundecl.py
- distill what we learned about grammar style
- newly discovered Lark features:
- %extend makes it possible to first load the original ProVerif grammar and then load a small file that adapts it
- -> can be used to give different names to branches of a rule, this spares us from splitting rules manually
- [Update: do we need to do this?]cyclic dependencies are problematic if we wanted to split the grammar into multiple files and import within a lark grammar, because Lark would then complain when one file is not self-containing/completely resolvable
- maybe this is no longer necessary anyway now that we know about %extend
- rules with multiple sub-rules, if the sub-rules have differently long or different "type signatures", or different constants, except if all sub-rules only have one base type and no different constants
- rules that have multiple parameters from which one is a list: the list value must be moved into a dedicated rule to not be problematic with the AsList class inheritance
- in the transformer class, each terminal must have a function that handles it
- newly discovered Lark features:
- learnings w.r.t. pretty_format
- if an optional attribute is an integer that can be 0,
is not Nonemust be used explicitly, otherwise 0 will be treated as false; for strings this is fine because we do not want to print empty strings
- if an optional attribute is an integer that can be 0,
- all rules shall have a test file that touches/uses them
- distill what we learned about grammar style
- scale letfundecl.py to the entire grammar
- rewrite the grammar in the new style, using %extend and ->
- generate/write the dataclasses
- write a test framework that computes test coverage for rules
- review letfundecl.py
- options term special cases (c.f. manual page 133, starting with "fun" term)
- complete with CryptoVerif options
- do not assume that the repo path has subdir marzipan
- do not assume that the repo path has subdir analysis
- rewrite cpp into Python/LARK (step: mpv->i.pv)
- integrate the Nix flake into the main Nix flake
- pull the gawk dependency into the Nix flake
- think about next steps
- integrate this upstream, into the CI?
- “make it beautiful” steps? more resiliency to working directory?
- rewrite our awk usages into Python/…?
- yes, possibly as extension to the LARK grammar
- and rewrite the AST within Python
- reconstruct ProVerif input file for ProVerif
- rewrite our CPP usages into Python/…?
- low priority: nested comments in ProVerif code
- usability feature: functionality to help modify a grammar, as seen in the modify_decl_rule function
- Lark does not seem to have a pretty printer for the internal grammar representation, source_grammar is exactly the input string
Idea
- somehow parse Horn clauses output from ProVerif into something more helpful?
First Target
“it replaces the Bash script and is idiomatic Python code”