Chapter 7. Bundled programs

Table of Contents

Pairing-based calculator
Parameter generation
Example cryptosystems
Benchmarks

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

Pairing-based calculator

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(g)

Maps an element g to element of the field G, e.g:

Zr(123);
GT([456, 789]);