/src/cryptofuzz/modules/botan/bn_ops.h
Line | Count | Source |
1 | | #include <cryptofuzz/components.h> |
2 | | #include <cryptofuzz/operations.h> |
3 | | #include <botan/bigint.h> |
4 | | |
5 | | #include "bn_helper.h" |
6 | | |
7 | | namespace cryptofuzz { |
8 | | namespace module { |
9 | | namespace Botan_bignum { |
10 | | |
11 | | class Operation { |
12 | | public: |
13 | | virtual bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const = 0; |
14 | 6.18k | virtual ~Operation() { } |
15 | | }; |
16 | | |
17 | | class Add : public Operation { |
18 | | public: |
19 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
20 | | }; |
21 | | |
22 | | class Sub : public Operation { |
23 | | public: |
24 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
25 | | }; |
26 | | |
27 | | class Mul : public Operation { |
28 | | public: |
29 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
30 | | }; |
31 | | |
32 | | class Div : public Operation { |
33 | | public: |
34 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
35 | | }; |
36 | | |
37 | | class Mod : public Operation { |
38 | | public: |
39 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
40 | | }; |
41 | | |
42 | | class Exp : public Operation { |
43 | | public: |
44 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
45 | | }; |
46 | | |
47 | | class ExpMod : public Operation { |
48 | | public: |
49 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
50 | | }; |
51 | | |
52 | | class Sqr : public Operation { |
53 | | public: |
54 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
55 | | }; |
56 | | |
57 | | class GCD : public Operation { |
58 | | public: |
59 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
60 | | }; |
61 | | |
62 | | class SqrMod : public Operation { |
63 | | public: |
64 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
65 | | }; |
66 | | |
67 | | class InvMod : public Operation { |
68 | | public: |
69 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
70 | | }; |
71 | | |
72 | | class Cmp : public Operation { |
73 | | public: |
74 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
75 | | }; |
76 | | |
77 | | class LCM : public Operation { |
78 | | public: |
79 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
80 | | }; |
81 | | |
82 | | class Abs : public Operation { |
83 | | public: |
84 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
85 | | }; |
86 | | |
87 | | class Jacobi : public Operation { |
88 | | public: |
89 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
90 | | }; |
91 | | |
92 | | class Neg : public Operation { |
93 | | public: |
94 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
95 | | }; |
96 | | |
97 | | class IsPrime : public Operation { |
98 | | public: |
99 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
100 | | }; |
101 | | |
102 | | class RShift : public Operation { |
103 | | public: |
104 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
105 | | }; |
106 | | |
107 | | class LShift1 : public Operation { |
108 | | public: |
109 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
110 | | }; |
111 | | |
112 | | class IsNeg : public Operation { |
113 | | public: |
114 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
115 | | }; |
116 | | |
117 | | class IsEq : public Operation { |
118 | | public: |
119 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
120 | | }; |
121 | | |
122 | | class IsGt : public Operation { |
123 | | public: |
124 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
125 | | }; |
126 | | |
127 | | class IsGte : public Operation { |
128 | | public: |
129 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
130 | | }; |
131 | | |
132 | | class IsLt : public Operation { |
133 | | public: |
134 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
135 | | }; |
136 | | |
137 | | class IsLte : public Operation { |
138 | | public: |
139 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
140 | | }; |
141 | | |
142 | | class IsEven: public Operation { |
143 | | public: |
144 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
145 | | }; |
146 | | |
147 | | class IsOdd: public Operation { |
148 | | public: |
149 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
150 | | }; |
151 | | |
152 | | class IsZero : public Operation { |
153 | | public: |
154 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
155 | | }; |
156 | | |
157 | | class IsNotZero : public Operation { |
158 | | public: |
159 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
160 | | }; |
161 | | |
162 | | class IsOne : public Operation { |
163 | | public: |
164 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
165 | | }; |
166 | | |
167 | | class MulMod : public Operation { |
168 | | public: |
169 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
170 | | }; |
171 | | |
172 | | class Bit : public Operation { |
173 | | public: |
174 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
175 | | }; |
176 | | |
177 | | class CmpAbs : public Operation { |
178 | | public: |
179 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
180 | | }; |
181 | | |
182 | | class SetBit : public Operation { |
183 | | public: |
184 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
185 | | }; |
186 | | |
187 | | class Mod_NIST_192 : public Operation { |
188 | | public: |
189 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
190 | | }; |
191 | | |
192 | | class Mod_NIST_224 : public Operation { |
193 | | public: |
194 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
195 | | }; |
196 | | |
197 | | class Mod_NIST_256 : public Operation { |
198 | | public: |
199 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
200 | | }; |
201 | | |
202 | | class Mod_NIST_384 : public Operation { |
203 | | public: |
204 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
205 | | }; |
206 | | |
207 | | class Mod_NIST_521 : public Operation { |
208 | | public: |
209 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
210 | | }; |
211 | | |
212 | | class ClearBit : public Operation { |
213 | | public: |
214 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
215 | | }; |
216 | | |
217 | | class MulAdd : public Operation { |
218 | | public: |
219 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
220 | | }; |
221 | | |
222 | | class MulDiv : public Operation { |
223 | | public: |
224 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
225 | | }; |
226 | | |
227 | | class MulDivCeil : public Operation { |
228 | | public: |
229 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
230 | | }; |
231 | | |
232 | | class Exp2 : public Operation { |
233 | | public: |
234 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
235 | | }; |
236 | | |
237 | | class NumLSZeroBits : public Operation { |
238 | | public: |
239 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
240 | | }; |
241 | | |
242 | | class Sqrt : public Operation { |
243 | | public: |
244 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
245 | | }; |
246 | | |
247 | | class AddMod : public Operation { |
248 | | public: |
249 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
250 | | }; |
251 | | |
252 | | class SubMod : public Operation { |
253 | | public: |
254 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
255 | | }; |
256 | | |
257 | | class NumBits : public Operation { |
258 | | public: |
259 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
260 | | }; |
261 | | |
262 | | class Set : public Operation { |
263 | | public: |
264 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
265 | | }; |
266 | | |
267 | | class CondSet : public Operation { |
268 | | public: |
269 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
270 | | }; |
271 | | |
272 | | class Ressol : public Operation { |
273 | | public: |
274 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
275 | | }; |
276 | | |
277 | | class Not : public Operation { |
278 | | public: |
279 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
280 | | }; |
281 | | |
282 | | class Prime : public Operation { |
283 | | public: |
284 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
285 | | }; |
286 | | |
287 | | class RandRange : public Operation { |
288 | | public: |
289 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
290 | | }; |
291 | | |
292 | | class IsSquare : public Operation { |
293 | | public: |
294 | | bool Run(Datasource& ds, Bignum& res, std::vector<Bignum>& bn, const std::optional<Bignum>& modulo) const override; |
295 | | }; |
296 | | |
297 | | } /* namespace Botan_bignum */ |
298 | | } /* namespace module */ |
299 | | } /* namespace cryptofuzz */ |