group.hpp
Go to the documentation of this file.
1 
12 #ifndef _GROUP_H_
13 #define _GROUP_H_
14 
15 
16 #include <vector>
17 #include <cstdint>
18 #include <iostream>
19 #include <gmp.h>
20 #include <gmpxx.h>
21 
22 #include "../../verifierutils/verifierutils.hpp"
23 #include "../../cryptotools/cryptotools.hpp"
24 
25 #include "elmt.hpp"
26 #include "arrayofelmts.hpp"
27 
28 
29 namespace arithm {
30 
31 
35 class Group
36 {
37 protected:
41  mpz_class multOrder;
42 
46  mpz_class generator;
47 
48 public:
55  Group(mpz_class order, mpz_class gen);
56 
61 
62 
65 
70  virtual Elmt multiplication(Elmt e1, Elmt e2);
71 
75  virtual Elmt multInverse(Elmt e);
76 
80  virtual Elmt exponentiation(Elmt e, Elmt s);
81 
86  bool compare(Elmt e1, Elmt e2);
87 
88 
90 
93 
99 
105 
111 
117 
123 
129  bool compare(ArrayOfElmts e1, ArrayOfElmts e2);
130 
131 
133 
136 
137 
141  virtual Elmt encode(std::vector<uint8_t> message);
142 
147  virtual std::vector<uint8_t> decode(Elmt e);
148 
150 
153 
158  Elmt getOne();
159 
164  ArrayOfElmts getOne(unsigned int n);
165 
170  Elmt getElmt(mpz_class repr);
171 
177 
183 
192  virtual ArrayOfElmts getRandArray(cryptoTools::PRG * prg, unsigned int nr, unsigned int n0);
193 
195 
198 
202  mpz_class getMultOrder();
203 
208  virtual unsigned int getLeafSize();
209 
214  Elmt getGenerator();
215 
220  ArrayOfElmts getGenerator(unsigned int n);
221 
226  virtual bool isIn(mpz_class repr);
227 
231  virtual std::string getType();
232 
234 };
235 
236 
237 } // closing namespace
238 
239 #endif