Пример #1
0
 static void FT(Int32 n, ref ShaTransf t)
 {
     t.A = T32(R32(t.B, 5) + f(n, t.C, t.D, t.E) + t.T + t.W[t.idxW++] + CONST[n-1]);
     t.C = R32(t.C, 30);
 }
Пример #2
0
        private void sha_transform()
        {
            int
                i,
                idx = 0;

            ShaTransf	tf = new ShaTransf();
            tf.W = new long[80];

            /* SHA_BYTE_ORDER == 12345678 */
            //			for (i = 0; i < 16; i += 2)
            //			{
            //				tf.T = data[idx];
            //				idx += 8;
            //				tf.W[i] =  ((tf.T << 24) & 0xff000000) | ((tf.T <<  8) & 0x00ff0000) |
            //					((tf.T >>  8) & 0x0000ff00) | ((tf.T >> 24) & 0x000000ff);
            //				tf.T >>= 32;
            //				tf.W[i+1] = ((tf.T << 24) & 0xff000000) | ((tf.T <<  8) & 0x00ff0000) |
            //					((tf.T >>  8) & 0x0000ff00) | ((tf.T >> 24) & 0x000000ff);
            //			}

            /* SHA_BYTE_ORDER == 1234 */
            for (i = 0; i < 16; ++i)
            {
                tf.T = ((long) data[idx++]) & 0x000000ff;
                tf.T += (((long) data[idx++]) << 8) & 0x0000ff00;
                tf.T += (((long) data[idx++]) << 16) & 0x00ff0000;
                tf.T += (((long) data[idx++]) << 24) & 0xff000000;

                tf.W[i] = ((tf.T << 24) & 0xff000000) | ((tf.T <<  8) & 0x00ff0000) |
                          ((tf.T >>  8) & 0x0000ff00) | ((tf.T >> 24) & 0x000000ff);
            }

            for (i = 16; i < 80; ++i)
            {
                tf.W[i] = tf.W[i-3] ^ tf.W[i-8] ^ tf.W[i-14] ^ tf.W[i-16];
                tf.W[i] = R32(tf.W[i], 1);
            }

            tf.A = digest[0];
            tf.B = digest[1];
            tf.C = digest[2];
            tf.D = digest[3];
            tf.E = digest[4];
            tf.idxW = 0;

            // UNRAVEL
            FA(1, ref tf); FB(1, ref tf); FC(1, ref tf); FD(1, ref tf); FE(1, ref tf); FT(1, ref tf); FA(1, ref tf); FB(1, ref tf); FC(1, ref tf); FD(1, ref tf);
            FE(1, ref tf); FT(1, ref tf); FA(1, ref tf); FB(1, ref tf); FC(1, ref tf); FD(1, ref tf); FE(1, ref tf); FT(1, ref tf); FA(1, ref tf); FB(1, ref tf);
            FC(2, ref tf); FD(2, ref tf); FE(2, ref tf); FT(2, ref tf); FA(2, ref tf); FB(2, ref tf); FC(2, ref tf); FD(2, ref tf); FE(2, ref tf); FT(2, ref tf);
            FA(2, ref tf); FB(2, ref tf); FC(2, ref tf); FD(2, ref tf); FE(2, ref tf); FT(2, ref tf); FA(2, ref tf); FB(2, ref tf); FC(2, ref tf); FD(2, ref tf);
            FE(3, ref tf); FT(3, ref tf); FA(3, ref tf); FB(3, ref tf); FC(3, ref tf); FD(3, ref tf); FE(3, ref tf); FT(3, ref tf); FA(3, ref tf); FB(3, ref tf);
            FC(3, ref tf); FD(3, ref tf); FE(3, ref tf); FT(3, ref tf); FA(3, ref tf); FB(3, ref tf); FC(3, ref tf); FD(3, ref tf); FE(3, ref tf); FT(3, ref tf);
            FA(4, ref tf); FB(4, ref tf); FC(4, ref tf); FD(4, ref tf); FE(4, ref tf); FT(4, ref tf); FA(4, ref tf); FB(4, ref tf); FC(4, ref tf); FD(4, ref tf);
            FE(4, ref tf); FT(4, ref tf); FA(4, ref tf); FB(4, ref tf); FC(4, ref tf); FD(4, ref tf); FE(4, ref tf); FT(4, ref tf); FA(4, ref tf); FB(4, ref tf);
            digest[0] = T32(digest[0] + tf.E);
            digest[1] = T32(digest[1] + tf.T);
            digest[2] = T32(digest[2] + tf.A);
            digest[3] = T32(digest[3] + tf.B);
            digest[4] = T32(digest[4] + tf.C);
        }
Пример #3
0
 static void FE(Int32 n, ref ShaTransf t)
 {
     t.B = T32(R32(t.C, 5) + f(n, t.D, t.E, t.T) + t.A + t.W[t.idxW++] + CONST[n-1]);
     t.D = R32(t.D,30);
 }
Пример #4
0
 static void FD(Int32 n, ref ShaTransf t)
 {
     t.C = T32(R32(t.D, 5) + f(n, t.E, t.T, t.A) + t.B + t.W[t.idxW++] + CONST[n-1]);
     t.E = R32(t.E, 30);
 }
Пример #5
0
 static void FC(Int32 n, ref ShaTransf t)
 {
     t.D = T32(R32(t.E, 5) + f(n, t.T, t.A, t.B) + t.C + t.W[t.idxW++] + CONST[n-1]);
     t.T = R32(t.T,30);
 }
Пример #6
0
 static void FB(Int32 n, ref ShaTransf t)
 {
     t.E = T32(R32(t.T,5) + f(n, t.A, t.B, t.C) + t.D + t.W[t.idxW++] + CONST[n-1]);
     t.A = R32(t.A,30);
 }
Пример #7
0
 static void FA(Int32 n, ref ShaTransf t)
 {
     t.T = T32(R32(t.A, 5) + f(n, t.B, t.C, t.D) + t.E + t.W[t.idxW++] + CONST[n-1]);
     t.B = R32(t.B,30);
 }