PBC Library Manual 0.5.11 - Stanford Crypto Group
PBC Library Manual 0.5.11 - Stanford Crypto Group
PBC Library Manual 0.5.11 - Stanford Crypto Group
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Chapter 8. <strong>PBC</strong> internals<br />
The source code is organized by subdirectories:<br />
include: Headers describing the official API. Headers in other places are for internal use only.<br />
arith: Finite fields: modular arithmetic, polynomial rings, and polynomial rings modulo a polynomial.<br />
Finite fields of low characteristic are unsupported.<br />
ecc: Elliptic curve generation, elliptic curve groups and pairings. One source file is dedicated to each<br />
type of pairing, containing specialized optimizations. Some of the code requires arbitrary precision<br />
complex numbers, which also live here but should be moved elsewhere one day.<br />
misc: Dynamic arrays, symbol tables, benchmarking, logging, debugging, other utilities.<br />
gen: Programs that generate pairing parameters and list Hilbert polynomials. These were used to prepare<br />
the samples in the param directory.<br />
example: Example programs showing how to use the library.<br />
guru: Tests, experimental code.<br />
8.1. <strong>Group</strong>s, rings, fields<br />
Algebraic structures are represented in the field_t data type, which mostly contains pointers to<br />
functions written to perform operations such as addition and multiplication in that particular group, ring<br />
or field:<br />
struct field_s {<br />
...<br />
void (*init)(element_ptr);<br />
void (*clear)(element_ptr);<br />
...<br />
void (*add)(element_ptr, element_ptr, element_ptr);<br />
void (*sub)(element_ptr, element_ptr, element_ptr);<br />
void (*mul)(element_ptr, element_ptr, element_ptr);<br />
...<br />
};<br />
typedef struct field_s *field_ptr;<br />
typedef struct field_s field_t[1];<br />
34