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中元素所需的長度(以字節爲單位)

注:刪除線部分是翻譯不通順或者可能有錯誤的地方。 

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