Skip to main content

Python wrapper for Tamarin Prover with JSON configuration

Project description

Batch Tamarin (batch-tamarin) : Tamarin Python Wrapper

A Python wrapper for Tamarin Prover that enables batch execution of protocol verification tasks with JSON configuration files and comprehensive reporting.

WrapperLogo

Features

  • Batch Execution: Run multiple Tamarin models across different Tamarin binary versions
  • JSON Configuration: Define execution recipes using simple JSON configuration files
  • Resource Management: Intelligent CPU and memory allocation for parallel task execution
  • Progress Tracking: Real-time progress updates with Rich-formatted output
  • Output Processing: Reformat the different Tamarin output to give a detailed summary of execution
  • CLI Interface: Easy-to-use command-line interface with comprehensive options

Installation

From PyPI

pip install batch-tamarin

From TestPyPI

pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ batch-tamarin

Prerequisites

  • Python 3.9+
  • Tamarin Prover binaries (install separately)

Usage

Basic Commands

# Show version
batch-tamarin --version

# Show help
batch-tamarin --help

# Run with configuration file
batch-tamarin recipe.json

# Run with debug output
batch-tamarin recipe.json --debug

# Run with Tamarin binary validation
batch-tamarin recipe.json --revalidate

Configuration Example

Create a JSON configuration file based on the WPA2 example:

{
  "config": {
    "global_max_cores": 10,
    "global_max_memory": "max",
    "default_timeout": 7200,
    "output_directory": "./results"
  },
  "tamarin_versions": {
    "stable": {
      "path": "tamarin-binaries/tamarin-prover-1.10/1.10.0/bin/tamarin-prover"
    },
    "legacy": {
      "path": "tamarin-binaries/tamarin-prover-1.8/1.8.0/bin/tamarin-prover"
    }
  },
  "tasks": {
    "wpa2": {
      "theory_file": "protocols/wpa2_four_way_handshake_unpatched.spthy",
      "tamarin_versions": ["stable", "legacy"],
      "output_file": "wpa2.txt",
      "preprocess_flags": ["yes"],
      "tamarin_options": ["-v"],
      "resources": {
        "max_cores": 2,
        "max_memory": 8,
        "timeout": 3600
      },
      "lemmas": [
        {
          "name": "nonce_reuse_key_type",
          "resources": {
            "max_cores": 1
          }
        },
        {
          "name": "authenticator_rcv_m2_must_be_preceded_by_snd_m1",
          "tamarin_versions": ["stable"],
          "resources": {
            "max_cores": 4,
            "max_memory": 16,
            "timeout": 30
          }
        }
      ]
    }
  }
}

Read the configuration guide to understand how to write a JSON recipe : JSON Guide

Output

The wrapper will output the results of all analysis in the output_file specified in the recipe. It will follow this pattern :

output_directory/
├── failed/
│   ├── output_prefix[\_lemma]\_tamarin_alias.json
│   └── ...
├── models/
│   ├── output_prefix[\_lemma]\_tamarin_alias.spthy
│   └── ...
└── success/
    ├── output_prefix[\_lemma]\_tamarin_alias.json
    └── ...

As the name of each directory and file describe, you will find successful task in success and their linked models in models Failed tasks don't output models (that's a tamarin behavior), you will only find a json in failed

Here is an example for each result json : success/

{
  "task_id": "wpa2_authenticator_installed_is_unique_for_anonce_dev",
  "warnings": [
    "1 wellformedness check failed!"
  ],
  "tamarin_timing": 12.27,
  "wrapper_measures": {
    "time": 12.385284208023222,
    "avg_memory": 200.17067307692307,
    "peak_memory": 358.34375
  },
  "output_spthy": "results/models/wpa2_authenticator_installed_is_unique_for_anonce_dev.spthy",
  "verified_lemma": {
    "authenticator_installed_is_unique_for_anonce": {
      "steps": 102,
      "analysis_type": "all-traces"
    }
  },
  "falsified_lemma": {},
  "unterminated_lemma": [
    "nonce_reuse_key_type",
    "...",
    "krack_attack_ptk"
  ]
}

failed/

{
  "task_id": "wpa2_authenticator_rcv_m2_must_be_preceded_by_snd_m1_dev",
  "error_description": "The task exceeded its memory limit. Review the memory limit setting for this task.",
  "wrapper_measures": {
    "time": 30.274985666008433,
    "avg_memory": 566.9329637096774,
    "peak_memory": 1059.609375
  },
  "return_code": -2,
  "last_stderr_lines": [
    "Process exceeded memory limit"
  ]
}

Development

Contributing

  1. Fork the repository and create a feature branch:

    git checkout -b feature/my-awesome-feature
    
  2. Set up development environment (see options below)

  3. Install pre-commit hooks:

    pre-commit install
    
  4. Make your changes and commit them

  5. Push to your branch and open a pull request

Development Environment Options

Using Nix

# Enter development environment with all dependencies
nix develop

# Install the package in editable mode (required once per environment)
pip install -e .

# The batch-tamarin command is now available
batch-tamarin --version

Using Python Virtual Environment

# Create and activate virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install -r requirements.txt

# The package is installed in editable mode automatically
batch-tamarin --version

Testing During Development

Since the package uses proper Python packaging structure, you cannot run python src/batch_tamarin/main.py directly. Use one of these methods:

# Method 1 (Recommended): Use the CLI command (after pip install -e .)
batch-tamarin

# Method 2: Run as Python module
python -m batch_tamarin.main

# Method 3: Test built package (Useful before publishing)
python -m build
pip install dist/batch_tamarin-*.whl

Packaging/Publishing

Building the Package

# Clean previous builds
rm -rf dist/ build/ **/*.egg-info/ # Be careful, it's still a rm -rf command, might fail because of *.egg-info pattern, you might want to remove it

# Build wheel and source distribution
python -m build

Publishing

Test Upload (TestPyPI)

python -m twine upload --repository testpypi dist/*

Production Upload (PyPI)

python -m twine upload dist/*

For detailed packaging instructions, see PACKAGING.md.

License

This project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later).

See the LICENSE file for the full license text.

License Summary

  • Use: Commercial and private use allowed
  • Modify: Modifications and derivatives allowed
  • Distribute: Distribution allowed
  • Share Alike: Derivatives must be licensed under GPL-3.0+
  • Disclose Source: Source code must be made available
  • Include License: License and copyright notice must be included

Implementation Details

For detailed architecture, module overview, and workflow documentation, see ARCHITECTURE.md.


Note: This package requires Tamarin Prover to be installed separately. Visit the Tamarin Prover website for installation instructions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

batch_tamarin-0.1.1.tar.gz (52.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

batch_tamarin-0.1.1-py3-none-any.whl (52.0 kB view details)

Uploaded Python 3

File details

Details for the file batch_tamarin-0.1.1.tar.gz.

File metadata

  • Download URL: batch_tamarin-0.1.1.tar.gz
  • Upload date:
  • Size: 52.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for batch_tamarin-0.1.1.tar.gz
Algorithm Hash digest
SHA256 8bc7e9c987500f83b3152ffe0fc793dfb732affc33d9c0de0edca76f3b7b7fec
MD5 12977db809c3b8f4bc76fae23aa32213
BLAKE2b-256 b435ead0edc6c420dcd590ca7b933cf3886e331cc3171acc907143e5de17025f

See more details on using hashes here.

File details

Details for the file batch_tamarin-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: batch_tamarin-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 52.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for batch_tamarin-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 daf98a12c111f5a2bf64eb274d148b7c6b5d4465b6167b240a6d58223e181dd6
MD5 2550b2309a3fd7efb8e1026733bba6d0
BLAKE2b-256 5e58ab57893c3827600bb9fc269c8c4f8ec146c9bbef688f42595ec9c1f60b7d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page