Annotation of truecrypt/crypto/sha.c, revision 1.1.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.