Botan
1.10.17
src
math
mp
mp_comba.cpp
Go to the documentation of this file.
1
/*
2
* Comba Multiplication and Squaring
3
* (C) 1999-2007,2011 Jack Lloyd
4
*
5
* Distributed under the terms of the Botan license
6
*/
7
8
#include <botan/internal/mp_core.h>
9
#include <botan/internal/mp_asmi.h>
10
11
namespace
Botan
{
12
13
extern
"C"
{
14
15
/*
16
* Comba 4x4 Squaring
17
*/
18
void
bigint_comba_sqr4
(word z[8],
const
word x[4])
19
{
20
word w2 = 0, w1 = 0, w0 = 0;
21
22
word3_muladd
(&w2, &w1, &w0, x[ 0], x[ 0]);
23
z[ 0] = w0; w0 = 0;
24
25
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[ 1]);
26
z[ 1] = w1; w1 = 0;
27
28
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[ 2]);
29
word3_muladd
(&w1, &w0, &w2, x[ 1], x[ 1]);
30
z[ 2] = w2; w2 = 0;
31
32
word3_muladd_2
(&w2, &w1, &w0, x[ 0], x[ 3]);
33
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[ 2]);
34
z[ 3] = w0; w0 = 0;
35
36
word3_muladd_2
(&w0, &w2, &w1, x[ 1], x[ 3]);
37
word3_muladd
(&w0, &w2, &w1, x[ 2], x[ 2]);
38
z[ 4] = w1; w1 = 0;
39
40
word3_muladd_2
(&w1, &w0, &w2, x[ 2], x[ 3]);
41
z[ 5] = w2; w2 = 0;
42
43
word3_muladd
(&w2, &w1, &w0, x[ 3], x[ 3]);
44
z[ 6] = w0;
45
z[ 7] = w1;
46
}
47
48
/*
49
* Comba 4x4 Multiplication
50
*/
51
void
bigint_comba_mul4
(word z[8],
const
word x[4],
const
word y[4])
52
{
53
word w2 = 0, w1 = 0, w0 = 0;
54
55
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 0]);
56
z[ 0] = w0; w0 = 0;
57
58
word3_muladd
(&w0, &w2, &w1, x[ 0], y[ 1]);
59
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 0]);
60
z[ 1] = w1; w1 = 0;
61
62
word3_muladd
(&w1, &w0, &w2, x[ 0], y[ 2]);
63
word3_muladd
(&w1, &w0, &w2, x[ 1], y[ 1]);
64
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 0]);
65
z[ 2] = w2; w2 = 0;
66
67
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 3]);
68
word3_muladd
(&w2, &w1, &w0, x[ 1], y[ 2]);
69
word3_muladd
(&w2, &w1, &w0, x[ 2], y[ 1]);
70
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 0]);
71
z[ 3] = w0; w0 = 0;
72
73
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 3]);
74
word3_muladd
(&w0, &w2, &w1, x[ 2], y[ 2]);
75
word3_muladd
(&w0, &w2, &w1, x[ 3], y[ 1]);
76
z[ 4] = w1; w1 = 0;
77
78
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 3]);
79
word3_muladd
(&w1, &w0, &w2, x[ 3], y[ 2]);
80
z[ 5] = w2; w2 = 0;
81
82
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 3]);
83
z[ 6] = w0;
84
z[ 7] = w1;
85
}
86
87
/*
88
* Comba 6x6 Squaring
89
*/
90
void
bigint_comba_sqr6
(word z[12],
const
word x[6])
91
{
92
word w2 = 0, w1 = 0, w0 = 0;
93
94
word3_muladd
(&w2, &w1, &w0, x[ 0], x[ 0]);
95
z[ 0] = w0; w0 = 0;
96
97
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[ 1]);
98
z[ 1] = w1; w1 = 0;
99
100
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[ 2]);
101
word3_muladd
(&w1, &w0, &w2, x[ 1], x[ 1]);
102
z[ 2] = w2; w2 = 0;
103
104
word3_muladd_2
(&w2, &w1, &w0, x[ 0], x[ 3]);
105
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[ 2]);
106
z[ 3] = w0; w0 = 0;
107
108
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[ 4]);
109
word3_muladd_2
(&w0, &w2, &w1, x[ 1], x[ 3]);
110
word3_muladd
(&w0, &w2, &w1, x[ 2], x[ 2]);
111
z[ 4] = w1; w1 = 0;
112
113
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[ 5]);
114
word3_muladd_2
(&w1, &w0, &w2, x[ 1], x[ 4]);
115
word3_muladd_2
(&w1, &w0, &w2, x[ 2], x[ 3]);
116
z[ 5] = w2; w2 = 0;
117
118
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[ 5]);
119
word3_muladd_2
(&w2, &w1, &w0, x[ 2], x[ 4]);
120
word3_muladd
(&w2, &w1, &w0, x[ 3], x[ 3]);
121
z[ 6] = w0; w0 = 0;
122
123
word3_muladd_2
(&w0, &w2, &w1, x[ 2], x[ 5]);
124
word3_muladd_2
(&w0, &w2, &w1, x[ 3], x[ 4]);
125
z[ 7] = w1; w1 = 0;
126
127
word3_muladd_2
(&w1, &w0, &w2, x[ 3], x[ 5]);
128
word3_muladd
(&w1, &w0, &w2, x[ 4], x[ 4]);
129
z[ 8] = w2; w2 = 0;
130
131
word3_muladd_2
(&w2, &w1, &w0, x[ 4], x[ 5]);
132
z[ 9] = w0; w0 = 0;
133
134
word3_muladd
(&w0, &w2, &w1, x[ 5], x[ 5]);
135
z[10] = w1;
136
z[11] = w2;
137
}
138
139
/*
140
* Comba 6x6 Multiplication
141
*/
142
void
bigint_comba_mul6
(word z[12],
const
word x[6],
const
word y[6])
143
{
144
word w2 = 0, w1 = 0, w0 = 0;
145
146
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 0]);
147
z[ 0] = w0; w0 = 0;
148
149
word3_muladd
(&w0, &w2, &w1, x[ 0], y[ 1]);
150
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 0]);
151
z[ 1] = w1; w1 = 0;
152
153
word3_muladd
(&w1, &w0, &w2, x[ 0], y[ 2]);
154
word3_muladd
(&w1, &w0, &w2, x[ 1], y[ 1]);
155
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 0]);
156
z[ 2] = w2; w2 = 0;
157
158
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 3]);
159
word3_muladd
(&w2, &w1, &w0, x[ 1], y[ 2]);
160
word3_muladd
(&w2, &w1, &w0, x[ 2], y[ 1]);
161
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 0]);
162
z[ 3] = w0; w0 = 0;
163
164
word3_muladd
(&w0, &w2, &w1, x[ 0], y[ 4]);
165
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 3]);
166
word3_muladd
(&w0, &w2, &w1, x[ 2], y[ 2]);
167
word3_muladd
(&w0, &w2, &w1, x[ 3], y[ 1]);
168
word3_muladd
(&w0, &w2, &w1, x[ 4], y[ 0]);
169
z[ 4] = w1; w1 = 0;
170
171
word3_muladd
(&w1, &w0, &w2, x[ 0], y[ 5]);
172
word3_muladd
(&w1, &w0, &w2, x[ 1], y[ 4]);
173
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 3]);
174
word3_muladd
(&w1, &w0, &w2, x[ 3], y[ 2]);
175
word3_muladd
(&w1, &w0, &w2, x[ 4], y[ 1]);
176
word3_muladd
(&w1, &w0, &w2, x[ 5], y[ 0]);
177
z[ 5] = w2; w2 = 0;
178
179
word3_muladd
(&w2, &w1, &w0, x[ 1], y[ 5]);
180
word3_muladd
(&w2, &w1, &w0, x[ 2], y[ 4]);
181
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 3]);
182
word3_muladd
(&w2, &w1, &w0, x[ 4], y[ 2]);
183
word3_muladd
(&w2, &w1, &w0, x[ 5], y[ 1]);
184
z[ 6] = w0; w0 = 0;
185
186
word3_muladd
(&w0, &w2, &w1, x[ 2], y[ 5]);
187
word3_muladd
(&w0, &w2, &w1, x[ 3], y[ 4]);
188
word3_muladd
(&w0, &w2, &w1, x[ 4], y[ 3]);
189
word3_muladd
(&w0, &w2, &w1, x[ 5], y[ 2]);
190
z[ 7] = w1; w1 = 0;
191
192
word3_muladd
(&w1, &w0, &w2, x[ 3], y[ 5]);
193
word3_muladd
(&w1, &w0, &w2, x[ 4], y[ 4]);
194
word3_muladd
(&w1, &w0, &w2, x[ 5], y[ 3]);
195
z[ 8] = w2; w2 = 0;
196
197
word3_muladd
(&w2, &w1, &w0, x[ 4], y[ 5]);
198
word3_muladd
(&w2, &w1, &w0, x[ 5], y[ 4]);
199
z[ 9] = w0; w0 = 0;
200
201
word3_muladd
(&w0, &w2, &w1, x[ 5], y[ 5]);
202
z[10] = w1;
203
z[11] = w2;
204
}
205
206
/*
207
* Comba 8x8 Squaring
208
*/
209
void
bigint_comba_sqr8
(word z[16],
const
word x[8])
210
{
211
word w2 = 0, w1 = 0, w0 = 0;
212
213
word3_muladd
(&w2, &w1, &w0, x[ 0], x[ 0]);
214
z[ 0] = w0; w0 = 0;
215
216
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[ 1]);
217
z[ 1] = w1; w1 = 0;
218
219
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[ 2]);
220
word3_muladd
(&w1, &w0, &w2, x[ 1], x[ 1]);
221
z[ 2] = w2; w2 = 0;
222
223
word3_muladd_2
(&w2, &w1, &w0, x[ 0], x[ 3]);
224
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[ 2]);
225
z[ 3] = w0; w0 = 0;
226
227
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[ 4]);
228
word3_muladd_2
(&w0, &w2, &w1, x[ 1], x[ 3]);
229
word3_muladd
(&w0, &w2, &w1, x[ 2], x[ 2]);
230
z[ 4] = w1; w1 = 0;
231
232
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[ 5]);
233
word3_muladd_2
(&w1, &w0, &w2, x[ 1], x[ 4]);
234
word3_muladd_2
(&w1, &w0, &w2, x[ 2], x[ 3]);
235
z[ 5] = w2; w2 = 0;
236
237
word3_muladd_2
(&w2, &w1, &w0, x[ 0], x[ 6]);
238
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[ 5]);
239
word3_muladd_2
(&w2, &w1, &w0, x[ 2], x[ 4]);
240
word3_muladd
(&w2, &w1, &w0, x[ 3], x[ 3]);
241
z[ 6] = w0; w0 = 0;
242
243
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[ 7]);
244
word3_muladd_2
(&w0, &w2, &w1, x[ 1], x[ 6]);
245
word3_muladd_2
(&w0, &w2, &w1, x[ 2], x[ 5]);
246
word3_muladd_2
(&w0, &w2, &w1, x[ 3], x[ 4]);
247
z[ 7] = w1; w1 = 0;
248
249
word3_muladd_2
(&w1, &w0, &w2, x[ 1], x[ 7]);
250
word3_muladd_2
(&w1, &w0, &w2, x[ 2], x[ 6]);
251
word3_muladd_2
(&w1, &w0, &w2, x[ 3], x[ 5]);
252
word3_muladd
(&w1, &w0, &w2, x[ 4], x[ 4]);
253
z[ 8] = w2; w2 = 0;
254
255
word3_muladd_2
(&w2, &w1, &w0, x[ 2], x[ 7]);
256
word3_muladd_2
(&w2, &w1, &w0, x[ 3], x[ 6]);
257
word3_muladd_2
(&w2, &w1, &w0, x[ 4], x[ 5]);
258
z[ 9] = w0; w0 = 0;
259
260
word3_muladd_2
(&w0, &w2, &w1, x[ 3], x[ 7]);
261
word3_muladd_2
(&w0, &w2, &w1, x[ 4], x[ 6]);
262
word3_muladd
(&w0, &w2, &w1, x[ 5], x[ 5]);
263
z[10] = w1; w1 = 0;
264
265
word3_muladd_2
(&w1, &w0, &w2, x[ 4], x[ 7]);
266
word3_muladd_2
(&w1, &w0, &w2, x[ 5], x[ 6]);
267
z[11] = w2; w2 = 0;
268
269
word3_muladd_2
(&w2, &w1, &w0, x[ 5], x[ 7]);
270
word3_muladd
(&w2, &w1, &w0, x[ 6], x[ 6]);
271
z[12] = w0; w0 = 0;
272
273
word3_muladd_2
(&w0, &w2, &w1, x[ 6], x[ 7]);
274
z[13] = w1; w1 = 0;
275
276
word3_muladd
(&w1, &w0, &w2, x[ 7], x[ 7]);
277
z[14] = w2;
278
z[15] = w0;
279
}
280
281
/*
282
* Comba 8x8 Multiplication
283
*/
284
void
bigint_comba_mul8
(word z[16],
const
word x[8],
const
word y[8])
285
{
286
word w2 = 0, w1 = 0, w0 = 0;
287
288
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 0]);
289
z[ 0] = w0; w0 = 0;
290
291
word3_muladd
(&w0, &w2, &w1, x[ 0], y[ 1]);
292
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 0]);
293
z[ 1] = w1; w1 = 0;
294
295
word3_muladd
(&w1, &w0, &w2, x[ 0], y[ 2]);
296
word3_muladd
(&w1, &w0, &w2, x[ 1], y[ 1]);
297
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 0]);
298
z[ 2] = w2; w2 = 0;
299
300
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 3]);
301
word3_muladd
(&w2, &w1, &w0, x[ 1], y[ 2]);
302
word3_muladd
(&w2, &w1, &w0, x[ 2], y[ 1]);
303
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 0]);
304
z[ 3] = w0; w0 = 0;
305
306
word3_muladd
(&w0, &w2, &w1, x[ 0], y[ 4]);
307
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 3]);
308
word3_muladd
(&w0, &w2, &w1, x[ 2], y[ 2]);
309
word3_muladd
(&w0, &w2, &w1, x[ 3], y[ 1]);
310
word3_muladd
(&w0, &w2, &w1, x[ 4], y[ 0]);
311
z[ 4] = w1; w1 = 0;
312
313
word3_muladd
(&w1, &w0, &w2, x[ 0], y[ 5]);
314
word3_muladd
(&w1, &w0, &w2, x[ 1], y[ 4]);
315
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 3]);
316
word3_muladd
(&w1, &w0, &w2, x[ 3], y[ 2]);
317
word3_muladd
(&w1, &w0, &w2, x[ 4], y[ 1]);
318
word3_muladd
(&w1, &w0, &w2, x[ 5], y[ 0]);
319
z[ 5] = w2; w2 = 0;
320
321
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 6]);
322
word3_muladd
(&w2, &w1, &w0, x[ 1], y[ 5]);
323
word3_muladd
(&w2, &w1, &w0, x[ 2], y[ 4]);
324
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 3]);
325
word3_muladd
(&w2, &w1, &w0, x[ 4], y[ 2]);
326
word3_muladd
(&w2, &w1, &w0, x[ 5], y[ 1]);
327
word3_muladd
(&w2, &w1, &w0, x[ 6], y[ 0]);
328
z[ 6] = w0; w0 = 0;
329
330
word3_muladd
(&w0, &w2, &w1, x[ 0], y[ 7]);
331
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 6]);
332
word3_muladd
(&w0, &w2, &w1, x[ 2], y[ 5]);
333
word3_muladd
(&w0, &w2, &w1, x[ 3], y[ 4]);
334
word3_muladd
(&w0, &w2, &w1, x[ 4], y[ 3]);
335
word3_muladd
(&w0, &w2, &w1, x[ 5], y[ 2]);
336
word3_muladd
(&w0, &w2, &w1, x[ 6], y[ 1]);
337
word3_muladd
(&w0, &w2, &w1, x[ 7], y[ 0]);
338
z[ 7] = w1; w1 = 0;
339
340
word3_muladd
(&w1, &w0, &w2, x[ 1], y[ 7]);
341
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 6]);
342
word3_muladd
(&w1, &w0, &w2, x[ 3], y[ 5]);
343
word3_muladd
(&w1, &w0, &w2, x[ 4], y[ 4]);
344
word3_muladd
(&w1, &w0, &w2, x[ 5], y[ 3]);
345
word3_muladd
(&w1, &w0, &w2, x[ 6], y[ 2]);
346
word3_muladd
(&w1, &w0, &w2, x[ 7], y[ 1]);
347
z[ 8] = w2; w2 = 0;
348
349
word3_muladd
(&w2, &w1, &w0, x[ 2], y[ 7]);
350
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 6]);
351
word3_muladd
(&w2, &w1, &w0, x[ 4], y[ 5]);
352
word3_muladd
(&w2, &w1, &w0, x[ 5], y[ 4]);
353
word3_muladd
(&w2, &w1, &w0, x[ 6], y[ 3]);
354
word3_muladd
(&w2, &w1, &w0, x[ 7], y[ 2]);
355
z[ 9] = w0; w0 = 0;
356
357
word3_muladd
(&w0, &w2, &w1, x[ 3], y[ 7]);
358
word3_muladd
(&w0, &w2, &w1, x[ 4], y[ 6]);
359
word3_muladd
(&w0, &w2, &w1, x[ 5], y[ 5]);
360
word3_muladd
(&w0, &w2, &w1, x[ 6], y[ 4]);
361
word3_muladd
(&w0, &w2, &w1, x[ 7], y[ 3]);
362
z[10] = w1; w1 = 0;
363
364
word3_muladd
(&w1, &w0, &w2, x[ 4], y[ 7]);
365
word3_muladd
(&w1, &w0, &w2, x[ 5], y[ 6]);
366
word3_muladd
(&w1, &w0, &w2, x[ 6], y[ 5]);
367
word3_muladd
(&w1, &w0, &w2, x[ 7], y[ 4]);
368
z[11] = w2; w2 = 0;
369
370
word3_muladd
(&w2, &w1, &w0, x[ 5], y[ 7]);
371
word3_muladd
(&w2, &w1, &w0, x[ 6], y[ 6]);
372
word3_muladd
(&w2, &w1, &w0, x[ 7], y[ 5]);
373
z[12] = w0; w0 = 0;
374
375
word3_muladd
(&w0, &w2, &w1, x[ 6], y[ 7]);
376
word3_muladd
(&w0, &w2, &w1, x[ 7], y[ 6]);
377
z[13] = w1; w1 = 0;
378
379
word3_muladd
(&w1, &w0, &w2, x[ 7], y[ 7]);
380
z[14] = w2;
381
z[15] = w0;
382
}
383
384
/*
385
* Comba 16x16 Squaring
386
*/
387
void
bigint_comba_sqr16
(word z[32],
const
word x[16])
388
{
389
word w2 = 0, w1 = 0, w0 = 0;
390
391
word3_muladd
(&w2, &w1, &w0, x[ 0], x[ 0]);
392
z[ 0] = w0; w0 = 0;
393
394
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[ 1]);
395
z[ 1] = w1; w1 = 0;
396
397
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[ 2]);
398
word3_muladd
(&w1, &w0, &w2, x[ 1], x[ 1]);
399
z[ 2] = w2; w2 = 0;
400
401
word3_muladd_2
(&w2, &w1, &w0, x[ 0], x[ 3]);
402
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[ 2]);
403
z[ 3] = w0; w0 = 0;
404
405
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[ 4]);
406
word3_muladd_2
(&w0, &w2, &w1, x[ 1], x[ 3]);
407
word3_muladd
(&w0, &w2, &w1, x[ 2], x[ 2]);
408
z[ 4] = w1; w1 = 0;
409
410
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[ 5]);
411
word3_muladd_2
(&w1, &w0, &w2, x[ 1], x[ 4]);
412
word3_muladd_2
(&w1, &w0, &w2, x[ 2], x[ 3]);
413
z[ 5] = w2; w2 = 0;
414
415
word3_muladd_2
(&w2, &w1, &w0, x[ 0], x[ 6]);
416
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[ 5]);
417
word3_muladd_2
(&w2, &w1, &w0, x[ 2], x[ 4]);
418
word3_muladd
(&w2, &w1, &w0, x[ 3], x[ 3]);
419
z[ 6] = w0; w0 = 0;
420
421
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[ 7]);
422
word3_muladd_2
(&w0, &w2, &w1, x[ 1], x[ 6]);
423
word3_muladd_2
(&w0, &w2, &w1, x[ 2], x[ 5]);
424
word3_muladd_2
(&w0, &w2, &w1, x[ 3], x[ 4]);
425
z[ 7] = w1; w1 = 0;
426
427
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[ 8]);
428
word3_muladd_2
(&w1, &w0, &w2, x[ 1], x[ 7]);
429
word3_muladd_2
(&w1, &w0, &w2, x[ 2], x[ 6]);
430
word3_muladd_2
(&w1, &w0, &w2, x[ 3], x[ 5]);
431
word3_muladd
(&w1, &w0, &w2, x[ 4], x[ 4]);
432
z[ 8] = w2; w2 = 0;
433
434
word3_muladd_2
(&w2, &w1, &w0, x[ 0], x[ 9]);
435
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[ 8]);
436
word3_muladd_2
(&w2, &w1, &w0, x[ 2], x[ 7]);
437
word3_muladd_2
(&w2, &w1, &w0, x[ 3], x[ 6]);
438
word3_muladd_2
(&w2, &w1, &w0, x[ 4], x[ 5]);
439
z[ 9] = w0; w0 = 0;
440
441
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[10]);
442
word3_muladd_2
(&w0, &w2, &w1, x[ 1], x[ 9]);
443
word3_muladd_2
(&w0, &w2, &w1, x[ 2], x[ 8]);
444
word3_muladd_2
(&w0, &w2, &w1, x[ 3], x[ 7]);
445
word3_muladd_2
(&w0, &w2, &w1, x[ 4], x[ 6]);
446
word3_muladd
(&w0, &w2, &w1, x[ 5], x[ 5]);
447
z[10] = w1; w1 = 0;
448
449
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[11]);
450
word3_muladd_2
(&w1, &w0, &w2, x[ 1], x[10]);
451
word3_muladd_2
(&w1, &w0, &w2, x[ 2], x[ 9]);
452
word3_muladd_2
(&w1, &w0, &w2, x[ 3], x[ 8]);
453
word3_muladd_2
(&w1, &w0, &w2, x[ 4], x[ 7]);
454
word3_muladd_2
(&w1, &w0, &w2, x[ 5], x[ 6]);
455
z[11] = w2; w2 = 0;
456
457
word3_muladd_2
(&w2, &w1, &w0, x[ 0], x[12]);
458
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[11]);
459
word3_muladd_2
(&w2, &w1, &w0, x[ 2], x[10]);
460
word3_muladd_2
(&w2, &w1, &w0, x[ 3], x[ 9]);
461
word3_muladd_2
(&w2, &w1, &w0, x[ 4], x[ 8]);
462
word3_muladd_2
(&w2, &w1, &w0, x[ 5], x[ 7]);
463
word3_muladd
(&w2, &w1, &w0, x[ 6], x[ 6]);
464
z[12] = w0; w0 = 0;
465
466
word3_muladd_2
(&w0, &w2, &w1, x[ 0], x[13]);
467
word3_muladd_2
(&w0, &w2, &w1, x[ 1], x[12]);
468
word3_muladd_2
(&w0, &w2, &w1, x[ 2], x[11]);
469
word3_muladd_2
(&w0, &w2, &w1, x[ 3], x[10]);
470
word3_muladd_2
(&w0, &w2, &w1, x[ 4], x[ 9]);
471
word3_muladd_2
(&w0, &w2, &w1, x[ 5], x[ 8]);
472
word3_muladd_2
(&w0, &w2, &w1, x[ 6], x[ 7]);
473
z[13] = w1; w1 = 0;
474
475
word3_muladd_2
(&w1, &w0, &w2, x[ 0], x[14]);
476
word3_muladd_2
(&w1, &w0, &w2, x[ 1], x[13]);
477
word3_muladd_2
(&w1, &w0, &w2, x[ 2], x[12]);
478
word3_muladd_2
(&w1, &w0, &w2, x[ 3], x[11]);
479
word3_muladd_2
(&w1, &w0, &w2, x[ 4], x[10]);
480
word3_muladd_2
(&w1, &w0, &w2, x[ 5], x[ 9]);
481
word3_muladd_2
(&w1, &w0, &w2, x[ 6], x[ 8]);
482
word3_muladd
(&w1, &w0, &w2, x[ 7], x[ 7]);
483
z[14] = w2; w2 = 0;
484
485
word3_muladd_2
(&w2, &w1, &w0, x[ 0], x[15]);
486
word3_muladd_2
(&w2, &w1, &w0, x[ 1], x[14]);
487
word3_muladd_2
(&w2, &w1, &w0, x[ 2], x[13]);
488
word3_muladd_2
(&w2, &w1, &w0, x[ 3], x[12]);
489
word3_muladd_2
(&w2, &w1, &w0, x[ 4], x[11]);
490
word3_muladd_2
(&w2, &w1, &w0, x[ 5], x[10]);
491
word3_muladd_2
(&w2, &w1, &w0, x[ 6], x[ 9]);
492
word3_muladd_2
(&w2, &w1, &w0, x[ 7], x[ 8]);
493
z[15] = w0; w0 = 0;
494
495
word3_muladd_2
(&w0, &w2, &w1, x[ 1], x[15]);
496
word3_muladd_2
(&w0, &w2, &w1, x[ 2], x[14]);
497
word3_muladd_2
(&w0, &w2, &w1, x[ 3], x[13]);
498
word3_muladd_2
(&w0, &w2, &w1, x[ 4], x[12]);
499
word3_muladd_2
(&w0, &w2, &w1, x[ 5], x[11]);
500
word3_muladd_2
(&w0, &w2, &w1, x[ 6], x[10]);
501
word3_muladd_2
(&w0, &w2, &w1, x[ 7], x[ 9]);
502
word3_muladd
(&w0, &w2, &w1, x[ 8], x[ 8]);
503
z[16] = w1; w1 = 0;
504
505
word3_muladd_2
(&w1, &w0, &w2, x[ 2], x[15]);
506
word3_muladd_2
(&w1, &w0, &w2, x[ 3], x[14]);
507
word3_muladd_2
(&w1, &w0, &w2, x[ 4], x[13]);
508
word3_muladd_2
(&w1, &w0, &w2, x[ 5], x[12]);
509
word3_muladd_2
(&w1, &w0, &w2, x[ 6], x[11]);
510
word3_muladd_2
(&w1, &w0, &w2, x[ 7], x[10]);
511
word3_muladd_2
(&w1, &w0, &w2, x[ 8], x[ 9]);
512
z[17] = w2; w2 = 0;
513
514
word3_muladd_2
(&w2, &w1, &w0, x[ 3], x[15]);
515
word3_muladd_2
(&w2, &w1, &w0, x[ 4], x[14]);
516
word3_muladd_2
(&w2, &w1, &w0, x[ 5], x[13]);
517
word3_muladd_2
(&w2, &w1, &w0, x[ 6], x[12]);
518
word3_muladd_2
(&w2, &w1, &w0, x[ 7], x[11]);
519
word3_muladd_2
(&w2, &w1, &w0, x[ 8], x[10]);
520
word3_muladd
(&w2, &w1, &w0, x[ 9], x[ 9]);
521
z[18] = w0; w0 = 0;
522
523
word3_muladd_2
(&w0, &w2, &w1, x[ 4], x[15]);
524
word3_muladd_2
(&w0, &w2, &w1, x[ 5], x[14]);
525
word3_muladd_2
(&w0, &w2, &w1, x[ 6], x[13]);
526
word3_muladd_2
(&w0, &w2, &w1, x[ 7], x[12]);
527
word3_muladd_2
(&w0, &w2, &w1, x[ 8], x[11]);
528
word3_muladd_2
(&w0, &w2, &w1, x[ 9], x[10]);
529
z[19] = w1; w1 = 0;
530
531
word3_muladd_2
(&w1, &w0, &w2, x[ 5], x[15]);
532
word3_muladd_2
(&w1, &w0, &w2, x[ 6], x[14]);
533
word3_muladd_2
(&w1, &w0, &w2, x[ 7], x[13]);
534
word3_muladd_2
(&w1, &w0, &w2, x[ 8], x[12]);
535
word3_muladd_2
(&w1, &w0, &w2, x[ 9], x[11]);
536
word3_muladd
(&w1, &w0, &w2, x[10], x[10]);
537
z[20] = w2; w2 = 0;
538
539
word3_muladd_2
(&w2, &w1, &w0, x[ 6], x[15]);
540
word3_muladd_2
(&w2, &w1, &w0, x[ 7], x[14]);
541
word3_muladd_2
(&w2, &w1, &w0, x[ 8], x[13]);
542
word3_muladd_2
(&w2, &w1, &w0, x[ 9], x[12]);
543
word3_muladd_2
(&w2, &w1, &w0, x[10], x[11]);
544
z[21] = w0; w0 = 0;
545
546
word3_muladd_2
(&w0, &w2, &w1, x[ 7], x[15]);
547
word3_muladd_2
(&w0, &w2, &w1, x[ 8], x[14]);
548
word3_muladd_2
(&w0, &w2, &w1, x[ 9], x[13]);
549
word3_muladd_2
(&w0, &w2, &w1, x[10], x[12]);
550
word3_muladd
(&w0, &w2, &w1, x[11], x[11]);
551
z[22] = w1; w1 = 0;
552
553
word3_muladd_2
(&w1, &w0, &w2, x[ 8], x[15]);
554
word3_muladd_2
(&w1, &w0, &w2, x[ 9], x[14]);
555
word3_muladd_2
(&w1, &w0, &w2, x[10], x[13]);
556
word3_muladd_2
(&w1, &w0, &w2, x[11], x[12]);
557
z[23] = w2; w2 = 0;
558
559
word3_muladd_2
(&w2, &w1, &w0, x[ 9], x[15]);
560
word3_muladd_2
(&w2, &w1, &w0, x[10], x[14]);
561
word3_muladd_2
(&w2, &w1, &w0, x[11], x[13]);
562
word3_muladd
(&w2, &w1, &w0, x[12], x[12]);
563
z[24] = w0; w0 = 0;
564
565
word3_muladd_2
(&w0, &w2, &w1, x[10], x[15]);
566
word3_muladd_2
(&w0, &w2, &w1, x[11], x[14]);
567
word3_muladd_2
(&w0, &w2, &w1, x[12], x[13]);
568
z[25] = w1; w1 = 0;
569
570
word3_muladd_2
(&w1, &w0, &w2, x[11], x[15]);
571
word3_muladd_2
(&w1, &w0, &w2, x[12], x[14]);
572
word3_muladd
(&w1, &w0, &w2, x[13], x[13]);
573
z[26] = w2; w2 = 0;
574
575
word3_muladd_2
(&w2, &w1, &w0, x[12], x[15]);
576
word3_muladd_2
(&w2, &w1, &w0, x[13], x[14]);
577
z[27] = w0; w0 = 0;
578
579
word3_muladd_2
(&w0, &w2, &w1, x[13], x[15]);
580
word3_muladd
(&w0, &w2, &w1, x[14], x[14]);
581
z[28] = w1; w1 = 0;
582
583
word3_muladd_2
(&w1, &w0, &w2, x[14], x[15]);
584
z[29] = w2; w2 = 0;
585
586
word3_muladd
(&w2, &w1, &w0, x[15], x[15]);
587
z[30] = w0;
588
z[31] = w1;
589
}
590
591
/*
592
* Comba 16x16 Multiplication
593
*/
594
void
bigint_comba_mul16
(word z[32],
const
word x[16],
const
word y[16])
595
{
596
word w2 = 0, w1 = 0, w0 = 0;
597
598
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 0]);
599
z[ 0] = w0; w0 = 0;
600
601
word3_muladd
(&w0, &w2, &w1, x[ 0], y[ 1]);
602
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 0]);
603
z[ 1] = w1; w1 = 0;
604
605
word3_muladd
(&w1, &w0, &w2, x[ 0], y[ 2]);
606
word3_muladd
(&w1, &w0, &w2, x[ 1], y[ 1]);
607
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 0]);
608
z[ 2] = w2; w2 = 0;
609
610
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 3]);
611
word3_muladd
(&w2, &w1, &w0, x[ 1], y[ 2]);
612
word3_muladd
(&w2, &w1, &w0, x[ 2], y[ 1]);
613
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 0]);
614
z[ 3] = w0; w0 = 0;
615
616
word3_muladd
(&w0, &w2, &w1, x[ 0], y[ 4]);
617
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 3]);
618
word3_muladd
(&w0, &w2, &w1, x[ 2], y[ 2]);
619
word3_muladd
(&w0, &w2, &w1, x[ 3], y[ 1]);
620
word3_muladd
(&w0, &w2, &w1, x[ 4], y[ 0]);
621
z[ 4] = w1; w1 = 0;
622
623
word3_muladd
(&w1, &w0, &w2, x[ 0], y[ 5]);
624
word3_muladd
(&w1, &w0, &w2, x[ 1], y[ 4]);
625
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 3]);
626
word3_muladd
(&w1, &w0, &w2, x[ 3], y[ 2]);
627
word3_muladd
(&w1, &w0, &w2, x[ 4], y[ 1]);
628
word3_muladd
(&w1, &w0, &w2, x[ 5], y[ 0]);
629
z[ 5] = w2; w2 = 0;
630
631
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 6]);
632
word3_muladd
(&w2, &w1, &w0, x[ 1], y[ 5]);
633
word3_muladd
(&w2, &w1, &w0, x[ 2], y[ 4]);
634
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 3]);
635
word3_muladd
(&w2, &w1, &w0, x[ 4], y[ 2]);
636
word3_muladd
(&w2, &w1, &w0, x[ 5], y[ 1]);
637
word3_muladd
(&w2, &w1, &w0, x[ 6], y[ 0]);
638
z[ 6] = w0; w0 = 0;
639
640
word3_muladd
(&w0, &w2, &w1, x[ 0], y[ 7]);
641
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 6]);
642
word3_muladd
(&w0, &w2, &w1, x[ 2], y[ 5]);
643
word3_muladd
(&w0, &w2, &w1, x[ 3], y[ 4]);
644
word3_muladd
(&w0, &w2, &w1, x[ 4], y[ 3]);
645
word3_muladd
(&w0, &w2, &w1, x[ 5], y[ 2]);
646
word3_muladd
(&w0, &w2, &w1, x[ 6], y[ 1]);
647
word3_muladd
(&w0, &w2, &w1, x[ 7], y[ 0]);
648
z[ 7] = w1; w1 = 0;
649
650
word3_muladd
(&w1, &w0, &w2, x[ 0], y[ 8]);
651
word3_muladd
(&w1, &w0, &w2, x[ 1], y[ 7]);
652
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 6]);
653
word3_muladd
(&w1, &w0, &w2, x[ 3], y[ 5]);
654
word3_muladd
(&w1, &w0, &w2, x[ 4], y[ 4]);
655
word3_muladd
(&w1, &w0, &w2, x[ 5], y[ 3]);
656
word3_muladd
(&w1, &w0, &w2, x[ 6], y[ 2]);
657
word3_muladd
(&w1, &w0, &w2, x[ 7], y[ 1]);
658
word3_muladd
(&w1, &w0, &w2, x[ 8], y[ 0]);
659
z[ 8] = w2; w2 = 0;
660
661
word3_muladd
(&w2, &w1, &w0, x[ 0], y[ 9]);
662
word3_muladd
(&w2, &w1, &w0, x[ 1], y[ 8]);
663
word3_muladd
(&w2, &w1, &w0, x[ 2], y[ 7]);
664
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 6]);
665
word3_muladd
(&w2, &w1, &w0, x[ 4], y[ 5]);
666
word3_muladd
(&w2, &w1, &w0, x[ 5], y[ 4]);
667
word3_muladd
(&w2, &w1, &w0, x[ 6], y[ 3]);
668
word3_muladd
(&w2, &w1, &w0, x[ 7], y[ 2]);
669
word3_muladd
(&w2, &w1, &w0, x[ 8], y[ 1]);
670
word3_muladd
(&w2, &w1, &w0, x[ 9], y[ 0]);
671
z[ 9] = w0; w0 = 0;
672
673
word3_muladd
(&w0, &w2, &w1, x[ 0], y[10]);
674
word3_muladd
(&w0, &w2, &w1, x[ 1], y[ 9]);
675
word3_muladd
(&w0, &w2, &w1, x[ 2], y[ 8]);
676
word3_muladd
(&w0, &w2, &w1, x[ 3], y[ 7]);
677
word3_muladd
(&w0, &w2, &w1, x[ 4], y[ 6]);
678
word3_muladd
(&w0, &w2, &w1, x[ 5], y[ 5]);
679
word3_muladd
(&w0, &w2, &w1, x[ 6], y[ 4]);
680
word3_muladd
(&w0, &w2, &w1, x[ 7], y[ 3]);
681
word3_muladd
(&w0, &w2, &w1, x[ 8], y[ 2]);
682
word3_muladd
(&w0, &w2, &w1, x[ 9], y[ 1]);
683
word3_muladd
(&w0, &w2, &w1, x[10], y[ 0]);
684
z[10] = w1; w1 = 0;
685
686
word3_muladd
(&w1, &w0, &w2, x[ 0], y[11]);
687
word3_muladd
(&w1, &w0, &w2, x[ 1], y[10]);
688
word3_muladd
(&w1, &w0, &w2, x[ 2], y[ 9]);
689
word3_muladd
(&w1, &w0, &w2, x[ 3], y[ 8]);
690
word3_muladd
(&w1, &w0, &w2, x[ 4], y[ 7]);
691
word3_muladd
(&w1, &w0, &w2, x[ 5], y[ 6]);
692
word3_muladd
(&w1, &w0, &w2, x[ 6], y[ 5]);
693
word3_muladd
(&w1, &w0, &w2, x[ 7], y[ 4]);
694
word3_muladd
(&w1, &w0, &w2, x[ 8], y[ 3]);
695
word3_muladd
(&w1, &w0, &w2, x[ 9], y[ 2]);
696
word3_muladd
(&w1, &w0, &w2, x[10], y[ 1]);
697
word3_muladd
(&w1, &w0, &w2, x[11], y[ 0]);
698
z[11] = w2; w2 = 0;
699
700
word3_muladd
(&w2, &w1, &w0, x[ 0], y[12]);
701
word3_muladd
(&w2, &w1, &w0, x[ 1], y[11]);
702
word3_muladd
(&w2, &w1, &w0, x[ 2], y[10]);
703
word3_muladd
(&w2, &w1, &w0, x[ 3], y[ 9]);
704
word3_muladd
(&w2, &w1, &w0, x[ 4], y[ 8]);
705
word3_muladd
(&w2, &w1, &w0, x[ 5], y[ 7]);
706
word3_muladd
(&w2, &w1, &w0, x[ 6], y[ 6]);
707
word3_muladd
(&w2, &w1, &w0, x[ 7], y[ 5]);
708
word3_muladd
(&w2, &w1, &w0, x[ 8], y[ 4]);
709
word3_muladd
(&w2, &w1, &w0, x[ 9], y[ 3]);
710
word3_muladd
(&w2, &w1, &w0, x[10], y[ 2]);
711
word3_muladd
(&w2, &w1, &w0, x[11], y[ 1]);
712
word3_muladd
(&w2, &w1, &w0, x[12], y[ 0]);
713
z[12] = w0; w0 = 0;
714
715
word3_muladd
(&w0, &w2, &w1, x[ 0], y[13]);
716
word3_muladd
(&w0, &w2, &w1, x[ 1], y[12]);
717
word3_muladd
(&w0, &w2, &w1, x[ 2], y[11]);
718
word3_muladd
(&w0, &w2, &w1, x[ 3], y[10]);
719
word3_muladd
(&w0, &w2, &w1, x[ 4], y[ 9]);
720
word3_muladd
(&w0, &w2, &w1, x[ 5], y[ 8]);
721
word3_muladd
(&w0, &w2, &w1, x[ 6], y[ 7]);
722
word3_muladd
(&w0, &w2, &w1, x[ 7], y[ 6]);
723
word3_muladd
(&w0, &w2, &w1, x[ 8], y[ 5]);
724
word3_muladd
(&w0, &w2, &w1, x[ 9], y[ 4]);
725
word3_muladd
(&w0, &w2, &w1, x[10], y[ 3]);
726
word3_muladd
(&w0, &w2, &w1, x[11], y[ 2]);
727
word3_muladd
(&w0, &w2, &w1, x[12], y[ 1]);
728
word3_muladd
(&w0, &w2, &w1, x[13], y[ 0]);
729
z[13] = w1; w1 = 0;
730
731
word3_muladd
(&w1, &w0, &w2, x[ 0], y[14]);
732
word3_muladd
(&w1, &w0, &w2, x[ 1], y[13]);
733
word3_muladd
(&w1, &w0, &w2, x[ 2], y[12]);
734
word3_muladd
(&w1, &w0, &w2, x[ 3], y[11]);
735
word3_muladd
(&w1, &w0, &w2, x[ 4], y[10]);
736
word3_muladd
(&w1, &w0, &w2, x[ 5], y[ 9]);
737
word3_muladd
(&w1, &w0, &w2, x[ 6], y[ 8]);
738
word3_muladd
(&w1, &w0, &w2, x[ 7], y[ 7]);
739
word3_muladd
(&w1, &w0, &w2, x[ 8], y[ 6]);
740
word3_muladd
(&w1, &w0, &w2, x[ 9], y[ 5]);
741
word3_muladd
(&w1, &w0, &w2, x[10], y[ 4]);
742
word3_muladd
(&w1, &w0, &w2, x[11], y[ 3]);
743
word3_muladd
(&w1, &w0, &w2, x[12], y[ 2]);
744
word3_muladd
(&w1, &w0, &w2, x[13], y[ 1]);
745
word3_muladd
(&w1, &w0, &w2, x[14], y[ 0]);
746
z[14] = w2; w2 = 0;
747
748
word3_muladd
(&w2, &w1, &w0, x[ 0], y[15]);
749
word3_muladd
(&w2, &w1, &w0, x[ 1], y[14]);
750
word3_muladd
(&w2, &w1, &w0, x[ 2], y[13]);
751
word3_muladd
(&w2, &w1, &w0, x[ 3], y[12]);
752
word3_muladd
(&w2, &w1, &w0, x[ 4], y[11]);
753
word3_muladd
(&w2, &w1, &w0, x[ 5], y[10]);
754
word3_muladd
(&w2, &w1, &w0, x[ 6], y[ 9]);
755
word3_muladd
(&w2, &w1, &w0, x[ 7], y[ 8]);
756
word3_muladd
(&w2, &w1, &w0, x[ 8], y[ 7]);
757
word3_muladd
(&w2, &w1, &w0, x[ 9], y[ 6]);
758
word3_muladd
(&w2, &w1, &w0, x[10], y[ 5]);
759
word3_muladd
(&w2, &w1, &w0, x[11], y[ 4]);
760
word3_muladd
(&w2, &w1, &w0, x[12], y[ 3]);
761
word3_muladd
(&w2, &w1, &w0, x[13], y[ 2]);
762
word3_muladd
(&w2, &w1, &w0, x[14], y[ 1]);
763
word3_muladd
(&w2, &w1, &w0, x[15], y[ 0]);
764
z[15] = w0; w0 = 0;
765
766
word3_muladd
(&w0, &w2, &w1, x[ 1], y[15]);
767
word3_muladd
(&w0, &w2, &w1, x[ 2], y[14]);
768
word3_muladd
(&w0, &w2, &w1, x[ 3], y[13]);
769
word3_muladd
(&w0, &w2, &w1, x[ 4], y[12]);
770
word3_muladd
(&w0, &w2, &w1, x[ 5], y[11]);
771
word3_muladd
(&w0, &w2, &w1, x[ 6], y[10]);
772
word3_muladd
(&w0, &w2, &w1, x[ 7], y[ 9]);
773
word3_muladd
(&w0, &w2, &w1, x[ 8], y[ 8]);
774
word3_muladd
(&w0, &w2, &w1, x[ 9], y[ 7]);
775
word3_muladd
(&w0, &w2, &w1, x[10], y[ 6]);
776
word3_muladd
(&w0, &w2, &w1, x[11], y[ 5]);
777
word3_muladd
(&w0, &w2, &w1, x[12], y[ 4]);
778
word3_muladd
(&w0, &w2, &w1, x[13], y[ 3]);
779
word3_muladd
(&w0, &w2, &w1, x[14], y[ 2]);
780
word3_muladd
(&w0, &w2, &w1, x[15], y[ 1]);
781
z[16] = w1; w1 = 0;
782
783
word3_muladd
(&w1, &w0, &w2, x[ 2], y[15]);
784
word3_muladd
(&w1, &w0, &w2, x[ 3], y[14]);
785
word3_muladd
(&w1, &w0, &w2, x[ 4], y[13]);
786
word3_muladd
(&w1, &w0, &w2, x[ 5], y[12]);
787
word3_muladd
(&w1, &w0, &w2, x[ 6], y[11]);
788
word3_muladd
(&w1, &w0, &w2, x[ 7], y[10]);
789
word3_muladd
(&w1, &w0, &w2, x[ 8], y[ 9]);
790
word3_muladd
(&w1, &w0, &w2, x[ 9], y[ 8]);
791
word3_muladd
(&w1, &w0, &w2, x[10], y[ 7]);
792
word3_muladd
(&w1, &w0, &w2, x[11], y[ 6]);
793
word3_muladd
(&w1, &w0, &w2, x[12], y[ 5]);
794
word3_muladd
(&w1, &w0, &w2, x[13], y[ 4]);
795
word3_muladd
(&w1, &w0, &w2, x[14], y[ 3]);
796
word3_muladd
(&w1, &w0, &w2, x[15], y[ 2]);
797
z[17] = w2; w2 = 0;
798
799
word3_muladd
(&w2, &w1, &w0, x[ 3], y[15]);
800
word3_muladd
(&w2, &w1, &w0, x[ 4], y[14]);
801
word3_muladd
(&w2, &w1, &w0, x[ 5], y[13]);
802
word3_muladd
(&w2, &w1, &w0, x[ 6], y[12]);
803
word3_muladd
(&w2, &w1, &w0, x[ 7], y[11]);
804
word3_muladd
(&w2, &w1, &w0, x[ 8], y[10]);
805
word3_muladd
(&w2, &w1, &w0, x[ 9], y[ 9]);
806
word3_muladd
(&w2, &w1, &w0, x[10], y[ 8]);
807
word3_muladd
(&w2, &w1, &w0, x[11], y[ 7]);
808
word3_muladd
(&w2, &w1, &w0, x[12], y[ 6]);
809
word3_muladd
(&w2, &w1, &w0, x[13], y[ 5]);
810
word3_muladd
(&w2, &w1, &w0, x[14], y[ 4]);
811
word3_muladd
(&w2, &w1, &w0, x[15], y[ 3]);
812
z[18] = w0; w0 = 0;
813
814
word3_muladd
(&w0, &w2, &w1, x[ 4], y[15]);
815
word3_muladd
(&w0, &w2, &w1, x[ 5], y[14]);
816
word3_muladd
(&w0, &w2, &w1, x[ 6], y[13]);
817
word3_muladd
(&w0, &w2, &w1, x[ 7], y[12]);
818
word3_muladd
(&w0, &w2, &w1, x[ 8], y[11]);
819
word3_muladd
(&w0, &w2, &w1, x[ 9], y[10]);
820
word3_muladd
(&w0, &w2, &w1, x[10], y[ 9]);
821
word3_muladd
(&w0, &w2, &w1, x[11], y[ 8]);
822
word3_muladd
(&w0, &w2, &w1, x[12], y[ 7]);
823
word3_muladd
(&w0, &w2, &w1, x[13], y[ 6]);
824
word3_muladd
(&w0, &w2, &w1, x[14], y[ 5]);
825
word3_muladd
(&w0, &w2, &w1, x[15], y[ 4]);
826
z[19] = w1; w1 = 0;
827
828
word3_muladd
(&w1, &w0, &w2, x[ 5], y[15]);
829
word3_muladd
(&w1, &w0, &w2, x[ 6], y[14]);
830
word3_muladd
(&w1, &w0, &w2, x[ 7], y[13]);
831
word3_muladd
(&w1, &w0, &w2, x[ 8], y[12]);
832
word3_muladd
(&w1, &w0, &w2, x[ 9], y[11]);
833
word3_muladd
(&w1, &w0, &w2, x[10], y[10]);
834
word3_muladd
(&w1, &w0, &w2, x[11], y[ 9]);
835
word3_muladd
(&w1, &w0, &w2, x[12], y[ 8]);
836
word3_muladd
(&w1, &w0, &w2, x[13], y[ 7]);
837
word3_muladd
(&w1, &w0, &w2, x[14], y[ 6]);
838
word3_muladd
(&w1, &w0, &w2, x[15], y[ 5]);
839
z[20] = w2; w2 = 0;
840
841
word3_muladd
(&w2, &w1, &w0, x[ 6], y[15]);
842
word3_muladd
(&w2, &w1, &w0, x[ 7], y[14]);
843
word3_muladd
(&w2, &w1, &w0, x[ 8], y[13]);
844
word3_muladd
(&w2, &w1, &w0, x[ 9], y[12]);
845
word3_muladd
(&w2, &w1, &w0, x[10], y[11]);
846
word3_muladd
(&w2, &w1, &w0, x[11], y[10]);
847
word3_muladd
(&w2, &w1, &w0, x[12], y[ 9]);
848
word3_muladd
(&w2, &w1, &w0, x[13], y[ 8]);
849
word3_muladd
(&w2, &w1, &w0, x[14], y[ 7]);
850
word3_muladd
(&w2, &w1, &w0, x[15], y[ 6]);
851
z[21] = w0; w0 = 0;
852
853
word3_muladd
(&w0, &w2, &w1, x[ 7], y[15]);
854
word3_muladd
(&w0, &w2, &w1, x[ 8], y[14]);
855
word3_muladd
(&w0, &w2, &w1, x[ 9], y[13]);
856
word3_muladd
(&w0, &w2, &w1, x[10], y[12]);
857
word3_muladd
(&w0, &w2, &w1, x[11], y[11]);
858
word3_muladd
(&w0, &w2, &w1, x[12], y[10]);
859
word3_muladd
(&w0, &w2, &w1, x[13], y[ 9]);
860
word3_muladd
(&w0, &w2, &w1, x[14], y[ 8]);
861
word3_muladd
(&w0, &w2, &w1, x[15], y[ 7]);
862
z[22] = w1; w1 = 0;
863
864
word3_muladd
(&w1, &w0, &w2, x[ 8], y[15]);
865
word3_muladd
(&w1, &w0, &w2, x[ 9], y[14]);
866
word3_muladd
(&w1, &w0, &w2, x[10], y[13]);
867
word3_muladd
(&w1, &w0, &w2, x[11], y[12]);
868
word3_muladd
(&w1, &w0, &w2, x[12], y[11]);
869
word3_muladd
(&w1, &w0, &w2, x[13], y[10]);
870
word3_muladd
(&w1, &w0, &w2, x[14], y[ 9]);
871
word3_muladd
(&w1, &w0, &w2, x[15], y[ 8]);
872
z[23] = w2; w2 = 0;
873
874
word3_muladd
(&w2, &w1, &w0, x[ 9], y[15]);
875
word3_muladd
(&w2, &w1, &w0, x[10], y[14]);
876
word3_muladd
(&w2, &w1, &w0, x[11], y[13]);
877
word3_muladd
(&w2, &w1, &w0, x[12], y[12]);
878
word3_muladd
(&w2, &w1, &w0, x[13], y[11]);
879
word3_muladd
(&w2, &w1, &w0, x[14], y[10]);
880
word3_muladd
(&w2, &w1, &w0, x[15], y[ 9]);
881
z[24] = w0; w0 = 0;
882
883
word3_muladd
(&w0, &w2, &w1, x[10], y[15]);
884
word3_muladd
(&w0, &w2, &w1, x[11], y[14]);
885
word3_muladd
(&w0, &w2, &w1, x[12], y[13]);
886
word3_muladd
(&w0, &w2, &w1, x[13], y[12]);
887
word3_muladd
(&w0, &w2, &w1, x[14], y[11]);
888
word3_muladd
(&w0, &w2, &w1, x[15], y[10]);
889
z[25] = w1; w1 = 0;
890
891
word3_muladd
(&w1, &w0, &w2, x[11], y[15]);
892
word3_muladd
(&w1, &w0, &w2, x[12], y[14]);
893
word3_muladd
(&w1, &w0, &w2, x[13], y[13]);
894
word3_muladd
(&w1, &w0, &w2, x[14], y[12]);
895
word3_muladd
(&w1, &w0, &w2, x[15], y[11]);
896
z[26] = w2; w2 = 0;
897
898
word3_muladd
(&w2, &w1, &w0, x[12], y[15]);
899
word3_muladd
(&w2, &w1, &w0, x[13], y[14]);
900
word3_muladd
(&w2, &w1, &w0, x[14], y[13]);
901
word3_muladd
(&w2, &w1, &w0, x[15], y[12]);
902
z[27] = w0; w0 = 0;
903
904
word3_muladd
(&w0, &w2, &w1, x[13], y[15]);
905
word3_muladd
(&w0, &w2, &w1, x[14], y[14]);
906
word3_muladd
(&w0, &w2, &w1, x[15], y[13]);
907
z[28] = w1; w1 = 0;
908
909
word3_muladd
(&w1, &w0, &w2, x[14], y[15]);
910
word3_muladd
(&w1, &w0, &w2, x[15], y[14]);
911
z[29] = w2; w2 = 0;
912
913
word3_muladd
(&w2, &w1, &w0, x[15], y[15]);
914
z[30] = w0;
915
z[31] = w1;
916
}
917
918
}
919
920
}
Botan
Definition
algo_base.h:14
Botan::bigint_comba_mul4
void bigint_comba_mul4(word z[8], const word x[4], const word y[4])
Definition
mp_comba.cpp:51
Botan::bigint_comba_sqr6
void bigint_comba_sqr6(word z[12], const word x[6])
Definition
mp_comba.cpp:90
Botan::bigint_comba_sqr16
void bigint_comba_sqr16(word z[32], const word x[16])
Definition
mp_comba.cpp:387
Botan::bigint_comba_mul8
void bigint_comba_mul8(word z[16], const word x[8], const word y[8])
Definition
mp_comba.cpp:284
Botan::bigint_comba_sqr4
void bigint_comba_sqr4(word z[8], const word x[4])
Definition
mp_comba.cpp:18
Botan::word3_muladd
void word3_muladd(word *w2, word *w1, word *w0, word a, word b)
Definition
mp_asmi.h:175
Botan::word3_muladd_2
void word3_muladd_2(word *w2, word *w1, word *w0, word a, word b)
Definition
mp_asmi.h:186
Botan::bigint_comba_mul16
void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
Definition
mp_comba.cpp:594
Botan::bigint_comba_mul6
void bigint_comba_mul6(word z[12], const word x[6], const word y[6])
Definition
mp_comba.cpp:142
Botan::bigint_comba_sqr8
void bigint_comba_sqr8(word z[16], const word x[8])
Definition
mp_comba.cpp:209
Generated by
1.18.0