Skip to content

nachonavarro/gabes

Repository files navigation

Gabes: Garbled Circuits in Python

https://travis-ci.org/nachonavarro/gabes.svg?branch=master

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/

Releases

No releases published

Packages

No packages published