## Section: Software

### Finite fields

Participants : Pierrick Gaudry, Emmanuel Thomé [ contact ] .

`mp` is (yet another) library for computing in finite fields. The purpose
of `mp` is not to provide a software layer for accessing finite fields
determined at runtime within a computer algebra system like Magma, but
rather to give a very efficient, optimized code for computing in finite
fields precisely known at *compile time* . `mp` is not restricted to a
finite field in particular, and can adapt to finite fields of any
characteristic and any extension degree. However, one of the targets being
the use in cryptology, `mp` somehow focuses on prime fields and
on fields of characteristic two.

`mp` 's ability to generate specialized code for desired finite fields
differentiates this library from its competitors. The performance
achieved is far superior. For example, `mp` can be readily used
to assess the throughput of an efficient software
implementation of a given cryptosystem. Such an evaluation is the
purpose of the “EBats” benchmarking
tool(http://www.ecrypt.eu.org/ebats/ ).
`mp` entered this trend in 2007, establishing reference marks for fast
elliptic curve cryptography: the authors improved over the
fastest examples of key-sharing software in genus 1 and 2, both over
binary fields and prime fields. These timings are now comparison
references for other implementations [29] .

The library's purpose being the *generation* of code rather than its
execution, the working core of `mp` consists of roughly 18,000 lines
of Perl code, which generate most of the `C` code. Some part of
`mp` is distributed at http://mpfq.gforge.inria.fr/ .

In 2009, some experimental code for polynomials over prime fields has
been added to `mp` . Although not yet distributed it has been used for
the record in genus 2 point counting (see below).