Hypercomplex
Abstract & fast header-only C++ template library for lattice-based cryptosystems in high-dimensional algebras
|
#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... | |
void CenteredLift | ( | Hypercomplex< Polynomial< MaxDeg >, dim > * | H, |
const int64_t & | mod | ||
) |
Center-lift hypercomplex elements in a modular quotient ring.
[in] | H | existing class instance (pointer) |
[in] | mod | positive integer |
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.
[in] | F | existing class instance |
[in] | E | existing class instance |
[in] | p | positive integer |
[in] | q | positive integer |
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.
[in] | H | existing class instance |
[in] | M | existing class instance |
[in] | PHI | existing class instance |
[in] | p | positive integer |
[in] | q | positive integer |
Hypercomplex< T, dim > exp | ( | const Hypercomplex< T, dim > & | H | ) |
Exponentiation operation on a hypercomplex number.
[in] | H | existing class instance |
Hypercomplex< Polynomial< MaxDeg >, dim > Im | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H | ) |
Imaginary part of a hypercomplex number.
[in] | H | existing class instance |
Hypercomplex< T, dim > Im | ( | const Hypercomplex< T, dim > & | H | ) |
Imaginary part of a hypercomplex number.
[in] | H | existing class instance |
bool operator!= | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H1, |
const Hypercomplex< Polynomial< MaxDeg >, dim > & | H2 | ||
) |
Inequality operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
bool operator!= | ( | const Hypercomplex< T, dim > & | H1, |
const Hypercomplex< T, dim > & | H2 | ||
) |
Inequality operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
Hypercomplex< Polynomial< MaxDeg >, dim > operator% | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H, |
const int64_t & | mod | ||
) |
Modular reduction operator.
[in] | H | existing class instance |
[in] | mod | positive integer |
Hypercomplex< Polynomial< MaxDeg >, dim > operator* | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H1, |
const Hypercomplex< Polynomial< MaxDeg >, dim > & | H2 | ||
) |
Multiplication operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
Hypercomplex< T, dim > operator* | ( | const Hypercomplex< T, dim > & | H1, |
const Hypercomplex< T, dim > & | H2 | ||
) |
Multiplication operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
Hypercomplex< Polynomial< MaxDeg >, dim > operator* | ( | const int64_t & | x, |
const Hypercomplex< Polynomial< MaxDeg >, dim > & | H | ||
) |
Scalar-Multiplication operator.
[in] | x | scalar integer |
[in] | H | existing class instance |
Hypercomplex< Polynomial< MaxDeg >, dim > operator+ | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H1, |
const Hypercomplex< Polynomial< MaxDeg >, dim > & | H2 | ||
) |
Addition operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
Hypercomplex< T, dim > operator+ | ( | const Hypercomplex< T, dim > & | H1, |
const Hypercomplex< T, dim > & | H2 | ||
) |
Addition operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
Hypercomplex< Polynomial< MaxDeg >, dim > operator- | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H1, |
const Hypercomplex< Polynomial< MaxDeg >, dim > & | H2 | ||
) |
Subtraction operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
Hypercomplex< T, dim > operator- | ( | const Hypercomplex< T, dim > & | H1, |
const Hypercomplex< T, dim > & | H2 | ||
) |
Subtraction operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
Hypercomplex< T, dim > operator/ | ( | const Hypercomplex< T, dim > & | H1, |
const Hypercomplex< T, dim > & | H2 | ||
) |
Division operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
std::ostream & operator<< | ( | std::ostream & | os, |
const Hypercomplex< Polynomial< MaxDeg >, dim > & | H | ||
) |
Print operator.
[in,out] | os | output stream |
[in] | H | existing class instance |
std::ostream & operator<< | ( | std::ostream & | os, |
const Hypercomplex< T, dim > & | H | ||
) |
Print operator.
[in,out] | os | output stream |
[in] | H | existing class instance |
bool operator== | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H1, |
const Hypercomplex< Polynomial< MaxDeg >, dim > & | H2 | ||
) |
Equality operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
bool operator== | ( | const Hypercomplex< T, dim > & | H1, |
const Hypercomplex< T, dim > & | H2 | ||
) |
Equality operator.
[in] | H1 | LHS operand |
[in] | H2 | RHS operand |
Hypercomplex< Polynomial< MaxDeg >, dim > operator^ | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H, |
const uint64_t | x | ||
) |
Power operator.
[in] | H | LHS operand |
[in] | x | RHS operand |
Hypercomplex< T, dim > operator^ | ( | const Hypercomplex< T, dim > & | H, |
const uint64_t | x | ||
) |
Power operator.
[in] | H | LHS operand |
[in] | x | RHS operand |
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.
[in] | F | existing class instance |
[in] | G | existing class instance |
[in] | q | positive integer |
Hypercomplex< Polynomial< MaxDeg >, dim > Re | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H | ) |
Real part of a hypercomplex number.
[in] | H | existing class instance |
Hypercomplex< T, dim > Re | ( | const Hypercomplex< T, dim > & | H | ) |
Real part of a hypercomplex number.
[in] | H | existing class instance |
Hypercomplex< Polynomial< MaxDeg >, dim > RingInverse | ( | const Hypercomplex< Polynomial< MaxDeg >, dim > & | H, |
const int64_t & | mod | ||
) |
Hypercomplex inverse in a modular quotient ring.
[in] | H | existing class instance |
[in] | mod | positive integer |