Ejemplo n.º 1
0
        internal int distanciaHamming(ref BETA pData1 , ref BETA pData2)
        {
            int dist = 0;

            //Usamos la funcion completarString
            /*Console.WriteLine("TEXTO CIFRADO");
            Console.WriteLine("1.1__"+pData1.A+"  "+pData1.B+"  "+pData1.C+"  "+pData1.D);
            Console.WriteLine("2.1__"+pData2.A+"  "+pData2.B+"  "+pData2.C+"  "+pData2.D);*/

            res1 = completaString(ref pData1);
            res2 = completaString(ref pData2);

            /*Console.WriteLine("TRAS COMPLETAR STRINGS");
            Console.WriteLine("1.2__"+res1.A+"  "+res1.B+"  "+res1.C+"  "+res1.D);
            Console.WriteLine("2.2__"+res2.A+"  "+res2.B+"  "+res2.C+"  "+res2.D);*/

            return dist = calcularDist(ref res1,ref res2);
        }
Ejemplo n.º 2
0
        internal auxiliar completaString(ref BETA pData)
        {
            int tamA = 0;
            int tamB = 0;
            int tamC = 0;
            int tamD = 0;

            t.A = pData.A.ToString();
            t.B = pData.B.ToString();
            t.C = pData.C.ToString();
            t.D = pData.D.ToString();

            tamA = t.A.Length;
            tamB = t.B.Length;
            tamC = t.C.Length;
            tamD = t.D.Length;

            int diffA = 10 - tamA;
            int diffB = 10 - tamB;
            int diffC = 10 - tamC;
            int diffD = 10 - tamD;


            switch (diffA)
            {
                case 1:
                    t.A = ZERO1 + t.A;
                    break;
                case 2:
                    t.A = ZERO2 + t.A;
                    break;
                case 3:
                    t.A = ZERO3 + t.A;
                    break;
                case 4:
                    t.A = ZERO4 + t.A;
                    break;
                case 5:
                    t.A = ZERO5 + t.A;
                    break;
                case 6:
                    t.A = ZERO6 + t.A;
                    break;
                case 7:
                    t.A = ZERO7 + t.A;
                    break;
                case 8:
                    t.A = ZERO8 + t.A;
                    break;
                case 9:
                    t.A = ZERO9 + t.A;
                    break;

            }
            switch (diffB)
            {
                case 1:
                    t.B = ZERO1 + t.B;
                    break;
                case 2:
                    t.B = ZERO2 + t.B;
                    break;
                case 3:
                    t.B = ZERO3 + t.B;
                    break;
                case 4:
                    t.B = ZERO4 + t.B;
                    break;
                case 5:
                    t.B = ZERO5 + t.B;
                    break;
                case 6:
                    t.B = ZERO6 + t.B;
                    break;
                case 7:
                    t.B = ZERO7 + t.B;
                    break;
                case 8:
                    t.B = ZERO8 + t.B;
                    break;
                case 9:
                    t.B = ZERO9 + t.B;
                    break;

            }
            switch (diffC)
            {
                case 1:
                    t.C = ZERO1 + t.C;
                    break;
                case 2:
                    t.C = ZERO2 + t.C;
                    break;
                case 3:
                    t.C = ZERO3 + t.C;
                    break;
                case 4:
                    t.C = ZERO4 + t.C;
                    break;
                case 5:
                    t.C = ZERO5 + t.C;
                    break;
                case 6:
                    t.C = ZERO6 + t.C;
                    break;
                case 7:
                    t.C = ZERO7 + t.C;
                    break;
                case 8:
                    t.C = ZERO8 + t.C;
                    break;
                case 9:
                    t.C = ZERO9 + t.C;
                    break;

            }
            switch (diffD)
            {
                case 1:
                    t.D = ZERO1 + t.D;
                    break;
                case 2:
                    t.D = ZERO2 + t.D;
                    break;
                case 3:
                    t.D = ZERO3 + t.D;
                    break;
                case 4:
                    t.D = ZERO4 + t.D;
                    break;
                case 5:
                    t.D = ZERO5 + t.D;
                    break;
                case 6:
                    t.D = ZERO6 + t.D;
                    break;
                case 7:
                    t.D = ZERO7 + t.D;
                    break;
                case 8:
                    t.D = ZERO8 + t.D;
                    break;
                case 9:
                    t.D = ZERO9 + t.D;
                    break;

            }
            return t;
        }
Ejemplo n.º 3
0
        // ========================================================================
        //  Initialize the mask and rotation round subkey sets from a given user key
        // ------------------------------------------------------------------------
        internal void CAST256KeyInit(BETA[] Kr, BETA[] Km, KAPPA userKey)
        {
            for (int i = 0; i < 12; i++)
            {
                userKey = W(2 * i, userKey, g_Tr, g_Tm);
                userKey = W(2 * i + 1, userKey, g_Tr, g_Tm);

                Kr[i].A = FIVE_LSB(userKey.A);
                Kr[i].B = FIVE_LSB(userKey.C);
                Kr[i].C = FIVE_LSB(userKey.E);
                Kr[i].D = FIVE_LSB(userKey.G);

                Km[i].A = userKey.H;
                Km[i].B = userKey.F;
                Km[i].C = userKey.D;
                Km[i].D = userKey.B;
            }
        }
Ejemplo n.º 4
0
 // ========================================================================
 //  Decrypt a 128bit block
 // ------------------------------------------------------------------------
 internal void CAST256Decrypt(BETA[] Kr, BETA[] Km, ref BETA pData)
 {
     for (int i = 11; i >= 6; i--)
         pData = Q(i, pData, Kr, Km);
     for (int i = 5; i >= 0; i--)
         pData = QBAR(i, pData, Kr, Km);
 }
Ejemplo n.º 5
0
 // ========================================================================
 //  Encrypt a 128bit block
 // ------------------------------------------------------------------------
 internal void CAST256Encrypt(BETA[] Kr, BETA[] Km, ref BETA pData)
 {
     for (int i = 0; i < 6; i++)
         pData = Q(i, pData, Kr, Km);
     for (int i = 6; i < 12; i++)
         pData = QBAR(i, pData, Kr, Km);
 }
Ejemplo n.º 6
0
        BETA QBAR(int round, BETA data, BETA[] Kr, BETA[] Km)
        {
            data.D = data.D ^ f1(data.A, Kr[round].D, Km[round].D);
            data.A = data.A ^ f3(data.B, Kr[round].C, Km[round].C);
            data.B = data.B ^ f2(data.C, Kr[round].B, Km[round].B);
            data.C = data.C ^ f1(data.D, Kr[round].A, Km[round].A);

            return data;
        }