@@ -94,6 +94,27 @@ void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx)
94
94
95
95
#endif
96
96
97
+ /* This "rolls" over the 512-bit array */
98
+ #define W (x ) (array[(x)&15])
99
+
100
+ /*
101
+ * Where do we get the source from? The first 16 iterations get it from
102
+ * the input data, the next mix it from the 512-bit array.
103
+ */
104
+ #define SHA_SRC (t ) htonl(data[t])
105
+ #define SHA_MIX (t ) SHA_ROL(W(t+13) ^ W(t+8) ^ W(t+2) ^ W(t), 1)
106
+
107
+ #define SHA_ROUND (t , input , fn , constant ) \
108
+ TEMP = input(t); W(t) = TEMP; \
109
+ TEMP += SHA_ROL(A,5) + (fn) + E + (constant); \
110
+ E = D; D = C; C = SHA_ROR(B, 2); B = A; A = TEMP
111
+
112
+ #define T_0_15 (t ) SHA_ROUND(t, SHA_SRC, (((C^D)&B)^D) , 0x5a827999 )
113
+ #define T_16_19 (t ) SHA_ROUND(t, SHA_MIX, (((C^D)&B)^D) , 0x5a827999 )
114
+ #define T_20_39 (t ) SHA_ROUND(t, SHA_MIX, (B^C^D) , 0x6ed9eba1 )
115
+ #define T_40_59 (t ) SHA_ROUND(t, SHA_MIX, ((B&C)|(D&(B|C))) , 0x8f1bbcdc )
116
+ #define T_60_79 (t ) SHA_ROUND(t, SHA_MIX, (B^C^D) , 0xca62c1d6 )
117
+
97
118
static void blk_SHA1Block (blk_SHA_CTX * ctx , const unsigned int * data )
98
119
{
99
120
unsigned int A ,B ,C ,D ,E ,TEMP ;
@@ -105,53 +126,28 @@ static void blk_SHA1Block(blk_SHA_CTX *ctx, const unsigned int *data)
105
126
D = ctx -> H [3 ];
106
127
E = ctx -> H [4 ];
107
128
108
- #define T_0_15 (t ) \
109
- TEMP = htonl(data[t]); array[t] = TEMP; \
110
- TEMP += SHA_ROL(A,5) + (((C^D)&B)^D) + E + 0x5a827999; \
111
- E = D; D = C; C = SHA_ROR(B, 2); B = A; A = TEMP; \
112
-
129
+ /* Round 1 - iterations 0-16 take their input from 'data' */
113
130
T_0_15 ( 0 ); T_0_15 ( 1 ); T_0_15 ( 2 ); T_0_15 ( 3 ); T_0_15 ( 4 );
114
131
T_0_15 ( 5 ); T_0_15 ( 6 ); T_0_15 ( 7 ); T_0_15 ( 8 ); T_0_15 ( 9 );
115
132
T_0_15 (10 ); T_0_15 (11 ); T_0_15 (12 ); T_0_15 (13 ); T_0_15 (14 );
116
133
T_0_15 (15 );
117
134
118
- /* This "rolls" over the 512-bit array */
119
- #define W (x ) (array[(x)&15])
120
- #define SHA_XOR (t ) \
121
- TEMP = SHA_ROL(W(t+13) ^ W(t+8) ^ W(t+2) ^ W(t), 1); W(t) = TEMP;
122
-
123
- #define T_16_19 (t ) \
124
- SHA_XOR(t); \
125
- TEMP += SHA_ROL(A,5) + (((C^D)&B)^D) + E + 0x5a827999; \
126
- E = D; D = C; C = SHA_ROR(B, 2); B = A; A = TEMP; \
127
-
135
+ /* Round 1 - tail. Input from 512-bit mixing array */
128
136
T_16_19 (16 ); T_16_19 (17 ); T_16_19 (18 ); T_16_19 (19 );
129
137
130
- #define T_20_39 (t ) \
131
- SHA_XOR(t); \
132
- TEMP += SHA_ROL(A,5) + (B^C^D) + E + 0x6ed9eba1; \
133
- E = D; D = C; C = SHA_ROR(B, 2); B = A; A = TEMP;
134
-
138
+ /* Round 2 */
135
139
T_20_39 (20 ); T_20_39 (21 ); T_20_39 (22 ); T_20_39 (23 ); T_20_39 (24 );
136
140
T_20_39 (25 ); T_20_39 (26 ); T_20_39 (27 ); T_20_39 (28 ); T_20_39 (29 );
137
141
T_20_39 (30 ); T_20_39 (31 ); T_20_39 (32 ); T_20_39 (33 ); T_20_39 (34 );
138
142
T_20_39 (35 ); T_20_39 (36 ); T_20_39 (37 ); T_20_39 (38 ); T_20_39 (39 );
139
143
140
- #define T_40_59 (t ) \
141
- SHA_XOR(t); \
142
- TEMP += SHA_ROL(A,5) + ((B&C)|(D&(B|C))) + E + 0x8f1bbcdc; \
143
- E = D; D = C; C = SHA_ROR(B, 2); B = A; A = TEMP;
144
-
144
+ /* Round 3 */
145
145
T_40_59 (40 ); T_40_59 (41 ); T_40_59 (42 ); T_40_59 (43 ); T_40_59 (44 );
146
146
T_40_59 (45 ); T_40_59 (46 ); T_40_59 (47 ); T_40_59 (48 ); T_40_59 (49 );
147
147
T_40_59 (50 ); T_40_59 (51 ); T_40_59 (52 ); T_40_59 (53 ); T_40_59 (54 );
148
148
T_40_59 (55 ); T_40_59 (56 ); T_40_59 (57 ); T_40_59 (58 ); T_40_59 (59 );
149
149
150
- #define T_60_79 (t ) \
151
- SHA_XOR(t); \
152
- TEMP += SHA_ROL(A,5) + (B^C^D) + E + 0xca62c1d6; \
153
- E = D; D = C; C = SHA_ROR(B, 2); B = A; A = TEMP;
154
-
150
+ /* Round 4 */
155
151
T_60_79 (60 ); T_60_79 (61 ); T_60_79 (62 ); T_60_79 (63 ); T_60_79 (64 );
156
152
T_60_79 (65 ); T_60_79 (66 ); T_60_79 (67 ); T_60_79 (68 ); T_60_79 (69 );
157
153
T_60_79 (70 ); T_60_79 (71 ); T_60_79 (72 ); T_60_79 (73 ); T_60_79 (74 );
0 commit comments