PBC下载、安装及基本使用
下载 安装
- 在下PBC之前需要GMP库
- 在官网找到相应的包进行安装
我采用源码安装,将下载的
pbc-0.5.14.tar.gz
解压,并进入解压后的目录#对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,根据提示先将依赖包安装好 ./configure #对源码进行编译 make #将编译好的程序安装到相应目录,默认的目录是/usr/local/lib sudo make install
为了速度和简单,在开发环境下,可以使用simple.make。但它的可移植性较弱
#PBC使用一些GUN C扩展作为内嵌的函数 make -f simple.make
基本的使用
程序使用这个PBC库应该包含头文件pbc.h
#include <pbc/pbc.h>
在链接时,加上PBC和GMP库
gcc program.c -lpbc -lgmp -L.
PBC在以下几个方面遵循GMP
- 输出参数总是先于输入参数
- 在调用函数时,相同的变量可以同时用作输入和输出
- 在使用一个变量之前,必须有且仅有一次初始化。不再使用它的时候,必须清除掉。为了效率,不必要的初始化和清除应该尽量避免
- 在函数的调用中,PBC中以_t结尾的变量会和GMP有相同的行为,即引用传递。换句话说,在GMP里,如果一个函数修改了一个输入变量,即使函数返回到被调用的作用域,该变量依然会保留修改的值
- 像GPM,变量在需要的时候能自动的分配内存。默认情况下,malloc()和与它相似的函数被调用,但是这是可以改变的
- PBC函数大部分是可重入函数
因为PBC库是建立在GMP库上的,所以GMP类型依然是可用的。PBC的类型与GMP的类型基本相似。下面的是来自GMP手册的一个示例,同时也展现怎样声明PBC数据类型element_t
element_t sum; struct foo{ element_t x, y; }; element_t vec[20];
GMP对于整数有
mpz_t
类型,对于有理数有mpq_t
类型等。不同的是,PBC使用element_t
数据类型作为不同代数结构的元素,比如椭圆曲线的群,多项式的环和有限域。函数假定它们的输入来自恰当的代数结构- PBC的数据类型和函数被分为以下几类,仅前两个就足以满足一系列的应用
element_t
代数结构的元素paring_t
生成元所属的双线性对;可以通过在param子目录中与PBC捆绑的双线性对参数样本进行初始化pbc_param_t
用于生成双线性对参数pbc_cm_t
通过CM方法构造曲线的参数;有时需要pbc_param_tfield_t
群、环、域的代数结构,其内部使用pairing_t
- 一些其他函数,比如说控制随机比特串的生成
- 在一个给定数据类型上执行的函数,通常有相同的函数,例如设计
element_t
类型的函数前缀为element_