Main author: Laurent Bercot Contributors: Eric Le Bihan Thanks to: Dan J. Bernstein Jorge Almeida Olivier Brunel