PBC Library Manual(PBC库手册)翻译(三)

目录

3.Pairing 函数

3.1.初始化pairing

3.2.应用pairing

3.3.其它pairing函数


3.Pairing 函数

使用之前首先要初始化pairing对象,初始化时PBC会设置曲线、群和其它数学杂项。初始化结束之后可以初始化元素并对其进行密码操作。

PBC库的param子目录中包含了各种pairing的参数,其中一些适合于密码使用。在gen子目录中的一些程序可以用于生成参数(详细参见第七章),或者到PBC网站了解更多pairing参数。

Pairing设计三个素数阶群,PBC库中称为G1、G2、GT,用r表示阶数。Pairing是双线性映射(bilinear map),分别从G1、G2中各取一个元素作为输入,输出一个GT中的元素。

G2中的元素至少和G1中的一样长,G1必须为两者中较短的一个(不确定是群元素一样长还是个数一样多)有时G1和G2是相同的群(即pairing是对称的),因此他们的元素可以自由的混合。在这种情况下pairing_is_symmetric函数返回1。

双线性对(bilinear pairing)被存储在pairing_t数据类型中,用于处理双向性对的函数以pairing_为前缀。

3.1.初始化pairing

使用ASCIIZ字符串初始化pairing:

pairing_t pairing;
pairing_init_set_str(pairing, s); //s是一个 char *

这里的字符串s以文本格式保存pairing parameters(pairing参数),param子目录中包含了几个示例。

与上面的二选一(两种初始化方法,第二种直接读取写好的参数):

pairing_t pairing;
pairing_init_pbc_param(pairing, param);

其中的param参数是一个初始化了的pbc_param_t(见第五章)。

函数原型:

int pairing_init_set_str(pairing_t pairing, const char *s)

使用一个ASCIIZ字符串str初始化pairing,成功返回0,失败返回1。

int pairing_init_set_buf(pairing_t pairing, const cahr *s, size_t len)

功能类似,但是最多读取len个字节(byte)。如果len为0,则与前面的函数相同。成功返回0,失败返回1。

void pairing_init_pbc_param(struct pairing_s *pairing, pbc_param_t p)

通过pairing参数p初始化pairing。

void pairing_clear(pairing_t pairing)

释放pairing所占用的空间。当不在需要pairing_t变量时调用,只有释放了与pairing相关的所有元素后才可以调用这个函数,因为他们需要pairing结构中的信息。

3.2.应用pairing

可以调用pairing_apply函数应用(apply)双向性对映射。参数的输入顺序十分重要。第一个用于保存输出,必须来自GT群。第二个必须来自G1群,第三个来自G2群,第四个必须是一个关联它们的pairing_t变量

在某些应用中,程序员可能知道,许多具有相同G1输入的pairing将会被计算。如果是这样,应该使用预处理来避免重复计算,以节省时间。一个pairing_pp_t的变量应该被声明,使用固定的G1元素初始化,然后用于计算pairing:

pairing_pp_t pp;
pairing_pp_t_init(pp, x, pairing);// x是G1中的某个元素
pairing_pp_apply(r1, y1, pp);// r1 = e(x, y1)
pairing_pp_apply(r2, y2, pp);// r2 = e(x, y2)
pairing_pp_clear(pp);// 不再需要pp

不要混合搭配不同pairirng中的G1、G2、GT。

函数原型:

void pairing_pp_init(pairing_pp_t p, element_t in1, pairing_t pairing)

准备执行第一个输入为in1的pairing,并将预计算(节省时间)结果存储在p中。

void pairing_pp_clear(pairing_pp_t p)

不再需要p之后调用函数以释放p。

void pairing_pp_apply(element_t out, element_t in2, pairing_pp_t p)

使用in2和存储在p中的预处理信息计算pairing,并将输出值存储在out。pairing的输入是先前用来初始化p的元素和元素in2

void element_pairing(element_t out, element_t in1, element_t in2)

计算pairing:out = e(in1, in2),其中in1、in2和out必须来自群G1、G2、GT。

void element_prod_pairing(element_t out, element_t in1[], element_t in2[], int n)

计算pairing的乘积,out = e(in1[0], in2[0] ... e(in1[n-1], in2[n-2])) 。数组in1、in2必须至少含有n个元素且分别属于群G1、G2,out必须属于群GT。

3.3.其它pairing函数

int pairing_is_symmetric(pairing_t pairing);
// 如果G1和G2是相同的群则返回true

int pairing_length_in_bytes_G1(pairing_t pairing);
// 返回表示G1中元素所需的长度(以字节为单位)

int pairing_length_in_bytes_x_on_G1(pairing_t pairing);
// 返回表示G1中元素的x座标所需的长度(以字节为单位)

int pairing_length_in_bytes_compressed_G1(pairing_t pairing)
// 返回表示G1中元素的压缩形式所需的字节长度。解压过程可能会有一些开销。

int pairing_length_in_bytes_G2(pairing_t pairing);
// 返回表示G2中元素所需的长度(以字节为单位)

int pairing_length_in_bytes_compressed_G2(pairing_t pairing)
// 返回表示G2中元素的压缩形式所需的字节长度。解压过程可能会有一些开销。

int pairing_length_in_bytes_x_on_G2(pairing_t pairing);
// 返回表示G2中元素的x座标所需的长度(以字节为单位)

int pairing_length_in_bytes_GT(pairing_t pairing);
// 返回表示GT中元素所需的长度(以字节为单位)

int pairing_length_in_bytes_Zr(pairing_t pairing);
// 返回表示Zr中元素所需的长度(以字节为单位)

注:删除线部分是翻译不通顺或者可能有错误的地方。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章