|
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 |