verifierutils.cpp
Go to the documentation of this file.
1 
12 #include <cstdlib>
13 #include <iostream>
14 #include <sstream>
15 #include <fstream>
16 
17 
18 #include "verifierutils.hpp"
19 
20 
21 std::string verifierUtils::num2str(unsigned int number)
22 {
23  std::string result;
24  std::ostringstream oss;
25  oss<<std::hex<<number;
26  result = oss.str();
27  for (unsigned int i=result.size(); i<8; i++)
28  result = "0"+result;
29  return result;
30 }
31 
32 
33 std::string verifierUtils::byte2str(uint8_t b)
34 {
35  std::string r;
36  switch ((b/0x10) % 0x10)
37  {
38  case (0x0): { r = '0'; break; }
39  case (0x1): { r = '1'; break; }
40  case (0x2): { r = '2'; break; }
41  case (0x3): { r = '3'; break; }
42  case (0x4): { r = '4'; break; }
43  case (0x5): { r = '5'; break; }
44  case (0x6): { r = '6'; break; }
45  case (0x7): { r = '7'; break; }
46  case (0x8): { r = '8'; break; }
47  case (0x9): { r = '9'; break; }
48  case (0xa): { r = 'a'; break; }
49  case (0xb): { r = 'b'; break; }
50  case (0xc): { r = 'c'; break; }
51  case (0xd): { r = 'd'; break; }
52  case (0xe): { r = 'e'; break; }
53  case (0xf): { r = 'f'; break; }
54  }
55  switch (b%0x10)
56  {
57  case (0x0): { r += '0'; break; }
58  case (0x1): { r += '1'; break; }
59  case (0x2): { r += '2'; break; }
60  case (0x3): { r += '3'; break; }
61  case (0x4): { r += '4'; break; }
62  case (0x5): { r += '5'; break; }
63  case (0x6): { r += '6'; break; }
64  case (0x7): { r += '7'; break; }
65  case (0x8): { r += '8'; break; }
66  case (0x9): { r += '9'; break; }
67  case (0xa): { r += 'a'; break; }
68  case (0xb): { r += 'b'; break; }
69  case (0xc): { r += 'c'; break; }
70  case (0xd): { r += 'd'; break; }
71  case (0xe): { r += 'e'; break; }
72  case (0xf): { r += 'f'; break; }
73  }
74  return r;
75 }
76 
77 
78 uint8_t verifierUtils::doublon2byte(char b1, char b2)
79 {
80  uint8_t r = 0;
81  switch (b2)
82  {
83  case ('0'): { r = 0x0 ; break; }
84  case ('1'): { r = 0x1 ; break; }
85  case ('2'): { r = 0x2 ; break; }
86  case ('3'): { r = 0x3 ; break; }
87  case ('4'): { r = 0x4 ; break; }
88  case ('5'): { r = 0x5 ; break; }
89  case ('6'): { r = 0x6 ; break; }
90  case ('7'): { r = 0x7 ; break; }
91  case ('8'): { r = 0x8 ; break; }
92  case ('9'): { r = 0x9 ; break; }
93  case ('a'): { r = 0xa; break; }
94  case ('A'): { r = 0xa; break; }
95  case ('b'): { r = 0xb; break; }
96  case ('B'): { r = 0xb; break; }
97  case ('c'): { r = 0xc; break; }
98  case ('C'): { r = 0xc; break; }
99  case ('d'): { r = 0xd; break; }
100  case ('D'): { r = 0xd; break; }
101  case ('e'): { r = 0xe; break; }
102  case ('E'): { r = 0xe; break; }
103  case ('f'): { r = 0xf; break; }
104  case ('F'): { r = 0xf; break; }
105  default:
106  {
107  std::cout<<"ERROR: in verifierUtils::doublon2byte(): "
108  "unknown character ("<<b1<<","<<b2<<"). "
109  "Aborting."<<std::endl;
110  exit(1);
111  }
112  } // end switch on b2
113  switch (b1)
114  {
115  case ('0'): { r += 0x00 ; break; }
116  case ('1'): { r += 0x10 ; break; }
117  case ('2'): { r += 0x20 ; break; }
118  case ('3'): { r += 0x30 ; break; }
119  case ('4'): { r += 0x40 ; break; }
120  case ('5'): { r += 0x50 ; break; }
121  case ('6'): { r += 0x60 ; break; }
122  case ('7'): { r += 0x70 ; break; }
123  case ('8'): { r += 0x80 ; break; }
124  case ('9'): { r += 0x90 ; break; }
125  case ('a'): { r += 0xa0 ; break; }
126  case ('A'): { r += 0xa0 ; break; }
127  case ('b'): { r += 0xb0 ; break; }
128  case ('B'): { r += 0xb0 ; break; }
129  case ('c'): { r += 0xc0 ; break; }
130  case ('C'): { r += 0xc0 ; break; }
131  case ('d'): { r += 0xd0 ; break; }
132  case ('D'): { r += 0xd0 ; break; }
133  case ('e'): { r += 0xe0 ; break; }
134  case ('E'): { r += 0xe0 ; break; }
135  case ('f'): { r += 0xf0 ; break; }
136  case ('F'): { r += 0xf0 ; break; }
137  default:
138  {
139  std::cout<<"ERROR: in verifierUtils::doublon2byte(): "
140  "unknown character ("<<b1<<","<<b2<<"). "
141  "Aborting."<<std::endl;
142  exit(1);
143  }
144  } // end switch on b1
145  return r;
146 }
147 
148 
149 uint32_t verifierUtils::octuple2num(std::string s)
150 {
151  if (s.size() != 8)
152  {
153  std::cout<<"ERROR in verifierUtils::octople2num: input"
154  " is not of length 8: "<<s<<std::endl;
155  exit(1);
156  }
157  else
158  {
159  uint32_t l = (doublon2byte(s[0],s[1]) * 0x1000000)
160  + (doublon2byte(s[2],s[3]) * 0x10000)
161  + (doublon2byte(s[4],s[5]) * 0x100)
162  + doublon2byte(s[6],s[7]);
163  return l;
164  }
165 }
166 
168  mpz_class number)
169 {
170  std::vector<uint8_t> bytes;
171  mpz_class prov = number;
172  bytes.resize(((unsigned int)mpz_sizeinbase(prov.get_mpz_t(),16)+1)/2);
173  for (int i = bytes.size()-1; i>=0; i--)
174  {
175  bytes[i] = prov.get_ui() % 0x100;
176  prov = prov / 0x100;
177  }
178  return bytes;
179 }
180 
181 
182 std::vector<uint8_t> verifierUtils::file2bytes(std::string path)
183 {
184  std::ifstream content(path);
185  uint8_t character;
186  std::vector<uint8_t> result;
187  while (content.good())
188  {
189  character = content.get();
190  if (content.good())
191  result.push_back(character);
192  }
193  content.close();
194  return result;
195 }