Several binaries and curve parameters are bundled with the PBC library,
such as the pbc program.
The param subdirectory contains pairing parameters one might use in
a real cryptosystem. Many of the test programs read the parameters
from files such as these on standard input, for example:
$ benchmark/benchmark < param/c159.param $ example/bls < param/e.param
The pbc subdirectory contains the pairing-based calculator, pbc,
which is loosely based on bc, a well-known arbitrary precision
calculator.
See pairing_test.pbc for an example script. Some differences: the assignment
operator is :=, and newlines are ordinary whitespace and not statement
terminators.
If started with the -y option, the syntax is compatible with bc: newlines
are treated as statement terminators and = is assignment. Additionally,
pbc displays a prompt. This mode may be easier for beginners.
Initially, the variables G1, G2, GT and Zr are represent groups associated with a particular A pairing.
An element is represented with a tree of integers, such as [[1,2], 3], or
4.
Assignments such as variable := expression; return the value of the variable.
The arithmetic operators +, -, /, *, ^ have the standard precedence.
The C comparison operators and ternary operator are available.
Each statement should be terminated by a semicolon.
Comments are the same as in (original) C, or begin with "#" and end at a newline.
Some of the pbc functions:
init_pairing_A()
Set the variables G1, G2, GT and Zr to the groups in a particular A pairing:
init_pairing_A();
Other sample pairings can be used by replacing A with one of D, E, F, G.
rnd(G)
Returns a random element of an algebraic structure G, e.g:
g := rnd(Zr);
Synonym: random.
pairing(g, h)
Returns the pairing applied to g and h. The element g must be an element of G1 and h of G2, e.g:
pairing(rnd(G1), rnd(G2));
(g)
Maps an element g to element of the field G, e.g:
Zr(123); GT([456, 789]);