@@ -158,12 +158,12 @@ inline void addfromto(unsigned char * a, unsigned char * b, unsigned char from,
158
158
a[i] = a[i] ^ b[i - from];
159
159
}
160
160
}
161
-
162
- inline unsigned char * mul (unsigned char * a, unsigned char * b, unsigned char * res){ // corrected
161
+ inline unsigned char * mul (unsigned char * a, unsigned char * b, unsigned char * res){ // changed
163
162
// unsigned char res[SIZE];
164
- cleanPoly (res);
163
+
165
164
unsigned char tmpa[SIZE];
166
165
copyPoly (tmpa, a);
166
+ cleanPoly (res);
167
167
unsigned char j = 0x01 ;
168
168
for (unsigned char k = 0 ; k < 8 ; k++){
169
169
for (unsigned char i = 0 ; i < SIZE; i++){
@@ -289,43 +289,55 @@ unsigned char isBiggerThanOne(unsigned char * b){ // corrected
289
289
return true;*/
290
290
}
291
291
292
+ void doperm ( unsigned char *tmp_a, unsigned char * tmp_b, unsigned char * tmp, unsigned char * q, unsigned char * t, unsigned char * x0, unsigned char * x1, unsigned char * restmp, unsigned char * res){
293
+ while (isBiggerThanOne (tmp_a)) {
294
+ // cleanPoly(tmp);
295
+ cleanPoly (q);
296
+ divMod (tmp_a, tmp_b, tmp, q);// q = a / b;
297
+
298
+ copyPoly (tmp_a, tmp_b); // a = t;
299
+ copyPoly (tmp_b, tmp);// b = tmp;
300
+ copyPoly (t, x0); // t = x0;
301
+ // cleanPoly(restmp);
302
+ // cleanPoly(restmp);
303
+ mul (x0, q, x0);
304
+ // x0 = restmp;
305
+ add (x0, x1);
306
+ // copyPoly(x0, restmp); // x0 = x1 + q * x0;
307
+ // x0 = x1;
308
+ // (unsigned char*)x0 = (unsigned char*)add(x1, mul(q, x0, restmp));
309
+ copyPoly (x1, t); // x1 = t;
310
+ // x1 = p;
311
+ }
312
+ copyPoly (res, x1);
313
+ }
292
314
293
- void inverse (unsigned char * a, unsigned char * b, unsigned char * res){
315
+ inline void inverse (unsigned char * a, unsigned char * b, unsigned char * res){
294
316
unsigned char tmp_a[SIZE];
295
317
copyPoly (tmp_a, a);
296
318
unsigned char tmp_b[SIZE];
297
319
copyPoly (tmp_b, b);
298
320
299
- unsigned char b0[SIZE], t[SIZE], q[SIZE];
300
- copyPoly (b0,b);
321
+ unsigned char t[SIZE];
322
+ unsigned char q[SIZE];
323
+ // copyPoly(b0,b);
301
324
cleanPoly (q);
302
- unsigned char x0[SIZE], x1[SIZE];
325
+ unsigned char x0[SIZE];
326
+ unsigned char x1[SIZE];
327
+ // unsigned char * x1 = NULL;
303
328
cleanPoly (x0);
304
329
x0[0 ] = 0x01 ;
305
330
cleanPoly (x1);
331
+ unsigned char restmp[SIZE];
332
+ unsigned char tmp[SIZE];
306
333
307
- if (isOne (b)) return ;
308
- while (isBiggerThanOne (a)) {
309
- unsigned char tmp[SIZE];
310
- cleanPoly (tmp);
311
- cleanPoly (q);
312
- divMod (a, b, tmp, q);// q = a / b;
313
- copyPoly (t, b);// t = b;
314
- copyPoly (b, tmp);// b = tmp;
315
- copyPoly (a, t); // a = t;
316
- copyPoly (t, x0); // t = x0;
317
- unsigned char restmp[SIZE];
318
- cleanPoly (restmp);
319
- copyPoly (x0, add (x1, mul (q, x0, restmp))); // x0 = x1 + q * x0;
320
- copyPoly (x1, t); // x1 = t;
321
- }
322
- copyPoly (res, x1);
323
- copyPoly (a,tmp_a);
324
- copyPoly (b,tmp_b);
334
+ if (isOne (tmp_b)) return ;
335
+ doperm (tmp_a, tmp_b, tmp, q, t, x0, x1, restmp, res);
336
+ // copyPoly(a,tmp_a);
337
+ // copyPoly(b,tmp_b);
325
338
}
326
339
327
340
328
-
329
341
unsigned char * mulRed (unsigned char * a, unsigned char * b, unsigned char * result){
330
342
mul (a, b, result);
331
343
reduce (result);
0 commit comments