PBC库
PBC(Pairing-Based Cryptography Library) 是实现双线性对运算的函数库 . 这个开源代码 C 函数库是由Stanford 大学开发 , 库的地址为 http://crypto.stanford.edu/pbc/
安装过程在前面的文档
ubuntu安装过程:https://blog.csdn.net/TBBetter/article/details/103587977
手册
PBC:https://crypto.stanford.edu/pbc/manual/
GMP:https://gmplib.org/manual/Concept-Index.html#Concept-Index
基础
1. 使用PBC库的程序应包含文件pbc.h:
#include <pbc.h>
2. 执行代码要链接到PBC库和GMP库,例如:
$ gcc program.c -L. -lpbc -lgmp
3. pbc.h 已经包含 gmp.h
4. PBC在几个方面遵循GMP:
4.1 输出参数通常在输入参数之前。
4.2 变量可以被一条命令的输入、输出同时使用
4.3 在使用变量之前,必须将其初始化一次。当不再需要时,必须清除它。为了提高效率,应避免不必要的初始化和清除。
4.4 以_t结尾的PBC变量在函数调用中的行为与GMP变量相同:有效地作为调用引用。换句话说,就像在GMP中一样,如果一个函数修改了输入变量,则当控制返回返回给调用者时,该变量将保持修改状态。
4.5 与GMP一样,变量会在需要时自动分配内存。默认情况下,调用malloc()和friends,但是可以更改。
4.6 PBC功能大部分是可重入的。
5. 由于PBC库基于GMP构建,因此可以使用GMP类型。PBC类型类似于GMP类型。以下示例摘自GMP手册中的示例,并说明了如何声明PBC数据类型element_t。
element_t sum;
struct foo { element_t x, y; };
element_t vec[20];
6. GMP具有用于整数的mpz_t类型,用于有理数的mpq_t等。
相反,PBC将element_t数据类型用于不同代数结构的元素,例如椭圆曲线组,多项式环和有限域。
函数假定其输入来自适当的代数结构。
7. PBC数据类型和功能可以分类如下。(仅前两个足以满足一系列应用)
element_t :代数结构的元素。
pairing_t :配对(包含一系列元素);可以根据param子目录中与PBC捆绑在一起的配对参数进行初始化。
pbc_param_t :用于生成配对参数。
pbc_cm_t :通过CM方法构造曲线的参数;有时是pbc_param_t需要的。
field_t :代数结构:群,环和场;由pairing_t内部使用。
还有一些其他功能,例如控制如何生成随机位的功能。在给定数据类型上运行的函数通常具有相同的前缀,例如那些涉及element_t对象的对象以element_开头。