2 * Author......: Jens Steube <jens.steube@gmail.com>
6 void sha1_64 (uint block
[16], uint digest
[5])
31 #define SHA1_F0(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
32 #define SHA1_F1(x,y,z) ((x) ^ (y) ^ (z))
33 #define SHA1_F2(x,y,z) (((x) & (y)) | ((z) & ((x) ^ (y))))
35 #define SHA1_STEP(f,a,b,c,d,e,x) \
40 e += rotl32 (a, 5u); \
41 b = rotl32 (b, 30u); \
47 SHA1_STEP (SHA1_F0
, A
, B
, C
, D
, E
, w0_t
);
48 SHA1_STEP (SHA1_F0
, E
, A
, B
, C
, D
, w1_t
);
49 SHA1_STEP (SHA1_F0
, D
, E
, A
, B
, C
, w2_t
);
50 SHA1_STEP (SHA1_F0
, C
, D
, E
, A
, B
, w3_t
);
51 SHA1_STEP (SHA1_F0
, B
, C
, D
, E
, A
, w4_t
);
52 SHA1_STEP (SHA1_F0
, A
, B
, C
, D
, E
, w5_t
);
53 SHA1_STEP (SHA1_F0
, E
, A
, B
, C
, D
, w6_t
);
54 SHA1_STEP (SHA1_F0
, D
, E
, A
, B
, C
, w7_t
);
55 SHA1_STEP (SHA1_F0
, C
, D
, E
, A
, B
, w8_t
);
56 SHA1_STEP (SHA1_F0
, B
, C
, D
, E
, A
, w9_t
);
57 SHA1_STEP (SHA1_F0
, A
, B
, C
, D
, E
, wa_t
);
58 SHA1_STEP (SHA1_F0
, E
, A
, B
, C
, D
, wb_t
);
59 SHA1_STEP (SHA1_F0
, D
, E
, A
, B
, C
, wc_t
);
60 SHA1_STEP (SHA1_F0
, C
, D
, E
, A
, B
, wd_t
);
61 SHA1_STEP (SHA1_F0
, B
, C
, D
, E
, A
, we_t
);
62 SHA1_STEP (SHA1_F0
, A
, B
, C
, D
, E
, wf_t
);
63 w0_t
= rotl32 ((wd_t
^ w8_t
^ w2_t
^ w0_t
), 1u); SHA1_STEP (SHA1_F0
, E
, A
, B
, C
, D
, w0_t
);
64 w1_t
= rotl32 ((we_t
^ w9_t
^ w3_t
^ w1_t
), 1u); SHA1_STEP (SHA1_F0
, D
, E
, A
, B
, C
, w1_t
);
65 w2_t
= rotl32 ((wf_t
^ wa_t
^ w4_t
^ w2_t
), 1u); SHA1_STEP (SHA1_F0
, C
, D
, E
, A
, B
, w2_t
);
66 w3_t
= rotl32 ((w0_t
^ wb_t
^ w5_t
^ w3_t
), 1u); SHA1_STEP (SHA1_F0
, B
, C
, D
, E
, A
, w3_t
);
71 w4_t
= rotl32 ((w1_t
^ wc_t
^ w6_t
^ w4_t
), 1u); SHA1_STEP (SHA1_F1
, A
, B
, C
, D
, E
, w4_t
);
72 w5_t
= rotl32 ((w2_t
^ wd_t
^ w7_t
^ w5_t
), 1u); SHA1_STEP (SHA1_F1
, E
, A
, B
, C
, D
, w5_t
);
73 w6_t
= rotl32 ((w3_t
^ we_t
^ w8_t
^ w6_t
), 1u); SHA1_STEP (SHA1_F1
, D
, E
, A
, B
, C
, w6_t
);
74 w7_t
= rotl32 ((w4_t
^ wf_t
^ w9_t
^ w7_t
), 1u); SHA1_STEP (SHA1_F1
, C
, D
, E
, A
, B
, w7_t
);
75 w8_t
= rotl32 ((w5_t
^ w0_t
^ wa_t
^ w8_t
), 1u); SHA1_STEP (SHA1_F1
, B
, C
, D
, E
, A
, w8_t
);
76 w9_t
= rotl32 ((w6_t
^ w1_t
^ wb_t
^ w9_t
), 1u); SHA1_STEP (SHA1_F1
, A
, B
, C
, D
, E
, w9_t
);
77 wa_t
= rotl32 ((w7_t
^ w2_t
^ wc_t
^ wa_t
), 1u); SHA1_STEP (SHA1_F1
, E
, A
, B
, C
, D
, wa_t
);
78 wb_t
= rotl32 ((w8_t
^ w3_t
^ wd_t
^ wb_t
), 1u); SHA1_STEP (SHA1_F1
, D
, E
, A
, B
, C
, wb_t
);
79 wc_t
= rotl32 ((w9_t
^ w4_t
^ we_t
^ wc_t
), 1u); SHA1_STEP (SHA1_F1
, C
, D
, E
, A
, B
, wc_t
);
80 wd_t
= rotl32 ((wa_t
^ w5_t
^ wf_t
^ wd_t
), 1u); SHA1_STEP (SHA1_F1
, B
, C
, D
, E
, A
, wd_t
);
81 we_t
= rotl32 ((wb_t
^ w6_t
^ w0_t
^ we_t
), 1u); SHA1_STEP (SHA1_F1
, A
, B
, C
, D
, E
, we_t
);
82 wf_t
= rotl32 ((wc_t
^ w7_t
^ w1_t
^ wf_t
), 1u); SHA1_STEP (SHA1_F1
, E
, A
, B
, C
, D
, wf_t
);
83 w0_t
= rotl32 ((wd_t
^ w8_t
^ w2_t
^ w0_t
), 1u); SHA1_STEP (SHA1_F1
, D
, E
, A
, B
, C
, w0_t
);
84 w1_t
= rotl32 ((we_t
^ w9_t
^ w3_t
^ w1_t
), 1u); SHA1_STEP (SHA1_F1
, C
, D
, E
, A
, B
, w1_t
);
85 w2_t
= rotl32 ((wf_t
^ wa_t
^ w4_t
^ w2_t
), 1u); SHA1_STEP (SHA1_F1
, B
, C
, D
, E
, A
, w2_t
);
86 w3_t
= rotl32 ((w0_t
^ wb_t
^ w5_t
^ w3_t
), 1u); SHA1_STEP (SHA1_F1
, A
, B
, C
, D
, E
, w3_t
);
87 w4_t
= rotl32 ((w1_t
^ wc_t
^ w6_t
^ w4_t
), 1u); SHA1_STEP (SHA1_F1
, E
, A
, B
, C
, D
, w4_t
);
88 w5_t
= rotl32 ((w2_t
^ wd_t
^ w7_t
^ w5_t
), 1u); SHA1_STEP (SHA1_F1
, D
, E
, A
, B
, C
, w5_t
);
89 w6_t
= rotl32 ((w3_t
^ we_t
^ w8_t
^ w6_t
), 1u); SHA1_STEP (SHA1_F1
, C
, D
, E
, A
, B
, w6_t
);
90 w7_t
= rotl32 ((w4_t
^ wf_t
^ w9_t
^ w7_t
), 1u); SHA1_STEP (SHA1_F1
, B
, C
, D
, E
, A
, w7_t
);
95 w8_t
= rotl32 ((w5_t
^ w0_t
^ wa_t
^ w8_t
), 1u); SHA1_STEP (SHA1_F2
, A
, B
, C
, D
, E
, w8_t
);
96 w9_t
= rotl32 ((w6_t
^ w1_t
^ wb_t
^ w9_t
), 1u); SHA1_STEP (SHA1_F2
, E
, A
, B
, C
, D
, w9_t
);
97 wa_t
= rotl32 ((w7_t
^ w2_t
^ wc_t
^ wa_t
), 1u); SHA1_STEP (SHA1_F2
, D
, E
, A
, B
, C
, wa_t
);
98 wb_t
= rotl32 ((w8_t
^ w3_t
^ wd_t
^ wb_t
), 1u); SHA1_STEP (SHA1_F2
, C
, D
, E
, A
, B
, wb_t
);
99 wc_t
= rotl32 ((w9_t
^ w4_t
^ we_t
^ wc_t
), 1u); SHA1_STEP (SHA1_F2
, B
, C
, D
, E
, A
, wc_t
);
100 wd_t
= rotl32 ((wa_t
^ w5_t
^ wf_t
^ wd_t
), 1u); SHA1_STEP (SHA1_F2
, A
, B
, C
, D
, E
, wd_t
);
101 we_t
= rotl32 ((wb_t
^ w6_t
^ w0_t
^ we_t
), 1u); SHA1_STEP (SHA1_F2
, E
, A
, B
, C
, D
, we_t
);
102 wf_t
= rotl32 ((wc_t
^ w7_t
^ w1_t
^ wf_t
), 1u); SHA1_STEP (SHA1_F2
, D
, E
, A
, B
, C
, wf_t
);
103 w0_t
= rotl32 ((wd_t
^ w8_t
^ w2_t
^ w0_t
), 1u); SHA1_STEP (SHA1_F2
, C
, D
, E
, A
, B
, w0_t
);
104 w1_t
= rotl32 ((we_t
^ w9_t
^ w3_t
^ w1_t
), 1u); SHA1_STEP (SHA1_F2
, B
, C
, D
, E
, A
, w1_t
);
105 w2_t
= rotl32 ((wf_t
^ wa_t
^ w4_t
^ w2_t
), 1u); SHA1_STEP (SHA1_F2
, A
, B
, C
, D
, E
, w2_t
);
106 w3_t
= rotl32 ((w0_t
^ wb_t
^ w5_t
^ w3_t
), 1u); SHA1_STEP (SHA1_F2
, E
, A
, B
, C
, D
, w3_t
);
107 w4_t
= rotl32 ((w1_t
^ wc_t
^ w6_t
^ w4_t
), 1u); SHA1_STEP (SHA1_F2
, D
, E
, A
, B
, C
, w4_t
);
108 w5_t
= rotl32 ((w2_t
^ wd_t
^ w7_t
^ w5_t
), 1u); SHA1_STEP (SHA1_F2
, C
, D
, E
, A
, B
, w5_t
);
109 w6_t
= rotl32 ((w3_t
^ we_t
^ w8_t
^ w6_t
), 1u); SHA1_STEP (SHA1_F2
, B
, C
, D
, E
, A
, w6_t
);
110 w7_t
= rotl32 ((w4_t
^ wf_t
^ w9_t
^ w7_t
), 1u); SHA1_STEP (SHA1_F2
, A
, B
, C
, D
, E
, w7_t
);
111 w8_t
= rotl32 ((w5_t
^ w0_t
^ wa_t
^ w8_t
), 1u); SHA1_STEP (SHA1_F2
, E
, A
, B
, C
, D
, w8_t
);
112 w9_t
= rotl32 ((w6_t
^ w1_t
^ wb_t
^ w9_t
), 1u); SHA1_STEP (SHA1_F2
, D
, E
, A
, B
, C
, w9_t
);
113 wa_t
= rotl32 ((w7_t
^ w2_t
^ wc_t
^ wa_t
), 1u); SHA1_STEP (SHA1_F2
, C
, D
, E
, A
, B
, wa_t
);
114 wb_t
= rotl32 ((w8_t
^ w3_t
^ wd_t
^ wb_t
), 1u); SHA1_STEP (SHA1_F2
, B
, C
, D
, E
, A
, wb_t
);
119 wc_t
= rotl32 ((w9_t
^ w4_t
^ we_t
^ wc_t
), 1u); SHA1_STEP (SHA1_F1
, A
, B
, C
, D
, E
, wc_t
);
120 wd_t
= rotl32 ((wa_t
^ w5_t
^ wf_t
^ wd_t
), 1u); SHA1_STEP (SHA1_F1
, E
, A
, B
, C
, D
, wd_t
);
121 we_t
= rotl32 ((wb_t
^ w6_t
^ w0_t
^ we_t
), 1u); SHA1_STEP (SHA1_F1
, D
, E
, A
, B
, C
, we_t
);
122 wf_t
= rotl32 ((wc_t
^ w7_t
^ w1_t
^ wf_t
), 1u); SHA1_STEP (SHA1_F1
, C
, D
, E
, A
, B
, wf_t
);
123 w0_t
= rotl32 ((wd_t
^ w8_t
^ w2_t
^ w0_t
), 1u); SHA1_STEP (SHA1_F1
, B
, C
, D
, E
, A
, w0_t
);
124 w1_t
= rotl32 ((we_t
^ w9_t
^ w3_t
^ w1_t
), 1u); SHA1_STEP (SHA1_F1
, A
, B
, C
, D
, E
, w1_t
);
125 w2_t
= rotl32 ((wf_t
^ wa_t
^ w4_t
^ w2_t
), 1u); SHA1_STEP (SHA1_F1
, E
, A
, B
, C
, D
, w2_t
);
126 w3_t
= rotl32 ((w0_t
^ wb_t
^ w5_t
^ w3_t
), 1u); SHA1_STEP (SHA1_F1
, D
, E
, A
, B
, C
, w3_t
);
127 w4_t
= rotl32 ((w1_t
^ wc_t
^ w6_t
^ w4_t
), 1u); SHA1_STEP (SHA1_F1
, C
, D
, E
, A
, B
, w4_t
);
128 w5_t
= rotl32 ((w2_t
^ wd_t
^ w7_t
^ w5_t
), 1u); SHA1_STEP (SHA1_F1
, B
, C
, D
, E
, A
, w5_t
);
129 w6_t
= rotl32 ((w3_t
^ we_t
^ w8_t
^ w6_t
), 1u); SHA1_STEP (SHA1_F1
, A
, B
, C
, D
, E
, w6_t
);
130 w7_t
= rotl32 ((w4_t
^ wf_t
^ w9_t
^ w7_t
), 1u); SHA1_STEP (SHA1_F1
, E
, A
, B
, C
, D
, w7_t
);
131 w8_t
= rotl32 ((w5_t
^ w0_t
^ wa_t
^ w8_t
), 1u); SHA1_STEP (SHA1_F1
, D
, E
, A
, B
, C
, w8_t
);
132 w9_t
= rotl32 ((w6_t
^ w1_t
^ wb_t
^ w9_t
), 1u); SHA1_STEP (SHA1_F1
, C
, D
, E
, A
, B
, w9_t
);
133 wa_t
= rotl32 ((w7_t
^ w2_t
^ wc_t
^ wa_t
), 1u); SHA1_STEP (SHA1_F1
, B
, C
, D
, E
, A
, wa_t
);
134 wb_t
= rotl32 ((w8_t
^ w3_t
^ wd_t
^ wb_t
), 1u); SHA1_STEP (SHA1_F1
, A
, B
, C
, D
, E
, wb_t
);
135 wc_t
= rotl32 ((w9_t
^ w4_t
^ we_t
^ wc_t
), 1u); SHA1_STEP (SHA1_F1
, E
, A
, B
, C
, D
, wc_t
);
136 wd_t
= rotl32 ((wa_t
^ w5_t
^ wf_t
^ wd_t
), 1u); SHA1_STEP (SHA1_F1
, D
, E
, A
, B
, C
, wd_t
);
137 we_t
= rotl32 ((wb_t
^ w6_t
^ w0_t
^ we_t
), 1u); SHA1_STEP (SHA1_F1
, C
, D
, E
, A
, B
, we_t
);
138 wf_t
= rotl32 ((wc_t
^ w7_t
^ w1_t
^ wf_t
), 1u); SHA1_STEP (SHA1_F1
, B
, C
, D
, E
, A
, wf_t
);