Annotation of truecrypt/crypto/sha.c, revision 1.1

1.1     ! root        1: /* Implementation of NIST's Secure Hash Algorithm (FIPS 180) Lightly bummed
        !             2:    for execution efficiency.
        !             3: 
        !             4: Jim Gillogly 3 May 1993
        !             5: 
        !             6: Copyright 1993, Dr. James J. Gillogly This code may be freely used in any
        !             7:    application. */
        !             8: 
        !             9: 
        !            10: #include <memory.h>
        !            11: #include "sha.h"
        !            12: 
        !            13: #pragma intrinsic(memcpy)
        !            14: 
        !            15: #define f0(x,y,z) (z ^ (x & (y ^ z)))  /* Magic functions */
        !            16: #define f1(x,y,z) (x ^ y ^ z)
        !            17: #define f2(x,y,z) ((x & y) | (z & (x | y)))
        !            18: #define f3(x,y,z) (x ^ y ^ z)
        !            19: 
        !            20: #define K0 0x5a827999          /* Magic constants */
        !            21: #define K1 0x6ed9eba1
        !            22: #define K2 0x8f1bbcdc
        !            23: #define K3 0xca62c1d6
        !            24: 
        !            25: #define S(n, X) ((X << n) | (X >> (32 - n)))   /* Barrel roll */
        !            26: 
        !            27: #define r0(f, K) \
        !            28:     temp = S(5, A) + f(B, C, D) + E + *p0++ + K; \
        !            29:     E = D;  \
        !            30:     D = C;  \
        !            31:     C = S(30, B); \
        !            32:     B = A;  \
        !            33:     A = temp
        !            34: 
        !            35: #define r1_0(f, K) \
        !            36:     temp = S(5, A) + f(B, C, D) + E + \
        !            37:           (*p0++ = *p1++ ^ *p2++ ^ *p3++ ^ *p4++) + K; \
        !            38:     E = D;  \
        !            39:     D = C;  \
        !            40:     C = S(30, B); \
        !            41:     B = A;  \
        !            42:     A = temp
        !            43: 
        !            44: void
        !            45: _cdecl ShaTransform0 (unsigned long *hash, unsigned long *data)        /* NIST original */
        !            46: {
        !            47:   unsigned long W[80];
        !            48: 
        !            49:   unsigned long *p0, *p1, *p2, *p3, *p4;
        !            50:   unsigned long A, B, C, D, E, temp;
        !            51: 
        !            52:   unsigned long h0, h1, h2, h3, h4;
        !            53: 
        !            54:   h0 = hash[0];
        !            55:   h1 = hash[1];
        !            56:   h2 = hash[2];
        !            57:   h3 = hash[3];
        !            58:   h4 = hash[4];
        !            59: 
        !            60:   memcpy (W, data, 64);
        !            61: 
        !            62:   p0 = W;
        !            63:   A = h0;
        !            64:   B = h1;
        !            65:   C = h2;
        !            66:   D = h3;
        !            67:   E = h4;
        !            68: 
        !            69:   r0 (f0, K0);
        !            70:   r0 (f0, K0);
        !            71:   r0 (f0, K0);
        !            72:   r0 (f0, K0);
        !            73:   r0 (f0, K0);
        !            74:   r0 (f0, K0);
        !            75:   r0 (f0, K0);
        !            76:   r0 (f0, K0);
        !            77:   r0 (f0, K0);
        !            78:   r0 (f0, K0);
        !            79:   r0 (f0, K0);
        !            80:   r0 (f0, K0);
        !            81:   r0 (f0, K0);
        !            82:   r0 (f0, K0);
        !            83:   r0 (f0, K0);
        !            84:   r0 (f0, K0);
        !            85: 
        !            86:   p1 = &W[13];
        !            87:   p2 = &W[8];
        !            88:   p3 = &W[2];
        !            89:   p4 = &W[0];
        !            90: 
        !            91:   r1_0 (f0, K0);
        !            92:   r1_0 (f0, K0);
        !            93:   r1_0 (f0, K0);
        !            94:   r1_0 (f0, K0);
        !            95:   r1_0 (f1, K1);
        !            96:   r1_0 (f1, K1);
        !            97:   r1_0 (f1, K1);
        !            98:   r1_0 (f1, K1);
        !            99:   r1_0 (f1, K1);
        !           100:   r1_0 (f1, K1);
        !           101:   r1_0 (f1, K1);
        !           102:   r1_0 (f1, K1);
        !           103:   r1_0 (f1, K1);
        !           104:   r1_0 (f1, K1);
        !           105:   r1_0 (f1, K1);
        !           106:   r1_0 (f1, K1);
        !           107:   r1_0 (f1, K1);
        !           108:   r1_0 (f1, K1);
        !           109:   r1_0 (f1, K1);
        !           110:   r1_0 (f1, K1);
        !           111:   r1_0 (f1, K1);
        !           112:   r1_0 (f1, K1);
        !           113:   r1_0 (f1, K1);
        !           114:   r1_0 (f1, K1);
        !           115:   r1_0 (f2, K2);
        !           116:   r1_0 (f2, K2);
        !           117:   r1_0 (f2, K2);
        !           118:   r1_0 (f2, K2);
        !           119:   r1_0 (f2, K2);
        !           120:   r1_0 (f2, K2);
        !           121:   r1_0 (f2, K2);
        !           122:   r1_0 (f2, K2);
        !           123:   r1_0 (f2, K2);
        !           124:   r1_0 (f2, K2);
        !           125:   r1_0 (f2, K2);
        !           126:   r1_0 (f2, K2);
        !           127:   r1_0 (f2, K2);
        !           128:   r1_0 (f2, K2);
        !           129:   r1_0 (f2, K2);
        !           130:   r1_0 (f2, K2);
        !           131:   r1_0 (f2, K2);
        !           132:   r1_0 (f2, K2);
        !           133:   r1_0 (f2, K2);
        !           134:   r1_0 (f2, K2);
        !           135:   r1_0 (f3, K3);
        !           136:   r1_0 (f3, K3);
        !           137:   r1_0 (f3, K3);
        !           138:   r1_0 (f3, K3);
        !           139:   r1_0 (f3, K3);
        !           140:   r1_0 (f3, K3);
        !           141:   r1_0 (f3, K3);
        !           142:   r1_0 (f3, K3);
        !           143:   r1_0 (f3, K3);
        !           144:   r1_0 (f3, K3);
        !           145:   r1_0 (f3, K3);
        !           146:   r1_0 (f3, K3);
        !           147:   r1_0 (f3, K3);
        !           148:   r1_0 (f3, K3);
        !           149:   r1_0 (f3, K3);
        !           150:   r1_0 (f3, K3);
        !           151:   r1_0 (f3, K3);
        !           152:   r1_0 (f3, K3);
        !           153:   r1_0 (f3, K3);
        !           154:   r1_0 (f3, K3);
        !           155: 
        !           156:   h0 += A;
        !           157:   h1 += B;
        !           158:   h2 += C;
        !           159:   h3 += D;
        !           160:   h4 += E;
        !           161: 
        !           162:   hash[0] = h0;
        !           163:   hash[1] = h1;
        !           164:   hash[2] = h2;
        !           165:   hash[3] = h3;
        !           166:   hash[4] = h4;
        !           167: }
        !           168: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.