-rw-r--r-- 7781 libntruprime-20240825/crypto_decode/653x4621/int16/decode.c raw
/* auto-generated; do not edit */ #include "crypto_decode.h" #include "crypto_int16.h" #include "crypto_int32.h" #define int16 crypto_int16 #define int32 crypto_int32 static int16 mullo(int16 x,int16 y) { return x*y; } static int16 mulhi(int16 x,int16 y) { return (x*(int32)y)>>16; } void crypto_decode(void *v,const unsigned char *s) { int16 *R = v; long long i; int16 a0,a1,ri,lo,s0,s1; s += crypto_decode_STRBYTES; a1 = 0; a1 += *--s; /* 0...255 */ a1 -= 86; /* -86...169 */ a1 -= 86; /* -172...83 */ a1 += crypto_int16_negative_mask(a1)&86; /* -86...85 */ a1 += crypto_int16_negative_mask(a1)&86; /* 0...85 */ R[0] = a1; /* reconstruct mod 1*[835]+[6708] */ ri = R[0]; s1 = *--s; s0 = *--s; lo = mullo(ri,-20092); a0 = mulhi(ri,396)-mulhi(lo,835); /* -418...516 */ a0 += s1; /* -418...771 */ lo = mullo(a0,-20092); a0 = mulhi(a0,396)-mulhi(lo,835); /* -421...422 */ a0 += s0; /* -421...677 */ a0 += crypto_int16_negative_mask(a0)&835; /* 0...834 */ a1 = (s1<<8)+s0-a0; a1 = mullo(a1,8555); /* invalid inputs might need reduction mod 6708 */ a1 -= 6708; a1 += crypto_int16_negative_mask(a1)&6708; R[0] = a0; R[1] = a1; /* reconstruct mod 2*[7396]+[6708] */ R[2] = R[1]; for (i = 0;i >= 0;--i) { ri = R[i]; s1 = *--s; s0 = *--s; lo = mullo(ri,-2268); a0 = mulhi(ri,3088)-mulhi(lo,7396); /* -3698...4470 */ a0 += s1; /* -3698...4725 */ lo = mullo(a0,-2268); a0 = mulhi(a0,3088)-mulhi(lo,7396); /* -3873...3920 */ a0 += s0; /* -3873...4175 */ a0 += crypto_int16_negative_mask(a0)&7396; /* 0...7395 */ a1 = (ri<<14)+(s1<<6)+((s0-a0)>>2); a1 = mullo(a1,-18679); /* invalid inputs might need reduction mod 7396 */ a1 -= 7396; a1 += crypto_int16_negative_mask(a1)&7396; R[2*i] = a0; R[2*i+1] = a1; } /* reconstruct mod 5*[86]+[78] */ ri = R[2]; a0 = ri; lo = mullo(a0,-762); a0 = mulhi(a0,4)-mulhi(lo,86); /* -43...44 */ a0 += crypto_int16_negative_mask(a0)&86; /* 0...85 */ a1 = (ri-a0)>>1; a1 = mullo(a1,-16765); /* invalid inputs might need reduction mod 78 */ a1 -= 78; a1 += crypto_int16_negative_mask(a1)&78; R[4] = a0; R[5] = a1; for (i = 1;i >= 0;--i) { ri = R[i]; a0 = ri; lo = mullo(a0,-762); a0 = mulhi(a0,4)-mulhi(lo,86); /* -43...44 */ a0 += crypto_int16_negative_mask(a0)&86; /* 0...85 */ a1 = (ri-a0)>>1; a1 = mullo(a1,-16765); /* invalid inputs might need reduction mod 86 */ a1 -= 86; a1 += crypto_int16_negative_mask(a1)&86; R[2*i] = a0; R[2*i+1] = a1; } /* reconstruct mod 10*[2370]+[78] */ R[10] = R[5]; for (i = 4;i >= 0;--i) { ri = R[i]; s1 = *--s; s0 = *--s; lo = mullo(ri,-7079); a0 = mulhi(ri,-14)-mulhi(lo,2370); /* -1189...1185 */ a0 += s1; /* -1189...1440 */ lo = mullo(a0,-7079); a0 = mulhi(a0,-14)-mulhi(lo,2370); /* -1186...1185 */ a0 += s0; /* -1186...1440 */ a0 += crypto_int16_negative_mask(a0)&2370; /* 0...2369 */ a1 = (ri<<15)+(s1<<7)+((s0-a0)>>1); a1 = mullo(a1,-8351); /* invalid inputs might need reduction mod 2370 */ a1 -= 2370; a1 += crypto_int16_negative_mask(a1)&2370; R[2*i] = a0; R[2*i+1] = a1; } /* reconstruct mod 20*[12461]+[78] */ R[20] = R[10]; for (i = 9;i >= 0;--i) { ri = R[i]; s1 = *--s; s0 = *--s; lo = mullo(ri,-1346); a0 = mulhi(ri,4710)-mulhi(lo,12461); /* -6231...7408 */ a0 += s1; /* -6231...7663 */ lo = mullo(a0,-1346); a0 = mulhi(a0,4710)-mulhi(lo,12461); /* -6679...6781 */ a0 += s0; /* -6679...7036 */ a0 += crypto_int16_negative_mask(a0)&12461; /* 0...12460 */ a1 = (s1<<8)+s0-a0; a1 = mullo(a1,-19675); /* invalid inputs might need reduction mod 12461 */ a1 -= 12461; a1 += crypto_int16_negative_mask(a1)&12461; R[2*i] = a0; R[2*i+1] = a1; } /* reconstruct mod 40*[1786]+[78] */ R[40] = R[20]; for (i = 19;i >= 0;--i) { ri = R[i]; s0 = *--s; lo = mullo(ri,-9394); a0 = mulhi(ri,-468)-mulhi(lo,1786); /* -1010...893 */ a0 += s0; /* -1010...1148 */ a0 += crypto_int16_negative_mask(a0)&1786; /* 0...1785 */ a1 = (ri<<7)+((s0-a0)>>1); a1 = mullo(a1,-12843); /* invalid inputs might need reduction mod 1786 */ a1 -= 1786; a1 += crypto_int16_negative_mask(a1)&1786; R[2*i] = a0; R[2*i+1] = a1; } /* reconstruct mod 81*[676]+[7510] */ ri = R[40]; s1 = *--s; s0 = *--s; lo = mullo(ri,-24818); a0 = mulhi(ri,248)-mulhi(lo,676); /* -338...400 */ a0 += s1; /* -338...655 */ lo = mullo(a0,-24818); a0 = mulhi(a0,248)-mulhi(lo,676); /* -340...340 */ a0 += s0; /* -340...595 */ a0 += crypto_int16_negative_mask(a0)&676; /* 0...675 */ a1 = (ri<<14)+(s1<<6)+((s0-a0)>>2); a1 = mullo(a1,-23655); /* invalid inputs might need reduction mod 7510 */ a1 -= 7510; a1 += crypto_int16_negative_mask(a1)&7510; R[80] = a0; R[81] = a1; for (i = 39;i >= 0;--i) { ri = R[i]; s0 = *--s; lo = mullo(ri,-24818); a0 = mulhi(ri,248)-mulhi(lo,676); /* -338...400 */ a0 += s0; /* -338...655 */ a0 += crypto_int16_negative_mask(a0)&676; /* 0...675 */ a1 = (ri<<6)+((s0-a0)>>2); a1 = mullo(a1,-23655); /* invalid inputs might need reduction mod 676 */ a1 -= 676; a1 += crypto_int16_negative_mask(a1)&676; R[2*i] = a0; R[2*i+1] = a1; } /* reconstruct mod 163*[416]+[4621] */ ri = R[81]; s0 = *--s; lo = mullo(ri,25206); a0 = mulhi(ri,-64)-mulhi(lo,416); /* -224...208 */ a0 += s0; /* -224...463 */ a0 -= 416; /* -640..>47 */ a0 += crypto_int16_negative_mask(a0)&416; /* -224...415 */ a0 += crypto_int16_negative_mask(a0)&416; /* 0...415 */ a1 = (ri<<3)+((s0-a0)>>5); a1 = mullo(a1,20165); /* invalid inputs might need reduction mod 4621 */ a1 -= 4621; a1 += crypto_int16_negative_mask(a1)&4621; R[162] = a0; R[163] = a1; for (i = 80;i >= 0;--i) { ri = R[i]; s0 = *--s; lo = mullo(ri,25206); a0 = mulhi(ri,-64)-mulhi(lo,416); /* -224...208 */ a0 += s0; /* -224...463 */ a0 -= 416; /* -640..>47 */ a0 += crypto_int16_negative_mask(a0)&416; /* -224...415 */ a0 += crypto_int16_negative_mask(a0)&416; /* 0...415 */ a1 = (ri<<3)+((s0-a0)>>5); a1 = mullo(a1,20165); /* invalid inputs might need reduction mod 416 */ a1 -= 416; a1 += crypto_int16_negative_mask(a1)&416; R[2*i] = a0; R[2*i+1] = a1; } /* reconstruct mod 326*[326]+[4621] */ R[326] = R[163]; for (i = 162;i >= 0;--i) { ri = R[i]; s0 = *--s; lo = mullo(ri,14072); a0 = mulhi(ri,-48)-mulhi(lo,326); /* -175...163 */ a0 += s0; /* -175...418 */ a0 -= 326; /* -501..>92 */ a0 += crypto_int16_negative_mask(a0)&326; /* -175...325 */ a0 += crypto_int16_negative_mask(a0)&326; /* 0...325 */ a1 = (ri<<7)+((s0-a0)>>1); a1 = mullo(a1,-19701); /* invalid inputs might need reduction mod 326 */ a1 -= 326; a1 += crypto_int16_negative_mask(a1)&326; R[2*i] = a0; R[2*i+1] = a1; } /* reconstruct mod 653*[4621] */ R[652] = R[326]-2310; for (i = 325;i >= 0;--i) { ri = R[i]; s1 = *--s; s0 = *--s; lo = mullo(ri,-3631); a0 = mulhi(ri,-1635)-mulhi(lo,4621); /* -2720...2310 */ a0 += s1; /* -2720...2565 */ lo = mullo(a0,-3631); a0 = mulhi(a0,-1635)-mulhi(lo,4621); /* -2375...2378 */ a0 += s0; /* -2375...2633 */ a0 += crypto_int16_negative_mask(a0)&4621; /* 0...4620 */ a1 = (s1<<8)+s0-a0; a1 = mullo(a1,-29499); /* invalid inputs might need reduction mod 4621 */ a1 -= 4621; a1 += crypto_int16_negative_mask(a1)&4621; R[2*i] = a0-2310; R[2*i+1] = a1-2310; } }