diff --git a/marzipan/src/proverif/__init__.py b/marzipan/src/proverif/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/marzipan/src/proverif/__pycache__/__init__.cpython-312.pyc b/marzipan/src/proverif/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 00000000..f362b08c Binary files /dev/null and b/marzipan/src/proverif/__pycache__/__init__.cpython-312.pyc differ diff --git a/marzipan/src/proverif/ast/__init__.py b/marzipan/src/proverif/ast/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/marzipan/src/proverif/ast/__pycache__/AttrMap.cpython-312.pyc b/marzipan/src/proverif/ast/__pycache__/AttrMap.cpython-312.pyc new file mode 100644 index 00000000..c6f4947d Binary files /dev/null and b/marzipan/src/proverif/ast/__pycache__/AttrMap.cpython-312.pyc differ diff --git a/marzipan/src/proverif/ast/__pycache__/__init__.cpython-312.pyc b/marzipan/src/proverif/ast/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 00000000..0d60ad24 Binary files /dev/null and b/marzipan/src/proverif/ast/__pycache__/__init__.cpython-312.pyc differ diff --git a/marzipan/src/proverif/ast/__pycache__/attributemap.cpython-312.pyc b/marzipan/src/proverif/ast/__pycache__/attributemap.cpython-312.pyc new file mode 100644 index 00000000..412f1bcd Binary files /dev/null and b/marzipan/src/proverif/ast/__pycache__/attributemap.cpython-312.pyc differ diff --git a/marzipan/src/proverif/ast/__pycache__/attrmap.cpython-312.pyc b/marzipan/src/proverif/ast/__pycache__/attrmap.cpython-312.pyc new file mode 100644 index 00000000..110c9389 Binary files /dev/null and b/marzipan/src/proverif/ast/__pycache__/attrmap.cpython-312.pyc differ diff --git a/marzipan/src/proverif/ast/attributemap.py b/marzipan/src/proverif/ast/attributemap.py new file mode 100644 index 00000000..113046c0 --- /dev/null +++ b/marzipan/src/proverif/ast/attributemap.py @@ -0,0 +1,33 @@ +from collections.abc import Mapping +from typing import Any, Iterator + + +class AttrMap(Mapping): + """ + Small wrapper so that dict values can be accessed as {ctx.foo} + instead of only {ctx["foo"]} inside our custom format strings. + """ + + def __init__(self, mapping: Mapping[str, Any]): + self._mapping = mapping + + def __getattr__(self, name: str) -> Any: + try: + return self._mapping[name] + except KeyError: + raise AttributeError(name) from None + + def __getitem__(self, name: str) -> Any: + return self._mapping[name] + + def __contains__(self, key: object) -> bool: + return key in self._mapping + + def __str__(self) -> str: + return str(self._mapping) + + def __iter__(self) -> Iterator[Any]: + return self._mapping.__iter__() + + def __len__(self) -> int: + return len(self._mapping) diff --git a/marzipan/src/proverif/parser/__init__.py b/marzipan/src/proverif/parser/__init__.py new file mode 100644 index 00000000..e69de29b