Table of Contents
There are two important notions in MPFQ: the api_extension
and the FieldFamily
(also called the TAG
).
Their meanings are the following:
In MPFQ, there is a basis API. In some cases, one might
want to define more funtions. We call
api_extension
a package of functions that we can
choose to add to the basis API. For instance,
CHAR2
is an api_extension
containing functions we want for fields of characteristic 2.
MGY
is another api_extension
for
fields in Montgomery representation.
A FieldFamily
, or a TAG
corresponds
to an implementation of a (possibly reduced to one element)
family of fields. Each FieldFamily
have the
feature of the basis API plus the api_extension
s
that were chosen to make his use more convinient. Examples of
FieldFamily
s are 2_128
that is the
field GF(2^{128})
, pm_3
that is for
the family of prime fields for which the modulus fits in 3
words and elements are in Montgomery representation.
Available api_extensions
:
CHAR2
: fields of characteristic 2
MGY
: prime fields in Montgomery representation
POLY
: package that provides univariate polynomials
with coefficients in the field
Available FieldFamily
:
2_x
for x
in [2..255]
.
This gives the finite field GF(2^x)
in
polynomial representation with a hard-coded (sparse) defining
polynomial.
p_x
for x
in [1..9]
.
This family implements any prime field for which
p
fits in x
machine words. The
elements are stored in classical representation.
p_x_5
for x
in [0..8]
.
This family implements any prime field for which
p
fits in x
and a half machine words. The
elements are stored in classical representation.
p_25519
. This implements the field
GF(2^{255}-19)
.
p_127_1
. This implements the field
GF(2^{127}-1)
.
p_127_735
. This implements the field
GF(2^{127}-735)
.
pm_x
for x
in [1..9]
.
This family implements any prime field for which
p
fits in x
machine words. The
elements are stored in Montgomery representation.
pm_x_5
for x
in [0..8]
.
This family implements any prime field for which
p
fits in x
and a half machine words. The
elements are stored in Montgomery representation.
pf_e
where pf
is one of the four TAG
s p_x
, p_x_5
, pm_x
or pm_x_5
. This family implements an extention of the base field implemented through pf
. The elements are stored as polynomial with coefficent in the base field.
The FieldFamily
s 2_x
implement the api_extension
CHAR2
, pm_x
and pm_x_5
implement MGY
, and all FieldFamily
above implement the api_extension
POLY
.
To each FieldFamily
will correspond a C-type for fields and elements, and a set of functions following the basis API and eventually the api_extension
s this family requires. All of them are gathered into a .c
and a .h
files
named:
mpfq_FieldFamily.c mpfq_FieldFamily.h
Most of the code will actually be inside the .h
file, so that the functions get inlined during compilation.