The function pairing_apply can be called to apply a bilinear map. The order of the inputs is important. The first, which holds the output, must be from the group GT. The second must be from G1, the third from G2, and the fourth must be the pairing_t variable that relates them. (One cannot mix and match G1, G2, and GT groups from different pairings.)
In some applications, the programmer may know that many pairings with the same G1 input will be computed. In this case, preprocessing should be used to avoid repeating many calculations saving time in the long run. A variable of type pairing_pp_t should be declared, initialized with the fixed G1 element, and then used to compute pairings:
pairing_pp_t pp; pairing_pp_init(pp, x, pairing); //x is some element of 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); //don't need pp anymore
void pairing_pp_init(pairing_pp_t p,element_t in1,pairing_t pairing)-
Get ready to perform a pairing whose first input is
in1, and store the results of time-saving precomputation inp. void pairing_pp_clear(pairing_pp_t p)-
Clear
p. This should be called afterpis no longer needed. void pairing_pp_apply(element_t out,element_t in2,pairing_pp_t p)-
Compute a pairing using
in2and the preprocessed information stored inpand store the output inout. The inputs to the pairing are the element previously used to initializepand the elementin2. void pairing_apply(element_t out,element_t in1,element_t in2,pairing_t pairing)-
Apply the bilinear map described by
pairing. The elementoutwill be set to the map applied toin1andin2, that isout= e(in1,in2).in1must be in the group G1,in2must be in the group G2, andoutmust be in the group GT.