1 unstable release
0.0.1 | Jun 11, 2021 |
---|
#12 in #reply
35KB
1K
SLoC
libepir - EllipticPIR client library
EllipticPIR is a private information retrieval (PIR) implementation backed by the EC-ElGamal encryption.
Try online WebAssembly demo: https://demo.ellipticpir.com/
This library contains cryptographic functions which are required to encrypt a query (a selector) to the EllipticPIR server and to decrypt a reply from the EllipticPIR server.
This repository provides native C library implementation and bindings for C++, native Rust implementation and JavaScript and TypeScript programming languages.
C / C++
The C implementation has no runtime heap memory allocation. The C++ bindings is a header-only library.
Install
$ git clone https://github.com/EllipticPIR/libepir.git
$ cd libepir
$ mkdir build_c
$ cd build_c
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make -j4 # (change the number "4" to your physical CPU cores to parallelize the build).
$ sudo make install
Generate mG.bin
$ epir_genm
Usage
Include epir.h (C) or epir.hpp (C++) in your source code.
For general usage, see ./src_c/bench_*.(c|cpp) files.
Rust
Install
cargo
cargo install epir
git
$ git clone https://github.com/EllipticPIR/libepir.git
$ cd libepir
$ cargo build
Generate mG.bin
$ cargo run --bin gen_mg
Usage
Visit docs.rs/epir for usage.
Node.js / TypeScript
This library both includes Node.js native addons (faster, no browser support) and WebAssembly builds (slower, browser support).
Install
npm
$ npm install epir
Build your own
$ git clone https://github.com/EllipticPIR/libepir.git
$ cd libepir
$ npm ci
Usage
See ./src_ts/types.ts for Node.js binding definitions.
For general usage, see files under the ./src_ts/__tests__ directory and ./pages/index.vue.
FAQs
What is mG.bin?
To decrypt a server's reply, you need to generate the mG.bin file. This file contains the pre-computation values of (G, 2*G, .., (0xFFFFFF)*G), where G is the generater of the Ed25519 curve.
To generate mG.bin, run
$ epir_genm
or
$ npm run epir_genm
The computation may take tens of seconds to finish. The computation time depends on the CPU power of your machine. (For comparison, on my desktop (Intel Core i7-7700K) it takes about ~15sec.)
The generated file will be located in $HOME/.EllipticPIR/mG.bin. The file size will be ~576MiB.
If you will not decrypt a server's reply, you can skip this step.
Dependencies
~3.5MB
~67K SLoC