Go to file
Kieran Prasch 50f4da89db Fix GH rst rending of python line numbers. 2018-02-16 16:52:16 -08:00
docs Initial sphinx project tree and build commands; Includes example jupyter notebooks. 2018-02-16 16:52:16 -08:00
tests Ensures simple api is testable on multiple curves, with a test session default set. 2018-02-13 13:44:21 -08:00
umbral Changing all implemented instances of get_pub_key() to get_pubkey() 2018-02-13 12:50:44 -08:00
.gitignore changes multi-curve xfail reason. 2018-02-12 10:22:02 -08:00
.travis.yml Remove 3.7 from travis 2018-02-16 13:39:48 -07:00
Pipfile Initial sphinx project tree and build commands; Includes example jupyter notebooks. 2018-02-16 16:52:16 -08:00
Pipfile.lock Updates pipfile with sphinx deps. 2018-02-16 16:52:16 -08:00
README.rst Fix GH rst rending of python line numbers. 2018-02-16 16:52:16 -08:00
demo.py Add pyUmbral demo code 2018-02-16 13:36:07 -07:00
setup.py Implement method save_key for UmbralPrivateKey with key encryption using Scrypt-Salsa20-Poly1305 2018-01-19 06:08:39 -07:00
tox.ini Basic setup 2017-12-28 02:06:20 +01:00

README.rst

.. role:: bash(code)
   :language: bash


pyUmbral
========

.. image:: https://travis-ci.org/nucypher/pyUmbral.svg?branch=master
    :target: https://travis-ci.org/nucypher/pyUmbral

pyUmbral is a 100% python implementation of Umbral using OpenSSL and Cryptography.io,
enabling users to perform public key encryption and split key proxy-rencryption
in a straightforward and usable manner.

**Alice encrypts data for herself**

.. code-block:: python

    from umbral import umbral, keys

    # Generate a key pair for Alice
    alices_private_key = keys.UmbralPrivateKey.gen_key()
    alices_public_key = private_key.get_pubkey()

    # Encrypt data with bob's public key
    plaintext = b'Proxy Re-encryption is cool!'
    ciphertext, capsule = umbral.encrypt(alices_public_key, plaintext)

    # Decrypt data with Bob's keys
    cleartext = umbral.decrypt(capsule, alices_private_key, ciphertext, alices_public_key)

**Ursula Re-encrypts for Bob**

.. code-block:: python

    # Generate a key pair for Bob
    bobs_private_key = keys.UmbralPrivateKey.gen_key()
    bobs_public_key = private_key.get_pubkey()

    # Bob receives the capsule through a side channel (S3, ipfs, Google Cloud, etc.)
    capsule = capsule

    # Generate split re-encryption keys with "M of N"
    # Minimum threshold of 10 ("M") - and 20 total shares ("N").
    kfrags, _ = umbral.split_rekey(alices_private_key, bobs_public_key, 10, 20)

    # Ursula re-encrypts the shares and bob attaches them to the capsule
    for kfrag in kfrags:
        cfrag = umbral.reencrypt(kfrag, umbral_capsule)
        bob_capsule.attach_cfrag(cfrag)

    # Bob opens the capsule and decrypts the re-encrypted ciphertext
    plaintext = umbral.decrypt(capsule, bobs_private_key, ciphertext, alices_public_key)


Features
--------
- Proxy re-encryption
- Asymmetric key pair generation
- Public key encryption
- Key Encapsulation


Installation
------------

The NuCypher team uses pipenv for managing pyUmbral's dependencies.
The recommended installation procedure is as follows...

.. code-block:: bash

    $ sudo pip3 install pipenv
    $ pipenv install

Post-installation, you can activate the project virtual enviorment
in your current terminal session by running :bash:`pipenv shell`.

For more information on pipenv, find the official documentation here: `https://docs.pipenv.org/`_.

Support & Contribute
---------------------

- Issue Tracker: `github.com/nucypher/pyUmbral/issues`_
- Source Code: `github.com/nucypher/pyUmbral`_