lol-0.5.0.1: A library for lattice cryptography.

Safe HaskellNone
LanguageHaskell2010

Crypto.Lol

Description

\( \def\Z{\mathbb{Z}} \) \( \def\C{\mathbb{C}} \) \( \def\Q{\mathbb{Q}} \) \( \def\R{\mathbb{R}} \) \( \def\F{\mathbb{F}} \) \( \def\O{\mathcal{O}} \)

This module re-exports primary interfaces, and should be the only import needed for most cryptographic application implmenetations. To instantiate an application with concrete types, you will also need to import Crypto.Lol.Types.

Below is a brief mathematical background which serves as reference material for reading the documentation.

  • \( \Z \) denotes the ring of integers, \( \Q \) is the rational numbers, \( \R \) denotes the real numbers, and \( \C \) represents the complex numbers.
  • \( \Z_q = \Z/(q\Z) \) is the integers mod \( q \). \( \Z_q \) is implemented in Crypto.Lol.Types.ZqBasic.
  • The finite field of order \( p \) is denoted \( \F_{p} \), and is implemented in Crypto.Lol.Types.FiniteField.
  • \( \zeta_m \in R \) is an arbitrary element of order \( m \) in a ring \( R \).
  • Throughout, \( m \) denotes a cyclotomic index. In code, the cyclotomic index is represented by the type parameter m :: Factored.
  • The ring \( R=\O_m=\Z[\zeta_m] \) is the \( m \)th cyclotomic ring. We denote the quotient ring \( \Z_q[\zeta_m]) \) by \( R_q \). We refer to \( \Z \) or \( \Z_q \) as the base ring. Cyclotomic rings are encapsulated by Crypto.Lol.Cyclotomic.Cyc.
  • \( n=\varphi(m) \) is the totient function of the cyclotomic index. This is the dimension of a cyclotomic ring over the base ring.