📄 rs_encoder.cpp
字号:
#include <stdio.h>
#include <math.h>
#include <string.h>
unsigned char GFmultiply(unsigned char a,unsigned char b);
void RS_Encode(unsigned char msg[],unsigned char encode[],int K)
{
int i,j,loop;
unsigned char gg[65];
unsigned char gg_224[]={79,44,81,100,49,183,56,17,232,187,126,104,31,103,52,118,1};
unsigned char gg_192[]={228,231,214,81,113,204,19,169,10,244,117,219,130,12,160,151,195,170,150,151,251,218,245,166,149,183,109,176,148,218,21,161,240,25,15,71,62,5,17,32,157,194,73,195,218,14,12,122};
unsigned char gg_176[]={106,117,43,201,70,139,47,64,127,181,48,25,230,85,31,157,156,123,88,44,149,223,165,36,127,46,142,212,233,71,149,88,165,227,80,105,44,72,147,55,60,85,70,132,229,230,217,155,38,112,43,174,169,136,23,60,186,63,198,205,135,171,40,159,1};
memset(gg, 0,sizeof(gg));
if(K==224)
{
memcpy(gg, gg_224, sizeof(gg_224));
}
else if(K==192)
{
memcpy(gg, gg_192, sizeof(gg_192));
}
else if(K==176)
{
memcpy(gg, gg_176, sizeof(gg_176));
}
unsigned char d[64]={0};
unsigned char g1[240];
unsigned char g2[240];
unsigned char g3[240];
unsigned char DEND[240];
unsigned char out[240];
unsigned char dd[240];
DEND[0]=0;
for (i=0;i<240;i++)
{
if(i<K)
{
g1[i]=msg[i];
g3[i]=g1[i]^DEND[i];
for (j=0;j<(240-K);j++)
{
out[j]=GFmultiply(g3[i],gg[j]);
}
if(K==224)
{
dd[0]=out[0];
for (loop=1;loop<16;loop++)
{
dd[loop]=d[loop-1]^out[loop];
}
for(loop=0; loop<16; loop++)
{
d[loop]=dd[loop];
}
DEND[i+1]=d[15];
}
else if(K==192)
{
dd[0]=out[0];
for (loop=1;loop<48;loop++)
{
dd[loop]=d[loop-1]^out[loop];
}
for(loop=0; loop<48; loop++)
{
d[loop]=dd[loop];
}
DEND[i+1]=d[47];
}
else if(K==176)
{
dd[0]=out[0];
for (loop=1;loop<64;loop++)
{
dd[loop]=d[loop-1]^out[loop];
}
for(loop=0; loop<64; loop++)
{
d[loop]=dd[loop];
}
DEND[i+1]=d[63];
}
g2[i]=0;
}
else
{
g1[i]=0;
g3[i]=0;
for (j=0;j<(240-K);j++)
{
out[j]=GFmultiply(g3[i],gg[j]);
}
if(K==224)
{
dd[0]=out[0];
for (loop=1;loop<16;loop++)
{
dd[loop]=d[loop-1]^out[loop];
}
for(loop=0; loop<16; loop++)
{
d[loop]=dd[loop];
}
DEND[i+1]=d[15];
}
if(K==192)
{
dd[0]=out[0];
for (loop=1;loop<48;loop++)
{
dd[loop]=d[loop-1]^out[loop];
}
for(loop=0; loop<48; loop++)
{
d[loop]=dd[loop];
}
DEND[i+1]=d[47];
}
if(K==176)
{
dd[0]=out[0];
for (loop=1;loop<64;loop++)
{
dd[loop]=d[loop-1]^out[loop];
}
for(loop=0; loop<64; loop++)
{
d[loop]=dd[loop];
}
DEND[i+1]=d[63];
}
g2[i]=g1[i]^DEND[i];
}
}
//encode[240]={msg[],g2[K+1:240]};
for (i=0;i<K;i++)
{
encode[i]=msg[i];
}
for (i=K;i<240;i++)
{
encode[i]=g2[i];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -