<<
>>

Приложение 1 Тексты программ расчета координат векторов сдвигов генераторов ПСП GMW

Программа расчета координат сдвигов для N=8 и т=4.

#include #include static unsigned int sqw[8];

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;imulti_uv(ur,vr,&zr); printf("%x %x\nV,vt,zr); vr=vt;

}

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 void qdr(unsigned int *w) {int ij;

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 #include static unsigned int sqw[9];

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;ivoid qdr(unsigned int *w) {int і j;

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 #include static unsigned int sqw[10];

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;imulti_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<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 #include static unsigned int sqw[12];

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;ivoid qdr(unsigned int *w) { int ij;

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 #include static unsigned int sqw[14];

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;nmulti_uv(ur,vr,&zr); printf("%x %x\nV*,vt^r); vr=vt;

>

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 #include static unsigned int sqw[15]; 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= 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;ifor(n=0;n<4;n-H-) {for(i=0;i<3;i-H-) { qdr(&vr); printf("%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-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 ^include static unsigned int sqw[16];

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;ifor(n=0;n<3;n-H-) { for(i=0;i<4;i-H-) { qdr(&vr); printfCyoxVnVr"^); } vt=vr; ur=zr;

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 ^include static unsigned int sqw[16];

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;nqdr(&vr); pnntfT%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<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 #include static unsigned long sqw[20];

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;iqdr(&vr); printf("%lx\nV',vr); }

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 #include static unsigned long sqw[24];

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;imulti_uv(ur,vr,&zr); printf(,,0/olx °/olxW\vt,zr); vr=vt;

>

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 #include static unsigned long sqw[32];

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;iqdr(&vr); printf(,,0/olx\n\r",vr); }

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;ivoid qdr(unsigned long *w) {int і j;

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 #include typedef stmct data

{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 #include typedef struct data

{ 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 #include typedef struct data { unsigned long xl;

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 #include #include #include # 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++;
sl=xl & mskl[0];

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 );*/ }

<< | >>
Источник: Кренгель Евгений Ильич. ИССЛЕДОВАНИЕ И РАЗРАБОТКА НОВЫХ КЛАССОВ ПСЕВДОСЛУЧАЙНЫХ ПОСЛЕДОВАТЕЛЬНОСТЕЙ И УСТРОЙСТВ ИХ ГЕНЕРАЦИИ ДЛЯ СИСТЕМ СКОДОВЫМ РАЗДЕЛЕНИЕМ КАНАЛОВ. 2002

Еще по теме Приложение 1 Тексты программ расчета координат векторов сдвигов генераторов ПСП GMW: