#include /*THIS IS A C PROGRAM WHICH USES THE RANDOM GENERATOR*/ /* TO GENERATE NUMBERS AND THE ENCODE THEM USING */ /* REED SOLOMON TECHNIQUES */ main() { FILE *efopen(),*fin,*fout; long int INPUT,I,J; long int NINPUT, CINPUT,USE1,USE2,G1; long int G2,P1S,P2S,P3S,P4S; long int ALPHA[512],BITS[256]; long int ilp1,ilp3,ilp4,ilp5,ilp6; long int ilp2,ilp7; long int buffer[3000],output[896]; long int input[1540]; int p1=1,p2=0,p3=0,p4=0; int p5=0,p6=0,p7=0,p8=0; int pinit=0; int cnt1 = 1; int cnt2 = 1; /* open files for I/O */ fin = efopen("in","w"); fout = efopen("out","w"); ALPHA[0]=1; ALPHA[255]=ALPHA[0]; for (I=1; I < 256; I++){ pinit = p8; p8 = p7; p7 = p6; p6 = p5; p5 = p4 ^ pinit; p4 = p3 ^ pinit; p3 = p2 ^ pinit; p2 = p1; p1 = pinit; ALPHA[I] = p1 + p2*2 + p3*4 + p4*8 + p5*16 + p6*32 + p7*64 + p8*128; ALPHA[I+255] = ALPHA[I]; } for (I=1; I < 256; I++){ for (J=0; J < 256; J++){ if (ALPHA[J] == I){ BITS[I] = J; J = 256; } } } /* set up random number generator */ srandom(getpid()); G1 = 1; G2 = 2; G1 = ALPHA[128] ^ ALPHA[128] ^ ALPHA[127] ^ ALPHA[126]; G1 = BITS[G1]; G2 = ALPHA[254] ^ ALPHA[253] ^ ALPHA[2] ^ ALPHA[1]; G2 = BITS[G2]; P1S = P2S = P3S = P4S = 0; for(ilp1=1; ilp1 < 56 ;ilp1++){ P1S = P2S = P3S = P4S = 0; cnt1 = (ilp1 - 1)*28 ; for(ilp3=1; ilp3 < 13 ;ilp3++){ INPUT = (((float) (random() & 0x7FFFFFFF)) / 0x7FFFFFFF) * 255; fprintf(fin,"%d\n",INPUT); ilp7 = ilp1 + ilp3; buffer[cnt2] = INPUT; input[cnt1 + ilp3 ] = INPUT; NINPUT = INPUT ^ P4S; CINPUT = BITS[NINPUT]; USE1 = CINPUT + G1; USE2 = CINPUT + G2; USE1 = ALPHA[USE1]; USE2 = ALPHA[USE2]; P4S = P3S ^ USE1; P3S = P2S ^ USE2; P2S = P1S ^ USE1; P1S = NINPUT; cnt2 = cnt2 + 29; } cnt2 = cnt2 + 4*29; for(ilp3=13; ilp3 < 25 ;ilp3++){ INPUT = (((float) (random() & 0x7FFFFFFF)) / 0x7FFFFFFF) * 255; fprintf(fin,"%d\n",INPUT); buffer[cnt2] = INPUT; input[cnt1 + ilp3 ] = INPUT; NINPUT = INPUT ^ P4S; CINPUT = BITS[NINPUT]; USE1 = CINPUT + G1; USE2 = CINPUT + G2; USE1 = ALPHA[USE1]; USE2 = ALPHA[USE2]; P4S = P3S ^ USE1; P3S = P2S ^ USE2; P2S = P1S ^ USE1; P1S = NINPUT; cnt2 = cnt2 + 29; } cnt2 = cnt2- 16*29; buffer[cnt2] = P4S; cnt2 = cnt2 + 29; buffer[cnt2] = P3S; cnt2 = cnt2 + 29; buffer[cnt2] = P2S; cnt2 = cnt2 + 29; buffer[cnt2] = P1S; cnt2 = cnt2 + 29; cnt2 = cnt2 - 16*29; P1S = P2S = P3S = P4S = 0; for(ilp5=1; ilp5 < 29 ;ilp5++){ INPUT = buffer[cnt2]; cnt2=cnt2+1; output[cnt1 + ilp5] = INPUT; fprintf(fout,"%d\n",INPUT); NINPUT = INPUT ^ P4S; CINPUT = BITS[NINPUT]; USE1 = CINPUT + G1; USE2 = CINPUT + G2; USE1 = ALPHA[USE1]; USE2 = ALPHA[USE2]; P4S = P3S ^ USE1; P3S = P2S ^ USE2; P2S = P1S ^ USE1; P1S = NINPUT; } output[cnt1 + 29] = P4S; output[cnt1 + 30] = P3S; output[cnt1 + 31] = P2S; output[cnt1 + 32] = P1S; fprintf(fout,"%d\n",P4S); fprintf(fout,"%d\n",P3S); fprintf(fout,"%d\n",P2S); fprintf(fout,"%d\n",P1S); } fclose(fin); fclose(fout); } FILE * efopen(fname, mode) char *fname, *mode; { FILE *fid, *fopen(); if ((fid = fopen(fname, mode)) == 0){ (void) fprintf(stderr,"error opening file -- %s\n",fname); exit(-1); } return(fid); }