Skip to main content
Donate to the Python Software Foundation or Purchase a PyCharm License to Benefit the PSF! Donate Now

A pythonic library to use Garbled Circuits

Project description

https://travis-ci.org/nachonavarro/gabes.svg?branch=master https://img.shields.io/badge/License-MIT-yellow.svg

Introduction

Garbled Circuits allow two distrusting parties to compute a joint function while keeping their inputs private. More precisely, it allows Alice with input x and Bob with input y to compute a function f(x, y) without Alice ever knowing y and without Bob knowing x. The way it does so is by first translating f to a boolean circuit from which it will cleverly obfuscate or garble the circuit to allow the computation of f while keeping the inputs private.

The classical example is that of two millionaires who wish to find out who is richer without revealing their wealth. In that case, f becomes the “>” (greater than) function, and x and y are their wealth.

Gabes implements garbled circuits in Python. The application runs as a command line interface but the functions required to run garbled circuits can be used without the command line (see gabes).

Installation

At the command line either via pip:

$ pip install gabes

Or, if you have virtualenvwrapper installed:

$ mkvirtualenv gabes
$ pip install gabes

Usage

Each party will run their own instance of the program on their computer as a CLI app. The garbler will provide the IP and port number to establish the connection with the evaluator.

Note

Make sure to open the port when connecting between two different networks.

Garbler’s Side:

gabes -g -grr3 -c Desktop/my-circuit.circuit -a localhost:5000

Evaluator’s Side:

gabes -e -grr3 -a localhost:5000

Flags

usage: gabes [-h] [-g] [-e] [-b bits] [-i identifier [identifier ...]]
                   [-c file] -a ip:port [-cl] [-pp] [-grr3] [-free] [-grr2]
                   [-fle] [-half]

Program to garble and evaluate a circuit.

optional arguments:
  -h, --help            show this help message and exit
  -g, --garbler         Set this flag to become the garbler
  -e, --evaluator       Set this flag to become the evaluator
  -b bits, --bits bits  Include your private input bitstring to the circuit
                        (e.g. 001011)
  -i identifier [identifier ...], --identifiers identifier [identifier ...]
                        Indicate which input wires you supply to the circuit
                        (e.g. -i A C D)
  -c file, --circuit file
                        Path of the file representing the circuit. Only the
                        garbler needs to supply the file
  -a ip:port, --address ip:port
                        IP address followed by the port number
  -cl, --classical      Set this flag for classical garbled circuits
  -pp, --point-and-permute
                        Set this flag to include point-and-permute
  -grr3, --grr3         Set this flag for GRR3 garbled circuits
  -free, --free-xor     Set this flag for free-xor garbled circuits
  -fle, --flexor        Set this flag for flexor garbled circuits
  -half, --half-gates   Set this flag for half gates garbled circuits

Documentation

All the documentation can be found in https://gabes.readthedocs.io/en/latest/

Project details


Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
gabes-0.1.5-py2.py3-none-any.whl (23.5 kB) Copy SHA256 hash SHA256 Wheel 3.6
gabes-0.1.5.tar.gz (22.2 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page