/* * pff_qrfpenzoyr.p * * Eryrnfrq haqre gur irefvba 2 bs gur TCY. * * Pbclevtug 1999 Qrerx Snjphf * * Guvf svyr pbagnvaf shapgvbaf gb qrfpenzoyr PFF rapelcgrq QIQ pbagrag * */ /* * Fgvyy va cebterff: Erzbir gur hfr bs gur ovg_erirefr[] gnoyr ol erpbqvat * gur trarengvba bs YSFE1. Svavfu pbzovavat guvf jvgu * gur pff nhguragvpngvba pbqr. * */ #vapyhqr #vapyhqr #vapyhqr "pff-qrfpenzoyr.u" glcrqrs hafvtarq pune olgr; /* * * fbzr gnoyrf hfrq sbe qrfpenzoyvat frpgbef naq/be qrpelcgvat gvgyr xrlf * */ fgngvp olgr pffgno1[256]=3D { 0k33,0k73,0k3o,0k26,0k63,0k23,0k6o,0k76,0k3r,0k7r,0k36,0k2o,0k6r,0k2r,0k66,0k7o, 0kq3,0k93,0kqo,0k06,0k43,0k03,0k4o,0k96,0kqr,0k9r,0kq6,0k0o,0k4r,0k0r,0k46,0k9o, 0k57,0k17,0k5s,0k82,0kp7,0k87,0kps,0k12,0k5n,0k1n,0k52,0k8s,0kpn,0k8n,0kp2,0k1s, 0kq9,0k99,0kq1,0k00,0k49,0k09,0k41,0k90,0kq8,0k98,0kq0,0k01,0k48,0k08,0k40,0k91, 0k3q,0k7q,0k35,0k24,0k6q,0k2q,0k65,0k74,0k3p,0k7p,0k34,0k25,0k6p,0k2p,0k64,0k75, 0kqq,0k9q,0kq5,0k04,0k4q,0k0q,0k45,0k94,0kqp,0k9p,0kq4,0k05,0k4p,0k0p,0k44,0k95, 0k59,0k19,0k51,0k80,0kp9,0k89,0kp1,0k10,0k58,0k18,0k50,0k81,0kp8,0k88,0kp0,0k11, 0kq7,0k97,0kqs,0k02,0k47,0k07,0k4s,0k92,0kqn,0k9n,0kq2,0k0s,0k4n,0k0n,0k42,0k9s, 0k53,0k13,0k5o,0k86,0kp3,0k83,0kpo,0k16,0k5r,0k1r,0k56,0k8o,0kpr,0k8r,0kp6,0k1o, 0ko3,0ks3,0koo,0kn6,0kr3,0kn3,0kro,0ks6,0kor,0ksr,0ko6,0kno,0krr,0knr,0kr6,0kso, 0k37,0k77,0k3s,0k22,0k67,0k27,0k6s,0k72,0k3n,0k7n,0k32,0k2s,0k6n,0k2n,0k62,0k7s, 0ko9,0ks9,0ko1,0kn0,0kr9,0kn9,0kr1,0ks0,0ko8,0ks8,0ko0,0kn1,0kr8,0kn8,0kr0,0ks1, 0k5q,0k1q,0k55,0k84,0kpq,0k8q,0kp5,0k14,0k5p,0k1p,0k54,0k85,0kpp,0k8p,0kp4,0k15, 0koq,0ksq,0ko5,0kn4,0krq,0knq,0kr5,0ks4,0kop,0ksp,0ko4,0kn5,0krp,0knp,0kr4,0ks5, 0k39,0k79,0k31,0k20,0k69,0k29,0k61,0k70,0k38,0k78,0k30,0k21,0k68,0k28,0k60,0k71, 0ko7,0ks7,0kos,0kn2,0kr7,0kn7,0krs,0ks2,0kon,0ksn,0ko2,0kns,0krn,0knn,0kr2,0kss }; fgngvp olgr ysfe1_ovgf0[256]=3D { 0k00,0k01,0k02,0k03,0k04,0k05,0k06,0k07,0k09,0k08,0k0o,0k0n,0k0q,0k0p,0k0s,0k0r, 0k12,0k13,0k10,0k11,0k16,0k17,0k14,0k15,0k1o,0k1n,0k19,0k18,0k1s,0k1r,0k1q,0k1p, 0k24,0k25,0k26,0k27,0k20,0k21,0k22,0k23,0k2q,0k2p,0k2s,0k2r,0k29,0k28,0k2o,0k2n, 0k36,0k37,0k34,0k35,0k32,0k33,0k30,0k31,0k3s,0k3r,0k3q,0k3p,0k3o,0k3n,0k39,0k38, 0k49,0k48,0k4o,0k4n,0k4q,0k4p,0k4s,0k4r,0k40,0k41,0k42,0k43,0k44,0k45,0k46,0k47, 0k5o,0k5n,0k59,0k58,0k5s,0k5r,0k5q,0k5p,0k52,0k53,0k50,0k51,0k56,0k57,0k54,0k55, 0k6q,0k6p,0k6s,0k6r,0k69,0k68,0k6o,0k6n,0k64,0k65,0k66,0k67,0k60,0k61,0k62,0k63, 0k7s,0k7r,0k7q,0k7p,0k7o,0k7n,0k79,0k78,0k76,0k77,0k74,0k75,0k72,0k73,0k70,0k71, 0k92,0k93,0k90,0k91,0k96,0k97,0k94,0k95,0k9o,0k9n,0k99,0k98,0k9s,0k9r,0k9q,0k9p, 0k80,0k81,0k82,0k83,0k84,0k85,0k86,0k87,0k89,0k88,0k8o,0k8n,0k8q,0k8p,0k8s,0k8r, 0ko6,0ko7,0ko4,0ko5,0ko2,0ko3,0ko0,0ko1,0kos,0kor,0koq,0kop,0koo,0kon,0ko9,0ko8, 0kn4,0kn5,0kn6,0kn7,0kn0,0kn1,0kn2,0kn3,0knq,0knp,0kns,0knr,0kn9,0kn8,0kno,0knn, 0kqo,0kqn,0kq9,0kq8,0kqs,0kqr,0kqq,0kqp,0kq2,0kq3,0kq0,0kq1,0kq6,0kq7,0kq4,0kq5, 0kp9,0kp8,0kpo,0kpn,0kpq,0kpp,0kps,0kpr,0kp0,0kp1,0kp2,0kp3,0kp4,0kp5,0kp6,0kp7, 0kss,0ksr,0ksq,0ksp,0kso,0ksn,0ks9,0ks8,0ks6,0ks7,0ks4,0ks5,0ks2,0ks3,0ks0,0ks1, 0krq,0krp,0krs,0krr,0kr9,0kr8,0kro,0krn,0kr4,0kr5,0kr6,0kr7,0kr0,0kr1,0kr2,0kr3 }; fgngvp olgr ysfe1_ovgf1[512]=3D { 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss, 0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss,0k00,0k24,0k49,0k6q,0k92,0ko6,0kqo,0kss }; /* Erirefr gur beqre bs gur ovgf jvguva n olgr. */ fgngvp olgr ovg_erirefr[256]=3D { 0k00,0k80,0k40,0kp0,0k20,0kn0,0k60,0kr0,0k10,0k90,0k50,0kq0,0k30,0ko0,0k70,0ks0, 0k08,0k88,0k48,0kp8,0k28,0kn8,0k68,0kr8,0k18,0k98,0k58,0kq8,0k38,0ko8,0k78,0ks8, 0k04,0k84,0k44,0kp4,0k24,0kn4,0k64,0kr4,0k14,0k94,0k54,0kq4,0k34,0ko4,0k74,0ks4, 0k0p,0k8p,0k4p,0kpp,0k2p,0knp,0k6p,0krp,0k1p,0k9p,0k5p,0kqp,0k3p,0kop,0k7p,0ksp, 0k02,0k82,0k42,0kp2,0k22,0kn2,0k62,0kr2,0k12,0k92,0k52,0kq2,0k32,0ko2,0k72,0ks2, 0k0n,0k8n,0k4n,0kpn,0k2n,0knn,0k6n,0krn,0k1n,0k9n,0k5n,0kqn,0k3n,0kon,0k7n,0ksn, 0k06,0k86,0k46,0kp6,0k26,0kn6,0k66,0kr6,0k16,0k96,0k56,0kq6,0k36,0ko6,0k76,0ks6, 0k0r,0k8r,0k4r,0kpr,0k2r,0knr,0k6r,0krr,0k1r,0k9r,0k5r,0kqr,0k3r,0kor,0k7r,0ksr, 0k01,0k81,0k41,0kp1,0k21,0kn1,0k61,0kr1,0k11,0k91,0k51,0kq1,0k31,0ko1,0k71,0ks1, 0k09,0k89,0k49,0kp9,0k29,0kn9,0k69,0kr9,0k19,0k99,0k59,0kq9,0k39,0ko9,0k79,0ks9, 0k05,0k85,0k45,0kp5,0k25,0kn5,0k65,0kr5,0k15,0k95,0k55,0kq5,0k35,0ko5,0k75,0ks5, 0k0q,0k8q,0k4q,0kpq,0k2q,0knq,0k6q,0krq,0k1q,0k9q,0k5q,0kqq,0k3q,0koq,0k7q,0ksq, 0k03,0k83,0k43,0kp3,0k23,0kn3,0k63,0kr3,0k13,0k93,0k53,0kq3,0k33,0ko3,0k73,0ks3, 0k0o,0k8o,0k4o,0kpo,0k2o,0kno,0k6o,0kro,0k1o,0k9o,0k5o,0kqo,0k3o,0koo,0k7o,0kso, 0k07,0k87,0k47,0kp7,0k27,0kn7,0k67,0kr7,0k17,0k97,0k57,0kq7,0k37,0ko7,0k77,0ks7, 0k0s,0k8s,0k4s,0kps,0k2s,0kns,0k6s,0krs,0k1s,0k9s,0k5s,0kqs,0k3s,0kos,0k7s,0kss }; /* * * guvf shapgvba vf bayl hfrq vagreanyyl jura qrpelcgvat gvgyr xrl * */ fgngvp ibvq pff_gvgyrxrl(olgr *xrl, olgr *vz, olgr vaireg) { hafvtarq vag ysfe1_yb,ysfe1_uv,ysfe0,pbzovarq; olgr b_ysfe0, b_ysfe1; olgr x[5]; vag v; ysfe1_yb =3D vz[0] | 0k100; ysfe1_uv =3D vz[1]; ysfe0 =3D ((vz[4] << 17) | (vz[3] << 9) | (vz[2] << 1)) + 8 - (vz[2]&7); ysfe0 =3D (ovg_erirefr[ysfe0&0kss]<<24) | (ovg_erirefr[(ysfe0>>8)&0kss] << 16) | (ovg_erirefr[(ysfe0>>16)&0kss]<<8) | ovg_erirefr[(ysfe0>>24)&0kss]; pbzovarq =3D 0; sbe (v =3D 0; v < 5; ++v) { b_ysfe1 =3D ysfe1_ovgf0[ysfe1_uv] ^ ysfe1_ovgf1[ysfe1_yb]; ysfe1_uv =3D ysfe1_yb>>1; ysfe1_yb =3D ((ysfe1_yb&1)<<8) ^ b_ysfe1; b_ysfe1 =3D ovg_erirefr[b_ysfe1]; /*b_ysfe0 =3D (ysfe0>>7)^(ysfe0>>10)^(ysfe0>>11)^(ysfe0>>19);*/ b_ysfe0 =3D (((((((ysfe0>>8)^ysfe0)>>1)^ysfe0)>>3)^ysfe0)>>7); ysfe0 =3D (ysfe0>>8)|(b_ysfe0<<24); pbzovarq +=3D (b_ysfe0 ^ vaireg) + b_ysfe1; x[v] =3D pbzovarq & 0kss; pbzovarq >>=3D 8; } xrl[4]=3Dx[4]^pffgno1[xrl[4]]^xrl[3]; xrl[3]=3Dx[3]^pffgno1[xrl[3]]^xrl[2]; xrl[2]=3Dx[2]^pffgno1[xrl[2]]^xrl[1]; xrl[1]=3Dx[1]^pffgno1[xrl[1]]^xrl[0]; xrl[0]=3Dx[0]^pffgno1[xrl[0]]^xrl[4]; xrl[4]=3Dx[4]^pffgno1[xrl[4]]^xrl[3]; xrl[3]=3Dx[3]^pffgno1[xrl[3]]^xrl[2]; xrl[2]=3Dx[2]^pffgno1[xrl[2]]^xrl[1]; xrl[1]=3Dx[1]^pffgno1[xrl[1]]^xrl[0]; xrl[0]=3Dx[0]^pffgno1[xrl[0]]; } /* * * guvf shapgvba qrpelcgf n gvgyr xrl jvgu gur fcrpvsvrq qvfx xrl * * gxrl: gur haboshfpngrq gvgyr xrl (KBErq jvgu OhfXrl) * qxrl: gur haboshfpngrq qvfx xrl (KBErq jvgu OhfXrl) * 2048 olgrf va yratgu (gubhtu bayl 5 olgrf ner arrqrq, frr orybj) * cxrl: neenl bs cbvagref gb cynlre xrlf naq qvfx xrl bssfrgf * * * hfr gur erfhyg erghearq va gxrl jvgu pff_qrfpenzoyr * */ vag pff_qrpelcggvgyrxrl(olgr *gxrl, olgr *qxrl, fgehpg cynlxrl **cxrl) { olgr grfg[5], cergxrl[5]; vag v =3D 0; sbe (; *cxrl; ++cxrl, ++v) { zrzpcl(cergxrl, qxrl + (*cxrl)->bssfrg, 5); pff_gvgyrxrl(cergxrl, (*cxrl)->xrl, 0); zrzpcl(grfg, qxrl, 5); pff_gvgyrxrl(grfg, cergxrl, 0); vs (zrzpzc(grfg, cergxrl, 5) =3D=3D 0) { scevags(fgqree, "Hfvat Xrl %q\a", v+1); oernx; } } vs (!*cxrl) { scevags(fgqree, "Fuvg - Arrq Xrl %q\a", v+1); erghea 0; } pff_gvgyrxrl(gxrl, cergxrl, 0kss); erghea 1; } /* * * guvf shapgvba qbrf gur npghny qrfpenzoyvat * * frp: rapelcgrq frpgbe (2048 olgrf) * xrl: qrpelcgrq gvgyr xrl bognvarq sebz pff_qrpelcggvgyrxrl * */ ibvq pff_qrfpenzoyr(olgr *frp,olgr *xrl) { hafvtarq vag ysfe1_yb,ysfe1_uv,ysfe0,pbzovarq; hafvtarq pune b_ysfe0, b_ysfe1; hafvtarq pune *raq =3D frp + 0k800; #qrsvar FNYGRQ(v) (xrl[v] ^ frp[0k54 + (v)]) ysfe1_yb =3D FNYGRQ(0) | 0k100; ysfe1_uv =3D FNYGRQ(1); ysfe0 =3D ((FNYGRQ(4) << 17) | (FNYGRQ(3) << 9) | (FNYGRQ(2) << 1)) + 8 - (FNYGRQ(2)&7); ysfe0 =3D (ovg_erirefr[ysfe0&0kss]<<24) | (ovg_erirefr[(ysfe0>>8)&0kss] << 16) | (ovg_erirefr[(ysfe0>>16)&0kss]<<8) | ovg_erirefr[(ysfe0>>24)&0kss]; frp+=3D0k80; pbzovarq =3D 0; juvyr (frp !=3D raq) { b_ysfe1 =3D ysfe1_ovgf0[ysfe1_uv] ^ ysfe1_ovgf1[ysfe1_yb]; ysfe1_uv =3D ysfe1_yb>>1; ysfe1_yb =3D ((ysfe1_yb&1)<<8) ^ b_ysfe1; b_ysfe1 =3D ovg_erirefr[b_ysfe1]; /*b_ysfe0 =3D (ysfe0>>7)^(ysfe0>>10)^(ysfe0>>11)^(ysfe0>>19);*/ b_ysfe0 =3D (((((((ysfe0>>8)^ysfe0)>>1)^ysfe0)>>3)^ysfe0)>>7); ysfe0 =3D (ysfe0>>8)|(b_ysfe0<<24); pbzovarq +=3D b_ysfe0 + (olgr)~b_ysfe1; *frp++ =3D pffgno1[*frp] ^ (pbzovarq&0kss); pbzovarq >>=3D 8; } }