Приложение 1 Тексты программ расчета координат векторов сдвигов генераторов ПСП GMW
Программа расчета координат сдвигов для N=8 и т=4.
#include static unsigned int bas[18]; void multi_xa(int); void multi_uv( unsigned int, unsigned int, unsigned int *); void qdr( unsigned int *); static unsigned int x=l,vr=2,ur,zr=2,vt; main() { intij^i; sqw[0]=l; for(i=l;i<15;i++) { muiti_xa(&x); printfC^/oxW^); if(!(i%2)) sqw[i/2]=x; } for(i=0;i } vr=zr; vt=vr; bas[0]=l; bas[l]=zr; for(i=2;i<17;i-H-) {ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i unsigned int rez=0,rnaskl = l,rnask2=l; for(i=0;i<8;i++) { if(*w & maskl) rez=rezAsqw[i]; maskl«=l; } *w=rez; } void multi_xa(unsigned int *px) {if( *px & 0x0080) { *px«=l; ¦px^OxOOld; } else *px«=l ; *px&=0x00fif; void multi_uv( unsigned int u, unsigned int v, unsigned int *z) {int i; *z=0; for(i=0;i<8;i++) {if(v& 0x0001) *zA=u; *z&=0x00ff; multi_xa(&u); v»=l; v&=0x00ff; } } Программа расчета координат сдвигов для N=9 и т=3. #include static unsigned int bas[14]; void multi_xa(int); void multi_uv( unsigned int, unsigned int, unsigned int *); void qdr( unsigned int *); static unsigned int x=l,vr=2,ur,zr=2,vt; main() { intij,n; sqw[0]=l; for(i=l;i<17;i++) { multi_xa(&x); printf("%x\n\r",x);
if(!(i%2)) sqw[i/2]=x; } for(i=0;i<10;i++) printf(,,0/ox\nV\sqw[i]); for(n=0;n<2;n-H-) {for(i=0;i<3;i++) { qdr(&vr); printf("%x\n\rn,vr); } vt=vr; ur=zr; multi_uv(ur,vT,&zr); printf("0/ox %x\n\r",vt,zr); vr=vt; } vr=zr; vt=vr; bas[0]=l; bas[l]=zr; for(i=2;i<33;i++) { ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i unsigned int rez=0,maskl=l ,mask2=l; for(i=0;i<9;i++) { if(*w & maskl) rez=rezAsqw[i]; maskl«=l; } *w=rez; } void multi_xa(unsigned int *px) {if(*px& 0x0100) { *px«=l; ¦px^xOOll; } else *px«=l ; *px&=0x01ff;
void multi_uv( unsigned int u, unsigned int v, unsigned int *z) {int i; *z=0; for(i=0;i<9;i++) {if(v& 0x0001) *zA=u; *Z&=0X01IT; multi_xa(&u); v»=l; v&=0x01ff; } } Программа расчета координат сдвигов для N=10 и т=5. #include static unsigned int bas[34]; void multi_xa(int); void multi_uv( unsigned int, unsigned int, unsigned int *); void qdr( unsigned int *); static unsigned int x=l,vr=2,ur,zr=2,vt; main() { intij,n; sqw[0]=l; foi(i=l;i<19;i++) { multi_xa(&x); printfC%x\nV\x); if(!(i%2)) sqw[i/2]=x; } for(i=0;i } vr=zr; vt=vr; bas[0]=l; bas[l]=zr; for(i=2;i<33;i-r-r) { ur=zr; multiuv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i<33;i++) printf(,,0/ox\n\r",bas[i]); > void qdr(unsigned int *w) {int ij; unsigned int rez=0,mask 1=1 ,mask2= 1; for(i=0;i<10;i-H-) { if(*w & maskl) rez=rezAsqw[i]; maskl«=l; } *w=rez; } void multi_xa(unsigned int *px) {if( *px & 0x0200) { *px«=l; ¦рх^ОхОООЗ; } else *px«=l ; *px&=0x03tT; void multi_uv( unsigned int u, unsigned int v, unsigned int *z) {inti; *z=0; for(i=0;i<10;i++) {if(v & 0x0001) *zA=u; *z &=0x03ff; multi_xa(&u); v»=l; v&=0x03ff; } Программа расчета координат сдвигов для N=12 и т=4. #include static unsigned int bas[20]; void multixa(int); void multi_uv( unsigned int, unsigned int, unsigned int *); void qdr( unsigned int *); static unsigned int x=l,vr=2,ur,zr=2,vt; main() { intij,n; sqw[0]=l; for(i=l;i<23;i++) { multi_xa(&x); printf(,,%x\n\r",x); if(!(i%2)) sqw[i/2]=x; } for(i=0;i<12;i-H-) printf(n%x\nV\sqw[i]); for(n=0;n<3;n-H-) { for(i=0;i<3;i++) { qdr(&vr); prmtf("%x\n\r",vr); } vt=vr; ur=zr; multi_uv(ur,vr,&zr); printf("%x %x\n\r",vt,zr); vr=vt; } vr=zr;
vt=vr;
bas[0]=l;
bas[l]=zr;
for(i=2;i<19;i++)
4*1 {ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i unsigned int rez=0,rnaskl=l,mask2==l; for(i=0;i<12;i++) { if(*w & maskl) rez=rezAsqw[i]; maskl«=l; } *w=rez; } void multi_xa(unsigned int *px) { if( *px & 0x0800) { *px«=l; ¦рх^ОхООбЗ; } else *рх«=1 ; *px&=OxOfff; > void multi_uv( unsigned int u, unsigned int v, unsigned int {int i; *z=0; for(i=0;i<12;i-H-) {if(v& 0x0001) *z*=u; *z&=0x0fff; multi_xa(&u); v»=l; v&=0x0fff; } Программа расчета координат сдвигов для N=14 и т=7. #include static unsigned int bas[150]; void multi_xa(int); void multi_uv( unsigned int, unsigned int, unsigned int *); void qdr( unsigned int *); static unsigned int x=l,vr=2,ur,zr=2,vt; main() { intij^i; sqw[0]=l; for(i=l;i<27;i++) {multi_xa(&x); printf("%x\n\r",x); if(!(i%2)) sqw[i/2]=x; } for(i=0;i< 14;i++) printf("%x\n\r",sqw[i]); for(n=0;n > vr=zr; bas[0]=l; bas[l]=zr; for(i=2;i<129;i++) { ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i<129;i-H-) printf("%x ",bas[i]); } void qdr(unsigned int *w) { int ij; unsigned int rez=0,maskl=l ,mask2=l; for(i=0;i<14;i++) { if(*w & maskl) rez^rez^qwfi]; maskl«=l; } *w=rez; > void multi_xa(unsigned int *px) {if( *px & 0x2000) { *px«=l; ¦рх^ОхШЗ; ) else *px«=l; *px&=0x3fiT; } void multi_uv( unsigned int u, unsigned int v, unsigned int *z) {int i; ¦z=0; for(i=0;i<14;i++) {if(v& 0x0001) *zA=u; *z&=0x3flT; multi_xa(&u); v»=l; v&=0x3fff; } } Программа расчета координат сдвигов для N=15 и т=3. #include void multi_xa(int); void multi_uv( unsigned int, unsigned int, unsigned int void qdr( unsigned int *); static unsigned int x= 1,vr=2,ur,zr=2,vt; main() { intij,n; sqw[0]=l; for(i=l;i<29;i++) { multi_xa(&x); printf("%x\n\rtt,x); ifi;!(i%2)) sqwLi/2]=x; > for(i=0;i multi_uv(ur,vr,&zr); printf("%x %x\n\r",vt,zr); vr=vt; } vr=zr; vt=vr; bas[0]=l; bas[l]=zr; for(i=2;i<19;i-H-) { ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i<19;i++) printf("%x H,bas[i]); } void qdr(unsigned int *w) {int і j; unsigned int rez=0,maskl=l,mask2=l; for(i=0;i<15;i-H-) { if(*w & maskl) rez=rezAsqw[i]; maskl«=l; } *w=rez; } void multi_xa(unsigned int *px) { if( *px & 0x4000) { *px«=l; *рхл=0х0003; } else *px«=l; *px&=0x7ffi; } void multi_uv( unsigned int u, unsigned int v, unsigned int* {int i; *z=0; for(i=0;i<15;i-H-) {if(v & 0x0001) *zA=u; *z &=0x7frT; multi_xa(&u); v»=l; v&=0x7fiT; } } Профамма расчета координат сдвигов для N=16 и т=4. #include static unsigned int bas[20]; void multi_xa(int); void multi_uv( unsigned int, unsigned int, unsigned int *); void qdr( unsigned int *); static unsigned int x=l,vr=2,ur,zr=2,vt; main() { intij,n; sqw[0]=l; for(i=l;i<31;i-H-) { multi_xa(&x); printn:"%x\n\rM,x); if(!(i%2)) sqw[i/2)=x; } for(i=0;i mul ti_u v(ur, vr,&zr); printf("%x %x\nV',vt,zr); vr=vt; vr=zr; vt=vr; bas[0]=l; bas[ 1 ]=zr; for(i=2;i<19;i++) { ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i<19;i++) printf("%x ",bas[i]); > void qdr(unsigned int *w) {int і j; unsigned int rez=0,mask 1=1 ,mask2=l; for(i=0;i<16;i-H-) { if(*w & maskl) rez=rezAsqw[i]; maskl«=l; } *w=rez; } void multi_xa(unsigned int *px) {if( *px & 0x8000) { *px«=l; *pxA=Ox002d; } else *px«=l ; *px&=0xffff; > void multi_uv( unsigned int u, unsigned int v, unsigned int {inti; *z=0; for(i=0;i<16;i++) { if(v & 0x0001) *zA=u; *z &=0xfnT; multi_xa(&u); v»=l; v&=0xfiTT; } } Программа расчета координат сдвигов для N=16 и т=8. #include static unsigned int bas[260]; void multi_xa(int); void multi_uv( unsigned int, unsigned int, unsigned int *); void qdr( unsigned int *); static unsigned int x=l,vr=2,ur,zr=2,vt; main() { intij,n; sqw[0]=l; for(i=l;i<31;i-H-) { multi_xa(&x); printf("%x\n\r'\x); if(!(i%2)) sqw[i/2]=x; } for(i=0;i<16;i-H-) printf("%x\nV\sqw[i]); for(n=0;n vt=vr; ur=zr; multi_uv(ur,vr,&zr); printf("%x %x\n\r",vt,zr); vr=vt; } vr=zr; vt=vr; bas[0]=l; bas[l]=zr; for(i=2;i<257;i++) { ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i<257;i-H-) printf("%x ",bas[i]); } void qdr(unsigned int *w) {int і j; unsigned int rez=0,maskl=l,mask2=l; for(i=0;i<16;i-H-) { if(*w & mask 1) rez^ez^qwfi]; maskl«=l; } *w=rez; } void multi_xa(unsigned int *px) {if( *px & 0x8000) { *рх«=1; *pxA=Ox002d; } else *px«=l ; *рх&=ОхШГ; } void multi_uv( unsigned int u, unsigned int v, unsigned int *z) {int i; *z=0; for(i=0;i<16;i-H-) { if(v & 0x0001) *zA=u; *z &=0xffiT; multi_xa(&u); v»=l; v&=0xffif; } Программа расчета координат сдвигов для N=20 и т=5. #include static unsigned long bas[65]; void multi_xa(long); void multi_uv( unsigned long, unsigned long, unsigned long *); void qdr( unsigned long *); static unsigned long x=l ,vr=2,ur,zr=2,vt; main() { intij,n; sqw[0]=l; for(i=l;i<39;i++) {multi_xa(&x); printf("%lx\n\r",x); if(!(i%2)) sqw[i/2]=x; } for(i=0;i vt=vr; ur=zr; multi_uv(ur,vr,&zr); printf("%lx %lx\n\r",vt,zr); vr=vt; > vr=zr; bas[0]=l; bas[l]=zr; for(i=2;i<36;i++) { ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i<35;i++) printf("%lx ",bas[i]); } void qdr(unsigned long *w) { int і j; unsigned long rez=0,maskl=l,mask2=l; for(i=0;i<20;i-H-) { if(*w & maskl) rez=rezAsqw[i]; maskl«=l; } *w=rez; } void multi_xa(unsigned long *px) {if( *px & Ox00080000L) { *px«=l; +pxA=Ox00000009L; } else *px«=l; *px&=0x000fffir; void multi_uv( unsigned long u, unsigned long v, unsigned long *z) {int i; *z=0; for(i=0;i<20;i++) {if(v & OxOOOOOOOlL) *zA=u; multi_xa(«&u); v»=l; v&=0x000ffiff; } } Программа расчета координат сдвигов для N=24 и т=4. #include static unsigned long bas[65]; void multi_xa(long); void multi_uv( unsigned long, unsigned long, unsigned long *);
void qdr( unsigned long *); static unsigned long x=l ,vr=2,ur,ziF2,vt; main() { intij,n; sqw[0]=l; for(i=l;i<47;i++) { multi_xa(&x); printf("%lx\nV,x); if(!(i%2)) sqw[i/2]=x; } for(i=0;i > vr=zr; vt=vr; bas[0]=l; bas[l]=zr; for(i=2;i<36;i++) {ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; } for(i=0;i<35;i-H-) printfC'%lx M,bas[i]); } void qdr(unsigned long *w) { int і j; unsigned long rez=0,mask 1=1 ,mask2= 1; for(i=0;i<24;i-H-) { if(*w & maskl) rez=rezAsqw[i]; maskl«=l; } *w=rez; > void multi_xa(unsigned long *px) {if( *px & Ox00800000L) { *px«=l; ¦px^xOOOOOOlbL;
else *px«=l ; ¦px&=OxOOffffff; } void multi_uv( unsigned long u, unsigned long v, unsigned long *z) {int i; *z=0; for(i=0;i<24;i++) {if(v & OxOOOOOOOlL) *zA=u; multi_xa(&u); v»=l; v&=0x00ffffff; } } Программа расчета координат сдвигов для N=32 и т=4. ^include static unsigned long bas[30]; void multi_xa(long); void multi_uv( unsigned long, unsigned long, unsigned long *); void qdr( unsigned long *); static unsigned long x=l,vr=2,ur,zr=2,vt; main() { intij,n; sqw[0]=l; for(i=l;i<63;i++) {multi_xa(&x); printf("%lx\nV»; if(!(i%2)) sqw[i/2]=x; } for(i=0;i vt=vr; ur=zr; multi_uv(ur,vr,&zr); printf("%lx %lx\n\r",vt,zr); vr=vt; } vr=zr; vt=vr; bas[0]=i; bas[l]=zr; for(i=2;i<19;i++) { ur=zr; multi_uv(ur,vr,&zr); bas[i]=zr; vr=vt; > for(i=0;i unsigned long rez=0,mask 1=1 ,mask2= 1; for(i=0;i<32;i++) { if(*w & maskl) rez=rezAsqw[i]; maskl«=l; } *w=rez; } void multi_xa(unsigned long *px) {if( *px & Ox80000000L) { *px«=l; ¦px^OxOCMOOOOTL; } else *px«=l ; void multi_uv( unsigned long u, unsigned long v, unsigned long *z) {int i; *z=0; for(i=0;i<32;i++) {if(v & 0x00000001 L) ¦z^; multi_xa(&u); v»=l; } } Программа расчета координат сдвигов для N=42 и т=3. #include {unsigned long xl; unsigned int xh; } REG; void multi_xa(unsigned long *,unsigned *); void multi_uv( REG, REG, REG *) ;
void qdr(REG *); static REG sqw[42]; static REG bas[16J; unsigned long maskl=l; unsigned mask2=l; main() { intij,n; unsigned long 1=1; unsigned int h=0; REG vr,ur,zr,vt; sqw[0].xl=l; sqw[0].xh=0; for(i=l;i<83;i++) {multi_xa(&l,&h); I* printf(,,0/olx\n\rH,x);*/ if(!(i%2)) {sqw[i/2].xl=l; sqw[i/2].xh=h ; } } for(i=0;i<30;i++) printf(M%xW\sqw[i].xh); vr.xl=2; vr.xh=0; zr.xl=2; zr.xh=0; for(n=0;n<13;n-H-) {for(i=0;i<3;i++) { qdr(&vr);/* printfOYolxW',™); */ } vt=vr; ur=zr; multi_uv(ur,vr,&zr); /* printf("%lx %lx\nV\vt,zr);<7 vr=vt; } vr=zr; vt=vr; bas[0].xl=l;bas[0].xh=0; bas[l].xl=zr.xl; bas[l].xh=zr.xh; for(i=2;i<16;i-H-) {ur=zr; mul ti_uv(ur, vr,&zr); bas[i].xl=zr.xl; bas[i].xh=zr.xh; vr=vt; } for(i=0;i<16;i-H-) ргіпіГ(и%х %lx W,bas[i].xh,bas[i].xl); } void qdr(REG *w) {int і j; REG rez; maskl=l; mask2=l; rez.xl=0; rez.xh=0; for(i=0;i<32;i++) { if(w->xl & maskl) { rez.xlA=sqw[i].xl; rez.xhA=sqw[i] .xh; } maskl«=l; } for(i=0;i<10;i++) { if(w->xh & mask2) { rez.xIA=sqw[i+32].xl; rez.xhA=sqw[i+32] .xh; } mask2«=l; > w->xl=rez.xl; w->xh=rez.xh; > void multi_xa(unsigned long *pxl,unsigned int *pxh) { if(*pxh & 0x0200) {*pxh«=l; *pxh &=0x03ff; if(*pxl & Ox80000000L) *pxhA=0x000b; else *pxhA=0x000a; *pxl«=l; *рх1А=0х8е6ГО4еіХ; } else {*pxh«=l; *pxh&=0x03ff; if(*pxl & 0x80000000L) *pxhA=Ox0001; ¦pxl«=l; > void multi_uv( REG u, REG v, REG *z) { uiti; z->xh=0; z->xl=0; for(i=0;i<32;i-H-) {if(v.xl & 0x00000001L) { z^xh^.xh; z^xl^.xl; } multi_xa(&u.xl,&u.xh); v.xl»=l; } for(i=0;i<10;i-H-) { if(v.xh & 0x0001) { z^xh^.xh; z^xl^.xl;} multi_xa(&u.xl,&u.xh); v.xh»=l; } }
Программа расчета координат сдвигов для N=48 и т=8. #include { unsigned long xl; unsigned int xh; } REG; void multi_xa(unsigned long *,unsigned *); void multi_uv( REG, REG, REG *); void qdr(REG *); static REG sqw[48]; static REG bas[270]; unsigned long maskl=l; unsigned mask2=l; char mas[510],str[9]; main() { intij,n; unsigned long 1=1; FILE *fp; unsigned int h=0; REG vr,ur,zr,vt; sqw[0].xl=l; sqw[0].xh=0; fp=fopen("gn48_8pl .txt","a"); for(i=l;i<95;i++) { multi_xa(&I,&h); /* printf("%lx\n\r",x);*/ if(!(i%2)) {sqw[i/2].xl=l; sqw[i/2].xh=h ; } } for(i=0;i<30;i++) printf("0/ox\nV\sqw[i].xh); vr.xl=2; vr.xh=0; zr.xl=2; zr.xh=0; for(n=0;n<5;n-H-) {for(i=0;i<8;i-H-) { qdr(&vr);/* printfC'rolxW.vr); */ } vt=vr; ur=zr; multi_uv(ur,vr,&zr); f* printf("%lx %lx\n\r",vt,zr);V vr=vt; } vr=zr; vt=vr; bas[0].xl=l; bas[0].xh=0; bas[l].xl=zr.xl; bas[l].xh=zr.xh; for(i=2;i<270;i-H-) { ur=zr; multi_uv(ur,vr,&zr);
bas[i].xl=zr.xl; bas[i].xh=zr.xh; vr=vt; for(i=0;i<260;i++) {fcrintf(fp,H\n\r"); fprintf(fp,"i=%-3d %4x %81x f,,i,bas[i].xh,bas[i].xl); > fprintfitfp,'^"); for(i=0;i<255;i-H-) {if(bas[i].xl & 0x0001){ mas[i]=T; mas[i+255]=T;} else { mas^O'; mas[i+255]='0';}} for(i=0;i<255;i++) {memcpy(str,mas+i,8); str^l^O'; fprintf(fp," %s %c \n\r ",str,mas[254-i]); } } void qdr(REG *w) {int і j; REG rez; maskl=l; mask2=l; rez.xl=0; rez.xh=0; for(i=0;i<32;i++) { if(w->xl&maskl) { rez.xl^sqwfij.xl; rez.xh^sqwfij.xh; } maskl«=l; } for(i=0;i<16;i-++) { if(w->xh & mask2) { rez.xlA=sqw[i+32].xl; rez.xhA=sqw[i+32].xh; } mask2«=l; } w->xl=rez.xl; w->xh=rez.xh; } void multi_xa(unsigned long *pxl,unsigned int *pxh) {if(*pxh& 0x8000) {*pxh«=l; *pxh&=0xfffi; if(*pxl & Ox80000000L) *pxhA=Ox0001; else *pxhA=0x0000; *pxl«=l; ¦рхІ^хІвОООООЗЬ;
{ *pxh«=I; *pxh &=Oxffff; if(*pxl & Ox80000000L) *pxhA=0x0001; ¦pxl«=l; } } void multi_uv( REG u, REG v, REG *z) {inti; z->xh=0; z->xl=0; for(i=0;i<32;i++) {if(v.xl & 0x00000001L) { z^xh^.xh; z^xl^.xl;} multi_xa(&u.xl,&u.xh); v.xl»=l; } for(i=0;i<16;i++) {ifl[v.xh & 0x0001) { z->xhA=u.xh; z^xl^.xl; } multi_xa(&u.xl,&u.xh); v.xh»=l; } } Программа расчета координат сдвигов для N=63 и т=3. #include unsigned long xh; } REG; void multi_xa(unsigned long unsigned long *); void multi_uv( REG, REG, REG +) ; void qdr(REG *); static REG sqw[63]; static REG bas[16J; unsigned long mask 1=1; unsigned long mask2=l; main() { intij,n; unsigned long 1=1; unsigned long h=0; REG vr,ur,zr,vt; sqw[0].xl=l; sqw[0].xh=0; for(i=l;i<125;i++) {multi_xa(&l,&h); /* printf("%lx\n\rn,x);*/ if(!(i%2)) {sqw[i/2].xl=l; sqw[i/2].xh=h ; } }
юг(і=0;і<30;і++) printf(H%x\nV\sqw[i].xh); vr.xl=2; vr.xh=0; zr.xl=2; zr.xh=0; for(n=0;n<20;n++) { for(i=0;i<3;i++) { qdr(&vr);/* printfl["%lx\nV,vr); */ } vt=vr; ur=zr; multi_uv(ur,vr,&zr); /* printf("%-lx %-lx\nV\vt,zr);V vr=vt; } vr=zr; vt=vr; bas[0].xl=Ox00000001L; bas[0].xh=OxOOOOOOOOL; bas[l].xl=zr.xl; bas[l].xh=zr.xh; for(i=2;i<16;i++) {ur=zr; multi_uv(ur,vr,&zr); bas[i].xl=zr.xl; bas[i].xh=zr.xh; vr=vt; } for(i=0;i<16;i++) printfC%8.1x %8.1x \n\r",bas[i].xh,bas[i].xl); } void qdr(REG *w) { int ij; REG rez; mask 1=1; mask2=l; rez.xl=0; rez.xh=0; for(i=0;i<32;i-H-) { if(w->xl & maskl) { rez.xlA=sqw[i].xl; rez.xhA=sqw[i] .xh; } maskl«=l; } for(i=0;i<31;i++) { if(w->xh & mask2) { rez.xlA=sqw[i+32].xl; rez.xhA=sqw[i+32].xh; } mask2«=l; } w->xl=rez.xl; w->xh=rez.xh;
void multi_xa(unsigned long *pxl,unsigned long *pxh) { if(*pxh & 0x40000000L) {*pxh«=l; *pxh&=0x7fffifffL; if(*pxl & Ox80000000L) *pxhA=0x00000001L; *pxl«=l; ¦рхІ^ОхОООООООЗЬ; } else { *pxh«=l; »pxh &=0x7fiTfiTfL; if(*pxl & Ox80000000L) *pxhA=Ox00000001L; *pxl«=l; } > void multi_uv( REG u, REG v, REG *z) {inti; z->xh=0; z->xl=0; for(i=0;i<32;i-H-) {if(v.xl & 0x00000001L) { 2->xh*«u.xh; z^xl^xl;} multi_xa(&u.xl,&u.xh); v.xl»=l; } for(i==0;i<31;i-H-) {if(v.xh & 0x00000001L) { z^xh^.xh; z->xlA=u.xl;} multi_xa(&u.xl,&u.xh); v.xh»=l; } > Программа моделирования скремблирования потока данных последовательностью GMW. длины 2^1 ^include main( ) { short p=0; intj,n,g,k=O,s=0; char b[81];
char bufI3840]; char x,y,z,gmw,cod,q,mp; /* char str[]=M01001110";*/ char strfKOOHOHO"; char tst[]="ll 110000й; char avt[]="This algorithm was designed by Evgeny Krengel unsigned long mskl[3]={0x473782e7,0xf701b3d4,0x89cfc6bd},i; unsigned int mskh[3]={0x0205,0x00f3,0x0280}; unsigned long sl,yl,zl; unsigned int s2,y2,z2; unsigned long xl=l,yl,zl,sl; unsigned int xh=0,yh,zh,sh; Ь[8О]=Л0'; /* setcolor(6);*/ textmode(C80); textbackground( 1); textcolor(14); window( 1,1,80,25); clrscrO; _setcursortype(_NOCURSOR); for(i=0;;i++) { P++; yl=xl & mskl[l]; zl=xl & mskl[2]; sh=xh & mskh[0]; yh=xh & mskh[l]; zh=xh & mskh[2]; sl=0;yl=0;zl=0; s2=0; y2=0; z2=0; for(j=0y<32y++) { sl^sl; yl^—yl; zl^zl; sl»=l; yl»=l; zl»=l; } for(j=0J<10;j-H-) { вг^п; y2A=yh; z2A=zh; sh»=l; yh»=l;
zh»=l; if(sl & 0x00000001) s2A=0x0001; s2 &=0x0001; if(yl & 0x00000001) уг^ОхОООІ; y2 &=0x0001; if(zl & 0x00000001) z2A=0x0001; z2 &=0x0001; if(xl & 0x00000001) x-T; else x=*0'; xh«=l; if(xl & Ox80000000L) {xh|=0x0001;mp=T;} else mp='0'; xl«=l; xl+=s2; /* printf("%Ix ",xl);V if(y2=l)y=T; elsey=,0'; if(z2=l)z=T; else z='0'; g=0; if(x=T) g+=4; і%=='1^+=2; if(z==T)g+=l; gmw=str[g]; if(k=8) k=0; if(tst[k]=gmw) cod='0'; else cod=T; if(i>24) { P=25; gettext(l,2,80,25,buf); puttext(l,l,80,24,buf); > gotoxy(l,p); cprintf("shift=%-121d scrambler GMW PNS %c + %c input data = coded %c output data %c i,gmw,tst[k],cod,tst[k]); k++; if(kbhitO!=0) { textbackground(O); textcolor(15); clrscrO; exit(2);} } /* _setvideomode( _DEFAULTMODE );*/ }
sl=xl & mskl[0];