📄 c8_3_4.c
字号:
void forney_cn( const unsigned char *restrict s,
unsigned char *restrict lambda,
int lam_deg,
unsigned char *restrict zeros,
unsigned char *restrict byte_i,
int *fail,
const unsigned char *restrict *restrict tables,
int T,
int RS_N,
unsigned char *restrict scratch )
{
int i,j,k;
unsigned char *omega = scratch;
unsigned char *syn = omega + 3*T;
unsigned char *numerator = syn + 4*T;
unsigned char *denominator = numerator + T;
unsigned char *poly = denominator + T;
unsigned char err_pos_i, err_mag_i, a, b;
int RS_T = T;
int RS_2T = 2*T;
int t0;
const unsigned char *div_inv_table = tables[1];
const unsigned char *log_table = tables[2];
for (i= 0; i< RS_T; i++) syn[i] = 0;
for (i= RS_T; i < (RS_2T + RS_T); i++) syn[i] = s[i-RS_T];
for (i= RS_2T + RS_T; i<(RS_2T + RS_2T); i++) syn[i] = 0;
for (j = RS_2T - 1; j >= 0; j--)
{
omega[j]= 0;
for (i = 0; i <= RS_T; i++)
{
t0 = _gmpy4(lambda[i],syn[RS_T+j-i]);
omega[j]^= t0;
}
}
for (i = RS_T; i< RS_2T; i++) poly[i] = 0;
for (i = 0; i < RS_T;i++)
{
poly[i] = lambda[i];
if (i%2 == 0) poly[i] = 0;
}
for (i=0; i< RS_T; i++)
{
denominator[i] = 0;
numerator[i] = 0;
}
for (j = RS_T - 1; j >= 0; j--)
{
for (i = 0; i< RS_T; i++)
{
t0 = _gmpy4(zeros[i], log_table[denominator[i]]);
denominator[i] = t0;
denominator[i]^= poly[1+j];
t0 = _gmpy4(zeros[i],numerator[i]);
numerator[i] = t0;
numerator[i]^= omega[j];
}
}
for (i = 0; i < RS_T; i++)
{
t0 = _gmpy4(denominator[i], zeros[i]);
denominator[i] = t0;
}
for (i = 0; i < RS_T; i++)
{
err_pos_i = 0;
err_mag_i = 0;
b = div_inv_table[denominator[i]];
a = div_inv_table[zeros[i]];
if (i < lam_deg)
{
t0 = _gmpy4(numerator[i], b);
err_mag_i = t0;
err_pos_i = log_table[a];
if (!denominator[i])
{
*fail = 4;
}
if (err_pos_i > RS_N - 1)
{
*fail = 5;
}
}
k = RS_N-1 - err_pos_i; /* subtract the error from r(x) */
if (*fail == 0)
{
byte_i[k] = byte_i[k] ^ err_mag_i;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -