Metadata-Version: 2.1
Name: age
Version: 0.4.0
Summary: Actually good encryption. In Python.
Home-page: https://github.com/jojonas/pyage
Author: Jonas Lieb
License: MIT
Project-URL: Repository, https://github.com/jojonas/pyage
Project-URL: Documentation, https://pyage.readthedocs.io/
Project-URL: Specification, https://age-encryption.org/
Keywords: age encryption privacy experimental
Platform: any
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Environment :: Console
Classifier: Topic :: Security :: Cryptography
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Requires-Python: >= 3.6, <4
Description-Content-Type: text/markdown; charset=UTF-8
Requires-Dist: setuptools (>=38.3)
Requires-Dist: pynacl (>=1.4)
Requires-Dist: cryptography (>=2.7)
Requires-Dist: bcrypt (>=3.1)
Requires-Dist: click (>=7.1)
Requires-Dist: requests (>=2.24)
Provides-Extra: dev
Requires-Dist: black ; extra == 'dev'
Requires-Dist: flake8 ; extra == 'dev'
Requires-Dist: mypy ; extra == 'dev'
Requires-Dist: isort ; extra == 'dev'
Requires-Dist: versioneer ; extra == 'dev'
Provides-Extra: docs
Requires-Dist: sphinx ; extra == 'docs'
Requires-Dist: doc8 ; extra == 'docs'
Requires-Dist: sphinx-autodoc-typehints ; extra == 'docs'
Requires-Dist: sphinxcontrib-programoutput ; extra == 'docs'
Provides-Extra: test
Requires-Dist: pytest ; extra == 'test'
Requires-Dist: pyfakefs ; extra == 'test'
Requires-Dist: coverage ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'

# pyage

[![Build and Test](https://github.com/jojonas/pyage/workflows/Build%20and%20Test/badge.svg)](https://github.com/jojonas/pyage/actions?workflow=Build+and+Test)
[![Compatibility Check](https://github.com/jojonas/pyage/workflows/Compatibility%20with%20FiloSottile/age/badge.svg)](https://github.com/jojonas/pyage/actions?workflow=Compatibility%20with%20FiloSottile/age)
[![Documentation Status](https://readthedocs.org/projects/pyage/badge/?version=latest)](https://pyage.readthedocs.io/en/latest/?badge=latest)
![License](https://img.shields.io/github/license/jojonas/pyage)

![pyage screenshot](https://raw.githubusercontent.com/jojonas/pyage/master/docs/source/_static/carbon.png)

pyage is an experimental implementation of @FiloSottile and @Benjojo12 's project "age".
The spec is currently available as seven-page Google doc at [age-encryption.org/v1](https://age-encryption.org/v1).

This project is still work-in-progress.

⚠️ pyage is not intended to be a secure age implementation!
My original intention was to better understand the spec, find mistakes early and provide a redundant implementation for validation. I'm not a cryptographer (IANAC) and did not (yet) find the time to address  implementation-specific security issues (such as DoS attacks or side-channel attacks).

So:
*Use at your own risk.*

## Quick Start
Install from pip:

    $ pip install age

Generate a key pair:

    $ mkdir -p ~/.config/age
    $ pipenv run pyage generate > ~/.config/age/keys.txt

Encrypt a file:

    $ pipenv run pyage encrypt -i hello.txt -o hello.age pubkey:<recipient public key>

Decrypt a file (uses `~/.config/age/keys.txt`):

    $ pipenv run pyage decrypt -i hello.age

For a real tutorial, see [the Tutorial section in the documentation](https://pyage.readthedocs.io/en/latest/tutorials.html).

## Documentation
The full documentation can be found at [pyage.readthedocs.io](https://pyage.readthedocs.io/en/latest/index.html).

## Development
* Enforce PEP8 with [black](https://github.com/psf/black), [flake8](https://flake8.pycqa.org/en/latest/) and [isort](https://timothycrosley.github.io/isort/)
* Run unit tests ([pytest](https://docs.pytest.org/en/latest/)) with coverage testing
* Hint native types ([Python typing](https://docs.python.org/3/library/typing.html)), enforce with [mypy](http://mypy-lang.org/)
* Documentation with [Sphinx](https://www.sphinx-doc.org/en/master/), pushed to [pyage.readthedocs.io](https://pyage.readthedocs.io/en/latest/index.html)

## TODO
* Error handling
* Proper logging (to stderr)


