Core Math Documentation

Math Backends

OpenFHE supports a number of mathematical backends for various usecases. For more information refer to Math Backends

Inheritance Diagram

Let Gen. = Generator

flowchart BT A[Distribution Generator] --> |Inherited by|B[Ternary Uniform Gen.]; A[Distribution Generator] --> |Inherited by|C[Discrete Uniform Gen.]; A[Distribution Generator] --> |Inherited by|D[Binary Uniform Gen.]; A[Distribution Generator] --> |Inherited by|E[Discrete Gaussian Gen.]; A[Distribution Generator] --> |Inherited by|F[Discrete Gaussian Generic Gen.];

File Listings

Binary Uniform Generator (binaryuniformgenerator.h)

  • Generate Uniform distribution of binary values (mod 2)

  • Relies on built-in C++ generator for 32-bit unsigned integers defined in <random>

DFT Transform (dftransform.h)

  • Discrete Fourier Transform (FFT) code

Discrete Gaussian Generator (discretegaussiangenerator.h)

  • Generate Gaussian distribution of discrete values.

  • Relies on built-in C++ generator for 32-bit unsigned integers defined in <random>

Discrete Gaussian Generator Generic (discretegaussiangeneratorgeneric.h)

  • Implements the generic sampler by UCSD discussed in Gaussian Sampling over the Integers: Efficient, Generic, Constant-Time

  • based heavily on Michael Walter’s original code.

  • 2 different “Base Samplers”

    • Peikert’s inversion method

    • Knuth-Yao

  • Generic Sampler works independent from standard deviation of the distribution

    • combines an array of aforementioned base samplers centered around 0 to \frac{2^{b} - 1}{2^b} through convolution

Discrete Uniform Generator (discreteuniformgenerator.h)

  • Generate Uniform distribution of discrete values.

  • Relies on built-in C++ generator for 32-bit unsigned integers defined in <random>

Distr Gen (distrgen.h)

  • Basic noise generation functionality

Distribution Generator (distributiongenerator.h)

  • Base class for distribution generators

Hardware Abstraction Layer (HAL) (hal.h)

  • Code to switch between math backends

Matrix (matrix.h)

  • Templated matrix implementation for SIMD-compatible matrix code

Matrix Strassen (matrixstrassen.h)

  • Matrix Strassen Operations

Number Theory Functions (nbtheory.h)

  • Number theory utilities

  • Check if two numbers are coprime

  • GCD of two numbers

  • Primality testing

  • witness function to test if a number is prime

  • Eulers Totient function phin(n)

  • Generator Algorithm

Ternary Uniform Generator (ternaryuniformgenerator.h)

  • Provides generation of uniform distribution of binary values