{"id":22852257,"url":"https://github.com/elniak/panther","last_synced_at":"2025-04-30T09:17:31.792Z","repository":{"id":38343985,"uuid":"426255598","full_name":"ElNiak/PANTHER","owner":"ElNiak","description":"This tool presents a novel approach to bolstering network protocol verification by integrating the Shadow network simulator with the Ivy formal verification tool to check time properties. Furthermore, it extends Ivy’s capabilities with a dedicated time module, enabling the verification of complex quantitative-time properties.","archived":false,"fork":false,"pushed_at":"2025-03-03T17:04:14.000Z","size":1287747,"stargazers_count":37,"open_issues_count":9,"forks_count":3,"subscribers_count":2,"default_branch":"production","last_synced_at":"2025-04-30T09:17:22.698Z","etag":null,"topics":["cve","cybersecurity","docker","docker-compose","formal-methods","formal-verification","ivy","network-analysis","network-security","network-simulator","protocol","protocol-tester","quic","reproducible-research","test-automation","testing","testing-tools","tests","time-proof","transport-layer-protocol"],"latest_commit_sha":null,"homepage":"https://elniak.github.io/PANTHER/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ElNiak.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-09T14:13:45.000Z","updated_at":"2025-04-17T19:21:54.000Z","dependencies_parsed_at":"2023-10-20T16:50:32.055Z","dependency_job_id":"b1f8ac00-85d7-412b-b242-63531946e1b2","html_url":"https://github.com/ElNiak/PANTHER","commit_stats":null,"previous_names":["elniak/pfv","elniak/panther"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElNiak%2FPANTHER","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElNiak%2FPANTHER/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElNiak%2FPANTHER/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElNiak%2FPANTHER/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ElNiak","download_url":"https://codeload.github.com/ElNiak/PANTHER/tar.gz/refs/heads/production","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251674590,"owners_count":21625646,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cve","cybersecurity","docker","docker-compose","formal-methods","formal-verification","ivy","network-analysis","network-security","network-simulator","protocol","protocol-tester","quic","reproducible-research","test-automation","testing","testing-tools","tests","time-proof","transport-layer-protocol"],"created_at":"2024-12-13T06:07:39.449Z","updated_at":"2025-04-30T09:17:31.778Z","avatar_url":"https://github.com/ElNiak.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PANTHER: Protocol Analysis and Testing Harness for Extensible Research\n\n## :tiger: **P**rotocol formal **A**nalysis and formal **N**etwork **T**hreat **E**valuation **R**esources\n\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10819552.svg)](https://doi.org/10.5281/zenodo.10819552)\n[![mkdocs](https://github.com/ElNiak/PANTHER/actions/workflows/pr-generate-docs.yaml/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/pr-generate-docs.yaml)\n[![pages-build-deployment](https://github.com/ElNiak/PANTHER/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/pages/pages-build-deployment)\n[![dependabot](https://github.com/ElNiak/PANTHER/actions/workflows/dependabot/dependabot-updates/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/dependabot/dependabot-updates)\n[![Python application](https://github.com/ElNiak/PANTHER/actions/workflows/python-app.yml/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/python-app.yml)\n[![Python package](https://github.com/ElNiak/PANTHER/actions/workflows/python-package.yml/badge.svg?branch=production)](https://github.com/ElNiak/PANTHER/actions/workflows/python-package.yml)\n[![pypi](https://github.com/ElNiak/PANTHER/actions/workflows/python-publish.yml/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/python-publish.yml)\n[![pytest](https://github.com/ElNiak/PANTHER/actions/workflows/unittests_codecov.yml/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/unittests_codecov.yml)\n[![Greetings](https://github.com/ElNiak/PANTHER/actions/workflows/greetings.yml/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/greetings.yml)\n[![pre-commit](https://github.com/ElNiak/PANTHER/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/pre-commit.yml)\n[![CodeQL](https://github.com/ElNiak/PANTHER/actions/workflows/codeql.yml/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/codeql.yml)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/c8043e5320934d49a688e173db5a331d)](https://app.codacy.com/gh/ElNiak/PANTHER/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n[![Qodana](https://github.com/ElNiak/PANTHER/actions/workflows/qodana_code_quality.yml/badge.svg)](https://github.com/ElNiak/PANTHER/actions/workflows/qodana_code_quality.yml)\n\n\n![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54) ![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white) ![C++](https://img.shields.io/badge/c++-%2300599C.svg?style=for-the-badge\u0026logo=c%2B%2B\u0026logoColor=white) ![Debian](https://img.shields.io/badge/Debian-D70A53?style=for-the-badge\u0026logo=debian\u0026logoColor=white)\n\n\n## :rocket: Overview\n\nPANTHER is a modular framework designed for testing and validating network protocols in dynamic and extensible environments. It supports protocol implementations, custom plugins, and comprehensive experiment configurations, making it an essential tool for researchers and developers in networking and security.\n\n---\n\n## :book: Features\n- **Extensible Plugin Architecture**: Easily add new implementations, protocols, and environments.\n- **Dynamic Configuration**: Configure experiments using YAML files with structured validation.\n- **Docker Integration**: Seamless environment setup with dynamically built Docker images.\n- **Comprehensive Logging**: Debug and trace experiments with detailed logs.\n- **Multi-Protocol Testing**: Supports complex scenarios across multiple protocols and implementations.\n\n---\n\n## :computer: Installation\n\nSee the [Installation Guide](INSTALL.md) for detailed instructions.\n\n### Tested on:\n\n- Python 3.10 or higher\n- Docker version 27.2.1, build 9e34c9b\n- Ubuntu 20.04.3 LTS\n\nRecommended: A virtual environment for Python dependencies\n\n### Recommended\n\n- Install the required packages:\n\n```bash\npython3.10 -m venv .venv;\nsource .venv/bin/activate;\npip install panther_net;\n```\n\n\n\n### Local Installation\n\n#### Steps\n\n- Clone the repository:\n\n```bash\ngit clone https://github.com/ElNiak/PANTHER.git;\ncd PANTHER/;\ngit submodule update --init --recursive;\n```\n\n- Install the required Python packages:\n\n```bash\npython -m venv .venv;\nsource .venv/bin/activate;\nmake package\n```\n\n-  Verify Docker is installed:\n\n```bash\ndocker --version;\ndocker-compose --version;\n```\n\nOr:\n\n- [Pypi Installation](https://pypi.org/project/panther-net/)\n\n- Run the PANTHER CLI:\n\n```bash\npanther --help\nusage: panther [-h] [--experiment-config EXPERIMENT_CONFIG] [--exec-env-dir EXEC_ENV_DIR] [--net-env-dir NET_ENV_DIR] [--iut-dir IUT_DIR] [--tester-dir TESTER_DIR] [--output-dir OUTPUT_DIR]\n               [--experiment-name EXPERIMENT_NAME] [--teardown] [--webapp]\n\nPanther CLI\n\noptions:\n  -h, --help            show this help message and exit\n  --experiment-config EXPERIMENT_CONFIG\n                        Path to the configuration directory.\n  --exec-env-dir EXEC_ENV_DIR\n                        Path to the execution plugin additional directory.\n  --net-env-dir NET_ENV_DIR\n                        Path to the network plugin additional directory.\n  --iut-dir IUT_DIR     Path to a new IUT plugin additional directory.\n  --tester-dir TESTER_DIR\n                        Path to a new tester plugin additional directory.\n  --output-dir OUTPUT_DIR\n                        Path to the output directory.\n  --experiment-name EXPERIMENT_NAME\n                        Name of the experiment.\n  --teardown            Flag to teardown an existing experiment.\n  --webapp              Start the web app to configurate the experiments\n```\n\n\n## Quick Start\n\n1. Set Up Configuration:\n\n    - Create a sample configuration file:\n\n```\nlogging:\n  level: DEBUG\n  format: \"%(asctime)s [%(levelname)s] - %(module)s - %(message)s\"\npaths:\n  output_dir: \"outputs\"\n  log_dir: \"outputs/logs\"\n  config_dir: \"panther/configs\"\n  plugin_dir: \"panther/plugins\"\ndocker:\n  build_docker_image: True\ntests:\n  - name: \"Strace - QUIC IyvClient-Server Communication Test\"\n    description: \"Verify that the Picoquic server can communicate with the Ivy-Tester client over Docker Compose network.\"\n    network_environment:\n      type: \"docker_compose\"\n    execution_environment:\n      - type: \"strace\"\n    iterations: 1\n    services:\n      picoquic_server:\n        name: \"picoquic_server\"\n        timeout: 100\n        implementation:\n          name: \"picoquic\" # parameters are presents in folder plugins/services/implementations/quic/picoquic/config.yaml\n          type: \"iut\"      # plugin is present plugins/services/iut/quic/picoquic\n        protocol:          # plugin is present plugins/protocols/\n          name: \"quic\"\n          version: \"rfc9000\"\n          role: \"server\"\n        ports:\n          - \"4443:4443\"\n          - \"8080:8080\"\n        generate_new_certificates: True\n      ivy_client:\n        name: \"ivy_client\"  # Added 'name' key\n        timeout: 100\n        implementation:\n          name: \"panther_ivy\"\n          type: \"testers\"                  # plugin is present plugins/services/testers/panther_ivy\n          test: quic_server_test_stream\n        protocol:                          # plugin is present plugins/services/iut/quic\n          name: \"quic\"\n          version: \"rfc9000\"\n          role: \"client\"\n          target: \"picoquic_server\"        # Docker Compose service name\n        ports:\n          - \"5000:5000\"\n          - \"4987:4987\"\n          - \"8081:8081\"\n        generate_new_certificates: True\n    steps:\n      wait: 100  # seconds to wait during the test\n```\n\n    - Modify the file as needed to suit your experiment.\n\n2. Run an Experiment:\n\n    - Execute an experiment:\n\n\n```bash\npanther --experiment-config experiment-config/experiment_config.yaml;\n```\n\n    - View Results:\n      Experiment results are saved in the `outputs/` directory.\n\n## Project Structure\n\n```\ntests/                  # Unit tests\noutputs/                # Experiment results and logs\npanther/\n├── config/              # Configuration files and schemas\n├── core/                # Core experiment logic\n├── plugins/             # Plugin implementations for protocols, environments, etc.\n├──── services/          # Protocol implementations\n├────── iut/             # Protocol-specific implementations\n├────────── quic/        # QUIC protocol implementations\n├──────────── picoquic/  # Picoquic implementation\n├──────────── ...\n├────────── minip/       # MiniP protocol implementations\n├────────── ...\n├────── testers/         # Testers for protocol implementations\n├────────── panther_ivy/ # Ivy tester implementation\n├──── environments/      # Environment configurations\n├────── network_environment/    # Network environment configurations\n├────────── docker_compose/     # Docker Compose configurations\n├────────── shadow_ns/          # Shadow NS configurations\n├────────── localhost_single_container/     # Localhost single container configurations\n├────── execution_environment/  # Execution environment configurations\n├────────── strace/             # Strace configurations\n├────────── gperf_heap/         # Gperf Heap profiling configurations\n├────────── gperf_cpu/          # Gperf CPU profiling configurations\n├──── protocols/         # Protocol definitions\n└── __main__.py          # Command-line interface for PANTHER\n```\n\n\n## Overview of Existing Plugins in the PANTHER Framework\n\nThis document provides an overview of the existing plugins in the PANTHER framework, organized into three categories: Execution Environments, Network Environments, and Protocols/Services.\n\n---\n\n### 1. Execution Environment Plugins\n\n\n#### **GPerf (CPU \u0026 Heap)**\n- **Path**: `plugins/environments/execution_environment/gperf_cpu` and `gperf_heap`\n- **Purpose**: Provides performance profiling for CPU and heap usage.\n- **Key Features**:\n  - Tracks system performance metrics during experiments.\n  - Generates detailed profiling reports.\n\n#### **Strace**\n- **Path**: `plugins/environments/execution_environment/strace`\n- **Purpose**: Adds execution tracing capabilities to experiments.\n- **Key Features**:\n  - Monitors system calls and signals during execution.\n\n---\n\n## 2. Network Environment Plugins\n\n#### **Docker Compose for Networking**\n- **Path**: `plugins/environments/network_environment/docker_compose`\n- **Purpose**: Simulates networking scenarios using Docker Compose.\n- **Key Features**:\n  - Allows network latency and bandwidth configuration.\n  - Dynamically generates network configurations via templates.\n\n#### **Shadow Networking Simulation**\n- **Path**: `plugins/environments/network_environment/shadow_ns`\n- **Purpose**: Simulates networking environments for protocols and services.\n- **Key Features**:\n  - Emulates complex network topologies.\n  - Supports distributed and multi-node setups.\n  - Reproducible experiments with controlled network conditions.\n  - But all iut not compatible with shadow_ns\n\n#### **Localhost Single Container**\n- **Path**: `plugins/environments/network_environment/localhost_single_container`\n- **Purpose**: Runs experiments in a single container environment.\n- **Key Features**:\n  - Lightweight setup for quick tests.\n  - Ideal for testing individual components.\n\n---\n\n### 3. Protocol  Plugins\n\n#### **Client-Server Protocols**\n\n##### **QUIC**\n- **Path**: `plugins/protocols/client_server/quic`\n- **Purpose**: Implements and tests the QUIC protocol.\n- **Key Features**:\n  - Supports multiple versions (e.g., Draft29, RFC9000).\n  - Includes configuration schemas for protocol settings.\n\n##### **MinIP**\n- **Path**: `plugins/protocols/client_server/minip`\n- **Purpose**: Implements a minimal IP-based protocol for testing.\n- **Key Features**:\n  - Supports versioning through YAML configurations.\n\n### 4. **Services (IUT)**\n\n#### MiniP\n\n**PingPong**\n- **Path**: `plugins/services/iut/minip/ping_pong`\n- **Key Features**:\n  - Includes multiple versions (e.g., functional, vulnerable).\n\n#### QUIC\n\n**PicoQUIC**\n- **Path**: `plugins/services/iut/quic/picoquic`\n\n**PicoQUIC Shadow**\n- **Path**: `plugins/services/iut/quic/picoquic_shadow`\n\n**Quant**\n- **Path**: `plugins/services/iut/quic/quant`\n- **Warning**: No tested since PFV (might need to update configuration)\n\n**Quiche**\n- **Path**: `plugins/services/iut/quic/quiche`\n- **Warning**: No tested since PFV (might need to update configuration)\n\n**Quinn**\n- **Path**: `plugins/services/iut/quic/quinn`\n- **Warning**: No tested since PFV (might need to update configuration)\n\n**Mvfst**\n- **Path**: `plugins/services/iut/quic/mvfst`\n- **Warning**: No tested since PFV (might need to update configuration)\n\n**Aioquic**\n- **Path**: `plugins/services/iut/quic/aioquic`\n- **Warning**: No tested since PFV (might need to update configuration)\n\n**Lsquic**\n- **Path**: `plugins/services/iut/quic/lsquic`\n- **Warning**: No tested since PFV (might need to update configuration)\n\n**Quic-go**\n- **Path**: `plugins/services/iut/quic/quic_go`\n- **Warning**: No tested since PFV (might need to update configuration)\n\nNote that many of them just need to be upgrade from the old version of [PANTHER](https://github.com/ElNiak/PANTHER/tree/development-formal-attacks/panther/panther_worker/app/implementations).\n\n### 5. **Tester**\n\n#### **PantherIvy**\n- **Path**: `plugins/services/testers/panther_ivy`\n- **Purpose**: Provides testing capabilities for the Ivy framework within the PANTHER environment.\n- **Key Features**:\n  - Integrates Ivy-based tests for protocol verification.\n  - Supports automated test execution and result collection.\n  - Facilitates formal verification of network protocols.\n  - Repository: [https://github.com/ElNiak/PANTHER-Ivy/](https://github.com/ElNiak/PANTHER-Ivy/)\n\n**Note:** the statefull fuzzer is still not available in public.\n\n---\n\n### Extending Plugins\n\nEach plugin is designed to be modular and extensible. \n\nTo add a new plugin, follow the tutorials in the respective categories:\n\n- [Adding a New Execution Environment](ADDING_EXEC_ENV.md)\n- [Adding a New Network Environment](ADDING_NET_ENV.md)\n- [Adding a New IUT](ADDING_IUT.md)\n- [Configuration Guide](CONFIG_GUIDE.md)\n- [Plugin Development Guide](PLUGIN_GUIDE.md)\n\n## Documentation\n\nFor detailed information on using PANTHER, see the:\n\n- [elniak.github.io/PANTHER](elniak.github.io/PANTHER)\n\n\n## Contributing\n\nContributions are welcome! To get started:\n\n- Fork the repository.\n\n- Create a new branch for your feature or bug fix.\n\n- Submit a pull request with a clear description of your changes.\n\nFor more details, see the Contribution Guide.\n\n\n## Contact\n\nFor support or inquiries, please contact:\n\n- ElNiak\n- Open an issue on the GitHub repository.\n\n\n---\n\n## :book: References\n\nFor further reading and context on the topics and methodologies used in this tool, refer to the following articles:\n\n- Crochet, C., Aoga, J., \u0026 Legay, A. (2024). Formally Discovering and Reproducing Network Protocols Vulnerabilities (NordSec24).\n\n```\n@techreport{crochet2024formally,\n  title={Formally Discovering and Reproducing Network Protocols Vulnerabilities},\n  author={Crochet, Christophe and Aoga, John and Legay, Axel},\n  year={2024}\n  url={https://dial.uclouvain.be/pr/boreal/object/boreal:292503}\n}\n```\n\n- Rousseaux, T., Crochet, C., Aoga, J., Legay, A. (2024). Network Simulator-Centric Compositional Testing. In: Castiglioni, V., Francalanza, A. (eds) Formal Techniques for Distributed Objects, Components, and Systems. FORTE 2024. Lecture Notes in Computer Science, vol 14678. Springer, Cham. https://doi.org/10.1007/978-3-031-62645-6_10\n\n```\n@inproceedings{rousseaux2024network,\n  title={Network Simulator-Centric Compositional Testing},\n  author={Rousseaux, Tom and Crochet, Christophe and Aoga, John and Legay, Axel},\n  booktitle={International Conference on Formal Techniques for Distributed Objects, Components, and Systems},\n  pages={177--196},\n  year={2024},\n  organization={Springer},\n  doi={https://doi.org/10.1007/978-3-031-62645-6_10}\n}\n```\n\n- Crochet, C., Rousseaux, T., Piraux, M., Sambon, J.-F., \u0026 Legay, A. (2021). Verifying quic implementations using ivy. In *Proceedings of the 2021 Workshop on Evolution, Performance and Interoperability of QUIC*. [DOI](10.1145/3488660.3493803)\n\n```\n@inproceedings{crochet2021verifying,\n  title={Verifying QUIC implementations using Ivy},\n  author={Crochet, Christophe and Rousseaux, Tom and Piraux, Maxime and Sambon, Jean-Fran{\\c{c}}ois and Legay, Axel},\n  booktitle={Proceedings of the 2021 Workshop on Evolution, Performance and Interoperability of QUIC},\n  pages={35--41},\n  year={2021},\n  url={https://dl.acm.org/doi/abs/10.1145/3488660.3493803}\n}\n```\n\n- Crochet, C., \u0026 Sambon, J.-F. (2021). Towards verification of QUIC and its extensions. (Master's thesis, UCL - Ecole polytechnique de Louvain). Available at [UCLouvain](http://hdl.handle.net/2078.1/thesis:30559). Keywords: QUIC, Formal Verification, RFC, IETF, Specification, Ivy, Network.\n\n```\n@article{crochettowards,\n  title={Towards verification of QUIC and its extensions},\n  author={Crochet, Christophe and Sambon, Jean-Fran{\\c{c}}ois}\n  year={2021},\n  url={https://dial.uclouvain.be/downloader/downloader.php?pid=thesis%3A30559\u0026datastream=PDF_01\u0026cover=cover-mem}\n}\n```\n\nFor other useful resources, see the following:\n\n- McMillan, K. L., \u0026 Padon, O. (2018). Deductive Verification in Decidable Fragments with Ivy. In A. Podelski (Ed.), *Static Analysis - 25th International Symposium, SAS 2018, Freiburg, Germany, August 29-31, 2018, Proceedings* (pp. 43–55). Springer. [DOI](10.1007/978-3-319-99725-4_4) - [PDF](SAS18.pdf)\n\n- Taube, M., Losa, G., McMillan, K. L., Padon, O., Sagiv, M., Shoham, S., Wilcox, J. R., \u0026 Woos, D. (2018). Modularity for decidability of deductive verification with applications to distributed systems. In *Proceedings of the 39th ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI 2018, Philadelphia, PA, USA, June 18-22, 2018* (pp. 662–677). ACM. [DOI](10.1145/3192366.3192414)\n\n- Padon, O., Hoenicke, J., McMillan, K. L., Podelski, A., Sagiv, M., \u0026 Shoham, S. (2018). Temporal Prophecy for Proving Temporal Properties of Infinite-State Systems. In *2018 Formal Methods in Computer Aided Design, FMCAD 2018, Austin, TX, USA, October 30 - November 2, 2018* (pp. 1–11). IEEE. [DOI](10.23919/FMCAD.2018.8603008) - [PDF](FMCAD18.pdf)\n\n- Padon, O., McMillan, K. L., Panda, A., Sagiv, M., \u0026 Shoham, S. (2016). Ivy: safety verification by interactive generalization. In *Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI 2016, Santa Barbara, CA, USA, June 13-17, 2016* (pp. 614–630). ACM. [DOI](10.1145/2908080.2908118)\n\n- McMillan, K. L. (2016). Modular specification and verification of a cache-coherent interface. In *2016 Formal Methods in Computer-Aided Design, FMCAD 2016, Mountain View, CA, USA, October 3-6, 2016* (pp. 109–116). [DOI](10.1109/FMCAD.2016.7886668)\n\n- McMillan, K. L., \u0026 Zuck, L. D. (2019). Formal specification and testing of QUIC. In *Proceedings of ACM Special Interest Group on Data Communication (SIGCOMM’19)*. ACM. Note: to appear. [PDF](SIGCOMM19.pdf)\n\n- [Ivy Documentation](https://microsoft.github.io/ivy/)\n\n- [Ivy GitHub Repository](https://github.com/microsoft/ivy)\n\n\u003cpicture\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: dark)\"\n    srcset=\"\n      https://api.star-history.com/svg?repos=ElNiak/PANTHER\u0026type=Date\u0026theme=dark\n    \"\n  /\u003e\n  \u003csource\n    media=\"(prefers-color-scheme: light)\"\n    srcset=\"\n      https://api.star-history.com/svg?repos=ElNiak/PANTHER\u0026type=Date\n    \"\n  /\u003e\n  \u003cimg\n    alt=\"Star History Chart\"\n    src=\"https://api.star-history.com/svg?repos=ElNiak/PANTHER\u0026type=Date\"\n  /\u003e\n\u003c/picture\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felniak%2Fpanther","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felniak%2Fpanther","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felniak%2Fpanther/lists"}