1个不稳定版本

0.0.1 2021年6月11日

#12#reply

MIT 许可证

35KB
1K SLoC

libepir - 椭圆PIR客户端库

CMake Rust Node.js CI codecov

椭圆PIR是基于EC-ElGamal加密的私有信息检索(PIR)实现。

尝试在线WebAssembly演示: https://demo.ellipticpir.com/

此库包含加密函数,这些函数用于加密发送到椭圆PIR服务器的查询(选择器)以及解密来自椭圆PIR服务器的回复。

此存储库提供了原生C库实现以及C++、原生Rust实现和JavaScript和TypeScript编程语言的绑定。

C / C++

C实现没有运行时堆内存分配。C++绑定是一个仅包含头文件的库。

安装

$ 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

生成mG.bin

$ epir_genm

用法

epir.h(C)或 epir.hpp(C++)包含到您的源代码中。

有关一般用法,请参阅 ./src_c/bench_*.(c|cpp) 文件。

Rust

安装

cargo

cargo install epir

git

$ git clone https://github.com/EllipticPIR/libepir.git
$ cd libepir
$ cargo build

生成mG.bin

$ cargo run --bin gen_mg

用法

访问 docs.rs/epir 了解用法。

Node.js / TypeScript

此库既包括Node.js原生插件(更快,不支持浏览器)也包括WebAssembly构建(较慢,支持浏览器)。

安装

npm

$ npm install epir

自行构建

$ git clone https://github.com/EllipticPIR/libepir.git
$ cd libepir
$ npm ci

用法

有关Node.js绑定定义,请参阅 ./src_ts/types.ts

有关一般用法,请参阅 ./src_ts/__tests__ 目录下的文件和 ./pages/index.vue

常见问题解答

什么是mG.bin?

为了解密服务器的回复,您需要生成 mG.bin 文件。此文件包含(G, 2*G, .., (0xFFFFFF)*G) 的预计算值,其中 G 是Ed25519曲线的生成器。

要生成mG.bin,请运行

$ epir_genm

$ npm run epir_genm

计算可能需要数十秒才能完成。计算时间取决于您机器的CPU性能。(例如,在我的台式机(Intel Core i7-7700K)上,大约需要 ~15秒。)

生成的文件将位于 $HOME/.EllipticPIR/mG.bin。文件大小约为 ~576MiB。

如果您不需要解密服务器的回复,可以跳过此步骤。

依赖项

~3.5MB
~67K SLoC