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]);