Hypercomplex
Abstract & fast header-only C++ template library for lattice-based cryptosystems in high-dimensional algebras
Loading...
Searching...
No Matches
Classes | Macros | Functions
Hypercomplex.hpp File Reference
#include <cassert>
#include <cmath>
#include <iostream>
#include <stdexcept>
#include "./Polynomial.hpp"

Go to the source code of this file.

Classes

class  Hypercomplex< T, dim >
 
class  Hypercomplex< Polynomial< MaxDeg >, dim >
 

Macros

#define USEMPFR   0
 Compile-time flag to include MPFR class specialisation (default: false).
 

Functions

template<typename T , const uint64_t dim>
bool operator== (const Hypercomplex< T, dim > &H1, const Hypercomplex< T, dim > &H2)
 Equality operator. More...
 
template<typename T , const uint64_t dim>
bool operator!= (const Hypercomplex< T, dim > &H1, const Hypercomplex< T, dim > &H2)
 Inequality operator. More...
 
template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator+ (const Hypercomplex< T, dim > &H1, const Hypercomplex< T, dim > &H2)
 Addition operator. More...
 
template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator- (const Hypercomplex< T, dim > &H1, const Hypercomplex< T, dim > &H2)
 Subtraction operator. More...
 
template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator* (const Hypercomplex< T, dim > &H1, const Hypercomplex< T, dim > &H2)
 Multiplication operator. More...
 
template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator^ (const Hypercomplex< T, dim > &H, const uint64_t x)
 Power operator. More...
 
template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator/ (const Hypercomplex< T, dim > &H1, const Hypercomplex< T, dim > &H2)
 Division operator. More...
 
template<typename T , const uint64_t dim>
std::ostream & operator<< (std::ostream &os, const Hypercomplex< T, dim > &H)
 Print operator. More...
 
template<typename T , const uint64_t dim>
Hypercomplex< T, dim > Re (const Hypercomplex< T, dim > &H)
 Real part of a hypercomplex number. More...
 
template<typename T , const uint64_t dim>
Hypercomplex< T, dim > Im (const Hypercomplex< T, dim > &H)
 Imaginary part of a hypercomplex number. More...
 
template<typename T , const uint64_t dim>
Hypercomplex< T, dim > exp (const Hypercomplex< T, dim > &H)
 Exponentiation operation on a hypercomplex number. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
bool operator== (const Hypercomplex< Polynomial< MaxDeg >, dim > &H1, const Hypercomplex< Polynomial< MaxDeg >, dim > &H2)
 Equality operator. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
bool operator!= (const Hypercomplex< Polynomial< MaxDeg >, dim > &H1, const Hypercomplex< Polynomial< MaxDeg >, dim > &H2)
 Inequality operator. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator+ (const Hypercomplex< Polynomial< MaxDeg >, dim > &H1, const Hypercomplex< Polynomial< MaxDeg >, dim > &H2)
 Addition operator. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator- (const Hypercomplex< Polynomial< MaxDeg >, dim > &H1, const Hypercomplex< Polynomial< MaxDeg >, dim > &H2)
 Subtraction operator. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
std::ostream & operator<< (std::ostream &os, const Hypercomplex< Polynomial< MaxDeg >, dim > &H)
 Print operator. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator* (const int64_t &x, const Hypercomplex< Polynomial< MaxDeg >, dim > &H)
 Scalar-Multiplication operator. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator% (const Hypercomplex< Polynomial< MaxDeg >, dim > &H, const int64_t &mod)
 Modular reduction operator. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator* (const Hypercomplex< Polynomial< MaxDeg >, dim > &H1, const Hypercomplex< Polynomial< MaxDeg >, dim > &H2)
 Multiplication operator. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator^ (const Hypercomplex< Polynomial< MaxDeg >, dim > &H, const uint64_t x)
 Power operator. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > Re (const Hypercomplex< Polynomial< MaxDeg >, dim > &H)
 Real part of a hypercomplex number. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > Im (const Hypercomplex< Polynomial< MaxDeg >, dim > &H)
 Imaginary part of a hypercomplex number. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
void CenteredLift (Hypercomplex< Polynomial< MaxDeg >, dim > *H, const int64_t &mod)
 Center-lift hypercomplex elements in a modular quotient ring. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > RingInverse (const Hypercomplex< Polynomial< MaxDeg >, dim > &H, const int64_t &mod)
 Hypercomplex inverse in a modular quotient ring. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > PUBLICKEY (const Hypercomplex< Polynomial< MaxDeg >, dim > &F, const Hypercomplex< Polynomial< MaxDeg >, dim > &G, const int64_t &q)
 Generate public key of the cryptosystem. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > ENCRYPT (const Hypercomplex< Polynomial< MaxDeg >, dim > &H, const Hypercomplex< Polynomial< MaxDeg >, dim > &M, const Hypercomplex< Polynomial< MaxDeg >, dim > &PHI, const int64_t &p, const int64_t &q)
 Encrypt a message via the cryptosystem. More...
 
template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > DECRYPT (const Hypercomplex< Polynomial< MaxDeg >, dim > &F, const Hypercomplex< Polynomial< MaxDeg >, dim > &E, const int64_t &p, const int64_t &q)
 Decrypt a message via the cryptosystem. More...
 

Function Documentation

◆ CenteredLift()

template<const uint64_t MaxDeg, const uint64_t dim>
void CenteredLift ( Hypercomplex< Polynomial< MaxDeg >, dim > *  H,
const int64_t &  mod 
)

Center-lift hypercomplex elements in a modular quotient ring.

Parameters
[in]Hexisting class instance (pointer)
[in]modpositive integer

◆ DECRYPT()

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > DECRYPT ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  F,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  E,
const int64_t &  p,
const int64_t &  q 
)

Decrypt a message via the cryptosystem.

Parameters
[in]Fexisting class instance
[in]Eexisting class instance
[in]ppositive integer
[in]qpositive integer
Returns
new class instance

◆ ENCRYPT()

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > ENCRYPT ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  M,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  PHI,
const int64_t &  p,
const int64_t &  q 
)

Encrypt a message via the cryptosystem.

Parameters
[in]Hexisting class instance
[in]Mexisting class instance
[in]PHIexisting class instance
[in]ppositive integer
[in]qpositive integer
Returns
new class instance

◆ exp()

template<typename T , const uint64_t dim>
Hypercomplex< T, dim > exp ( const Hypercomplex< T, dim > &  H)

Exponentiation operation on a hypercomplex number.

Parameters
[in]Hexisting class instance
Returns
new class instance

◆ Im() [1/2]

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > Im ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H)

Imaginary part of a hypercomplex number.

Parameters
[in]Hexisting class instance
Returns
new class instance

◆ Im() [2/2]

template<typename T , const uint64_t dim>
Hypercomplex< T, dim > Im ( const Hypercomplex< T, dim > &  H)

Imaginary part of a hypercomplex number.

Parameters
[in]Hexisting class instance
Returns
new class instance

◆ operator!=() [1/2]

template<const uint64_t MaxDeg, const uint64_t dim>
bool operator!= ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H1,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  H2 
)

Inequality operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
boolean value after the comparison

◆ operator!=() [2/2]

template<typename T , const uint64_t dim>
bool operator!= ( const Hypercomplex< T, dim > &  H1,
const Hypercomplex< T, dim > &  H2 
)

Inequality operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
boolean value after the comparison

◆ operator%()

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator% ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H,
const int64_t &  mod 
)

Modular reduction operator.

Parameters
[in]Hexisting class instance
[in]modpositive integer
Returns
new class instance

◆ operator*() [1/3]

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator* ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H1,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  H2 
)

Multiplication operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
new class instance

◆ operator*() [2/3]

template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator* ( const Hypercomplex< T, dim > &  H1,
const Hypercomplex< T, dim > &  H2 
)

Multiplication operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
new class instance

◆ operator*() [3/3]

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator* ( const int64_t &  x,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  H 
)

Scalar-Multiplication operator.

Parameters
[in]xscalar integer
[in]Hexisting class instance
Returns
new class instance

◆ operator+() [1/2]

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator+ ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H1,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  H2 
)

Addition operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
new class instance

◆ operator+() [2/2]

template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator+ ( const Hypercomplex< T, dim > &  H1,
const Hypercomplex< T, dim > &  H2 
)

Addition operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
new class instance

◆ operator-() [1/2]

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator- ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H1,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  H2 
)

Subtraction operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
new class instance

◆ operator-() [2/2]

template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator- ( const Hypercomplex< T, dim > &  H1,
const Hypercomplex< T, dim > &  H2 
)

Subtraction operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
new class instance

◆ operator/()

template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator/ ( const Hypercomplex< T, dim > &  H1,
const Hypercomplex< T, dim > &  H2 
)

Division operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
new class instance

◆ operator<<() [1/2]

template<const uint64_t MaxDeg, const uint64_t dim>
std::ostream & operator<< ( std::ostream &  os,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  H 
)

Print operator.

Parameters
[in,out]osoutput stream
[in]Hexisting class instance
Returns
output stream

◆ operator<<() [2/2]

template<typename T , const uint64_t dim>
std::ostream & operator<< ( std::ostream &  os,
const Hypercomplex< T, dim > &  H 
)

Print operator.

Parameters
[in,out]osoutput stream
[in]Hexisting class instance
Returns
output stream

◆ operator==() [1/2]

template<const uint64_t MaxDeg, const uint64_t dim>
bool operator== ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H1,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  H2 
)

Equality operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
boolean value after the comparison

◆ operator==() [2/2]

template<typename T , const uint64_t dim>
bool operator== ( const Hypercomplex< T, dim > &  H1,
const Hypercomplex< T, dim > &  H2 
)

Equality operator.

Parameters
[in]H1LHS operand
[in]H2RHS operand
Returns
boolean value after the comparison

◆ operator^() [1/2]

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > operator^ ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H,
const uint64_t  x 
)

Power operator.

Parameters
[in]HLHS operand
[in]xRHS operand
Returns
new class instance

◆ operator^() [2/2]

template<typename T , const uint64_t dim>
Hypercomplex< T, dim > operator^ ( const Hypercomplex< T, dim > &  H,
const uint64_t  x 
)

Power operator.

Parameters
[in]HLHS operand
[in]xRHS operand
Returns
new class instance

◆ PUBLICKEY()

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > PUBLICKEY ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  F,
const Hypercomplex< Polynomial< MaxDeg >, dim > &  G,
const int64_t &  q 
)

Generate public key of the cryptosystem.

Parameters
[in]Fexisting class instance
[in]Gexisting class instance
[in]qpositive integer
Returns
new class instance

◆ Re() [1/2]

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > Re ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H)

Real part of a hypercomplex number.

Parameters
[in]Hexisting class instance
Returns
new class instance

◆ Re() [2/2]

template<typename T , const uint64_t dim>
Hypercomplex< T, dim > Re ( const Hypercomplex< T, dim > &  H)

Real part of a hypercomplex number.

Parameters
[in]Hexisting class instance
Returns
new class instance

◆ RingInverse()

template<const uint64_t MaxDeg, const uint64_t dim>
Hypercomplex< Polynomial< MaxDeg >, dim > RingInverse ( const Hypercomplex< Polynomial< MaxDeg >, dim > &  H,
const int64_t &  mod 
)

Hypercomplex inverse in a modular quotient ring.

Parameters
[in]Hexisting class instance
[in]modpositive integer
Returns
new class instance