1个不稳定版本
0.0.1 | 2021年6月11日 |
---|
#12 在 #reply
35KB
1K SLoC
libepir - 椭圆PIR客户端库
椭圆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