hMPC 0.1.0.0 → 0.1.0.1
raw patch · 3 files changed
+24/−91 lines, 3 filesdep ~bytestringdep ~containersdep ~hashable
Dependency ranges changed: bytestring, containers, hashable, lens, mtl, network, time
Files
- README.md +0/−68
- app/Runtime.hs +2/−0
- hMPC.cabal +22/−23
− README.md
@@ -1,68 +0,0 @@-<!-- [](https://mybinder.org/v2/gh/lschoe/mpyc/master) -[](https://app.travis-ci.com/lschoe/mpyc) -[](https://codecov.io/gh/lschoe/mpyc) -[](https://mpyc.readthedocs.io) -[](https://pypi.org/project/mpyc/) --> - -# hMPC Multiparty Computation in Haskell - -This hMPC library, written in the functional language Haskell, serves as a counterpart to the original [MPyC](https://github.com/lschoe/mpyc) library, written in the imperative language Python and developed by Berry Schoenmakers. - -hMPC supports secure *m*-party computation tolerating a dishonest minority of up to *t* passively corrupt parties, -where *m ≥ 1* and *0 ≤ t < m/2*. The underlying cryptographic protocols are based on threshold secret sharing over finite -fields (using Shamir's threshold scheme and optionally pseudorandom secret sharing). - -The details of the secure computation protocols are mostly transparent due to the use of sophisticated operator overloading -combined with asynchronous evaluation of the associated protocols. - -## Documentation - -See `demos` for Haskell programs with lots of example code. See `docs/basics.rst` for a basic secure computation example in Haskell. - -The initial reseach is part of a master's graduation project. For further reading, refer to the complementary master's thesis: [Multiparty Computation in Haskell: From MPyC to hMPC](https://research.tue.nl/en/studentTheses/multiparty-computation-in-haskell). - - -Original Python MPyC documentation: - -[Read the Docs](https://mpyc.readthedocs.io/) for `Sphinx`-based documentation, including an overview of the `demos`. - -The [MPyC homepage](https://www.win.tue.nl/~berry/mpyc/) has some more info and background. -<!-- [GitHub Pages](https://lschoe.github.io/mpyc/) for `pydoc`-based documentation. --> - - - -<!-- ## Installation --> - -<!-- Pure Python, no dependencies. Python 3.9+ (following [NumPy's deprecation policy](https://numpy.org/neps/nep-0029-deprecation_policy.html#support-table)). - -Run `pip install .` in the root directory (containing file `setup.py`).\ -Or, run `pip install -e .`, if you want to edit the MPyC source files. - -Use `pip install numpy` to enable support for secure NumPy arrays in MPyC, along with vectorized implementations. - -Use `pip install gmpy2` to run MPyC with the package [gmpy2](https://pypi.org/project/gmpy2/) for considerably better performance. - -Use `pip install uvloop` (or `pip install winloop` on Windows) to replace Python's default asyncio event loop in MPyC for generally improved performance. --> - -<!-- ### Some Tips --> - -<!-- - Try `run-all.sh` or `run-all.bat` in the `demos` directory to have a quick look at all pure Python demos. -Demos `bnnmnist.py` and `cnnmnist.py` require [NumPy](https://www.numpy.org/), demo `kmsurvival.py` requires -[pandas](https://pandas.pydata.org/), [Matplotlib](https://matplotlib.org/), and [lifelines](https://pypi.org/project/lifelines/), -and demo `ridgeregression.py` (and therefore demo `multilateration.py`) even require [Scikit-learn](https://scikit-learn.org/).\ -Try `np-run-all.sh` or `np-run-all.bat` in the `demos` directory to run all Python demos employing MPyC's secure arrays. -Major speedups are achieved due to the reduced overhead of secure arrays and vectorized processing throughout the -protocols. --> - -<!-- - To use the [Jupyter](https://jupyter.org/) notebooks `demos\*.ipynb`, you need to have Jupyter installed, -e.g., using `pip install jupyter`. An interesting feature of Jupyter is the support of top-level `await`. -For example, instead of `mpc.run(mpc.start())` you can simply use `await mpc.start()` anywhere in -a notebook cell, even outside a coroutine.\ -For Python, you also get top-level `await` by running `python -m asyncio` to launch a natively async REPL. -By running `python -m mpyc` instead you even get this REPL with the MPyC runtime preloaded! --> - -<!-- - Directory `demos\.config` contains configuration info used to run MPyC with multiple parties. -The file `gen.bat` shows how to generate fresh key material for SSL. To generate SSL key material of your own, first run -`pip install cryptography` (alternatively, run `pip install pyOpenSSL`). --> - -Copyright © 2024 Nick van Gils
app/Runtime.hs view
@@ -17,9 +17,11 @@ import Data.List.Split import Data.List import Data.Bits +import Data.Function import Text.Printf import System.Info (os) import Control.Concurrent +import Control.Monad import Control.Monad.State import Asyncoro import System.Process
hMPC.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: hMPC-version: 0.1.0.0+version: 0.1.0.1 synopsis: Multiparty Computation in Haskell description: hMPC is a Haskell package for secure multiparty computation (MPC). .@@ -35,7 +35,6 @@ license-file: LICENSE build-type: Simple extra-source-files:- README.md CHANGELOG.md source-repository head@@ -61,21 +60,21 @@ build-depends: base >=4.7 && <5 , binary >=0.8.8 && <0.9- , bytestring >=0.10.12 && <0.11+ , bytestring >=0.10.12 && <0.13 , cereal >=0.5.8 && <0.6- , containers >=0.6.4 && <0.7- , hashable >=1.3.5.0 && <1.5+ , containers >=0.6.4 && <0.8+ , hashable >=1.3.5.0 && <1.6 , hgmp >=0.1.2 && <0.2 , hslogger >=1.3.1 && <1.4- , lens >=5.0.1 && <5.3- , mtl >=2.2.2 && <2.3- , network >=3.1.2.7 && <3.2+ , lens >=5.0.1 && <5.4+ , mtl >=2.2.2 && <2.4+ , network >=3.1.2.7 && <3.3 , optparse-applicative >=0.16.1.0 && <0.19 , process >=1.6.13 && <1.7 , random >=1.2.1 && <1.3 , split >=0.2.3.4 && <0.3 , stm >=2.5.0 && <2.6- , time >=1.9.3 && <1.10+ , time >=1.9.3 && <1.15 , vector >=0.12.3.1 && <0.14 default-language: Haskell2010 @@ -89,22 +88,22 @@ build-depends: base >=4.7 && <5 , binary >=0.8.8 && <0.9- , bytestring >=0.10.12 && <0.11+ , bytestring >=0.10.12 && <0.13 , cereal >=0.5.8 && <0.6- , containers >=0.6.4 && <0.7+ , containers >=0.6.4 && <0.8 , hMPC- , hashable >=1.3.5.0 && <1.5+ , hashable >=1.3.5.0 && <1.6 , hgmp >=0.1.2 && <0.2 , hslogger >=1.3.1 && <1.4- , lens >=5.0.1 && <5.3- , mtl >=2.2.2 && <2.3- , network >=3.1.2.7 && <3.2+ , lens >=5.0.1 && <5.4+ , mtl >=2.2.2 && <2.4+ , network >=3.1.2.7 && <3.3 , optparse-applicative >=0.16.1.0 && <0.19 , process >=1.6.13 && <1.7 , random >=1.2.1 && <1.3 , split >=0.2.3.4 && <0.3 , stm >=2.5.0 && <2.6- , time >=1.9.3 && <1.10+ , time >=1.9.3 && <1.15 , vector >=0.12.3.1 && <0.14 default-language: Haskell2010 @@ -122,21 +121,21 @@ HUnit >=1.6.2.0 , base >=4.7 && <5 , binary >=0.8.8 && <0.9- , bytestring >=0.10.12 && <0.11+ , bytestring >=0.10.12 && <0.13 , cereal >=0.5.8 && <0.6- , containers >=0.6.4 && <0.7+ , containers >=0.6.4 && <0.8 , hMPC- , hashable >=1.3.5.0 && <1.5+ , hashable >=1.3.5.0 && <1.6 , hgmp >=0.1.2 && <0.2 , hslogger >=1.3.1 && <1.4- , lens >=5.0.1 && <5.3- , mtl >=2.2.2 && <2.3- , network >=3.1.2.7 && <3.2+ , lens >=5.0.1 && <5.4+ , mtl >=2.2.2 && <2.4+ , network >=3.1.2.7 && <3.3 , optparse-applicative >=0.16.1.0 && <0.19 , process >=1.6.13 && <1.7 , random >=1.2.1 && <1.3 , split >=0.2.3.4 && <0.3 , stm >=2.5.0 && <2.6- , time >=1.9.3 && <1.10+ , time >=1.9.3 && <1.15 , vector >=0.12.3.1 && <0.14 default-language: Haskell2010