We shall use the following notation. For our purposes, the pairing is a bilinear map from two cyclic groups, G1 and G2 to a third group GT, where each group has prime order r.

Run `pbc/pbc`

and type:

g := rnd(G1); g;

The first line generates a random element g of the group G1,
while the second prints out the value of g. (The syntax was
influenced by `bc`

, an arbitrary
precision calculator.) Next, enter:

h := rnd(G2); h;

This assigns h to a random element of the group G2.
Actually, the default pairing `pbc`

uses is symmetric so G1 and G2 are in fact the same group, but
in general they are distinct. To compute the pairing applied to
g and h, type:

pairing(g,h);

The order of both g and h is r. Letâ€™s generate two random numbers between 1 and r:

a := rnd(Zr); b := rnd(Zr);

By bilinearity, the resulting output of both of these lines should be identical:

pairing(g^a,h^b); pairing(g,h)^(a*b);

This program has other features but the commands shown here should be enough to quickly and interactively experiment with many pairing-based cryptosystems using real numbers.