Metadata-Version: 2.4
Name: DoubleRatchet
Version: 1.1.2
Summary: A Python implementation of the Double Ratchet algorithm.
Author-email: "Tim Henkes (Syndace)" <me@syndace.dev>
Maintainer-email: "Tim Henkes (Syndace)" <me@syndace.dev>
License-Expression: MIT
Project-URL: Documentation, https://python-doubleratchet.readthedocs.io/
Project-URL: Repository, https://github.com/Syndace/python-doubleratchet
Project-URL: Issues, https://github.com/Syndace/python-doubleratchet/issues
Project-URL: Changelog, https://github.com/Syndace/python-doubleratchet/blob/main/CHANGELOG.md
Classifier: Development Status :: 5 - Production/Stable
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Intended Audience :: Developers
Classifier: Topic :: Security :: Cryptography
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: cryptography>=3.3.2
Requires-Dist: pydantic>=1.7.4
Requires-Dist: typing-extensions>=4.3.0
Provides-Extra: docs
Requires-Dist: sphinx; extra == "docs"
Requires-Dist: sphinx-rtd-theme; extra == "docs"
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
Provides-Extra: test
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-asyncio; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Provides-Extra: lint
Requires-Dist: mypy; extra == "lint"
Requires-Dist: types-setuptools; extra == "lint"
Requires-Dist: pylint; extra == "lint"
Requires-Dist: setuptools; extra == "lint"
Requires-Dist: flake8; extra == "lint"
Requires-Dist: flake8-pyproject; extra == "lint"
Provides-Extra: dev
Requires-Dist: doubleratchet[docs,lint,test]; extra == "dev"
Dynamic: license-file

[![PyPI](https://img.shields.io/pypi/v/DoubleRatchet.svg)](https://pypi.org/project/DoubleRatchet/)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/DoubleRatchet.svg)](https://pypi.org/project/DoubleRatchet/)
[![Build Status](https://github.com/Syndace/python-doubleratchet/actions/workflows/test-and-publish.yml/badge.svg)](https://github.com/Syndace/python-doubleratchet/actions/workflows/test-and-publish.yml)
[![Documentation Status](https://readthedocs.org/projects/python-doubleratchet/badge/?version=latest)](https://python-doubleratchet.readthedocs.io/)

**_This repository is actively maintained._**

Activity is low at times because this project is already feature-complete, documented and tested.

# python-doubleratchet #

A Python implementation of the [Double Ratchet algorithm](https://signal.org/docs/specifications/doubleratchet/).

## Installation ##

Install the latest release using pip (`pip install DoubleRatchet`) or manually from source by running `pip install .` in the cloned repository.

## Differences to the Specification ##

This library implements the core of the Double Ratchet specification and includes a few of the recommended algorithms.
This library does _not_ currently offer sophisticated decision mechanisms for the deletion of skipped message keys.
Skipped message keys are only deleted when the maximum amount is reached, and old keys are deleted from the storage in
FIFO order. There is no time-based or event-based deletion.

## Testing, Type Checks and Linting ##

python-doubleratchet uses [pytest](https://docs.pytest.org/en/latest/) as its testing framework, [mypy](http://mypy-lang.org/) for static type checks and both [pylint](https://pylint.pycqa.org/en/latest/) and [Flake8](https://flake8.pycqa.org/en/latest/) for linting. All tests/checks can be run locally with the following commands:

```sh
$ pip install --upgrade .[test,lint]
$ mypy doubleratchet/ examples/ tests/
$ pylint doubleratchet/ examples/ tests/
$ flake8 doubleratchet/ examples/ tests/
$ pytest
```

## Documentation ##

View the documentation on [readthedocs.io](https://python-doubleratchet.readthedocs.io/) or build it locally. Additional requirements to build the docs can be installed using `pip install .[docs]`. With all dependencies installed, run `make html` in the `docs/` directory. You can find the generated documentation in `docs/_build/html/`.
