Skip to main content

Data structure for representing secret shares of byte vectors based on bitwise XOR, designed for use within secure multi-party computation (MPC) protocol implementations.

Project description

Data structure for representing secret shares of byte vectors based on bitwise XOR, designed for use within secure multi-party computation (MPC) protocol implementations.

PyPI version and link. Read the Docs documentation status. GitHub Actions status. Coveralls test coverage summary.

Purpose

This library provides a data structure and methods that make it possible to work with n-out-of-n XOR-based secret shares of bytes-like objects within secure multi-party computation (MPC) protocol implementations. Secret shares are represented using instances of class derived from bytes, and functions are provided both for splitting bytes-like objects into shares and for reconstructing bytes objects from shares.

Package Installation and Usage

The package is available on PyPI:

python -m pip install exclusive

The library can be imported in the usual ways:

import exclusive
from exclusive import *

Examples

This library makes it possible to concisely construct multiple XOR-based secret shares from a bytes-like object:

>>> from exclusive import shares, xor
>>> (a, b) = shares(bytes([1, 2, 3]))
>>> (c, d) = shares(bytes([4, 5, 6]))
>>> ((a ^ c) ^ (b ^ d)) == xor([bytes([1, 2, 3]), bytes([4, 5, 6])])
True

The number of shares can be specified explicitly (the default is two shares):

>>> (r, s, t) = shares(bytes([1, 2, 3]), quantity=3)

For convenience, an xor operator that is analogous to Python’s built-in sum function is provided:

>>> xor([bytes([1, 2, 3]), bytes([4, 5, 6])]).hex()
'050705

The share class is derived from the bytes class. Thus, all methods, operators, and functions that operate on bytes-like objects are supported for share objects. The xor operator provided by the library relies on Python’s built-in exclusive or operator and can be used for concise reconstruction of values from a collection of secret shares:

>>> xor([r, s, t]) == bytes([1, 2, 3])
True

In addition, conversion methods for Base64 strings are included to support encoding and decoding of share objects:

>>> share.from_base64('HgEA').hex()
'1e0100'
>>> [s.to_base64() for s in shares(bytes([1, 2, 3]))]
['mB6G', 'mRyF']

Documentation

The documentation can be generated automatically from the source files using Sphinx:

cd docs
python -m pip install -r requirements.txt
sphinx-apidoc -f -E --templatedir=_templates -o _source .. ../setup.py && make html

Testing and Conventions

All unit tests are executed and their coverage is measured when using pytest (see setup.cfg for configuration details):

python -m pip install pytest pytest-cov
python -m pytest

Alternatively, all unit tests are included in the module itself and can be executed using doctest:

python exclusive/exclusive.py -v

Style conventions are enforced using Pylint:

python -m pip install pylint
python -m pylint exclusive

Contributions

In order to contribute to the source code, open an issue or submit a pull request on the GitHub page for this library.

Versioning

The version number format for this library and the changes to the library associated with version number increments conform with Semantic Versioning 2.0.0.

Publishing

This library can be published as a package on PyPI by a package maintainer. Install the wheel package, remove any old build/distribution files, and package the source into a distribution archive:

python -m pip install wheel
rm -rf dist *.egg-info
python setup.py sdist bdist_wheel

Next, install the twine package and upload the package distribution archive to PyPI:

python -m pip install twine
python -m twine upload dist/*

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

exclusive-0.1.0-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file exclusive-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: exclusive-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2

File hashes

Hashes for exclusive-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 acacf78e947cebcbc8da9b2a092e61da27a8223641eef8eab6fe62359c59fcf9
MD5 82b337dace872660b6ef65f5726e8cc1
BLAKE2b-256 cceedeb0e1b51ffc3e70050a29ffb802a0794586dc77f4ca7edbe12f8b4dab7d

See more details on using hashes here.

Supported by

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