| 141 | // ------------------------------------------------------------------------------------ |
| 142 | |
| 143 | void scramble_block ( |
| 144 | uint32& a, |
| 145 | uint32& b, |
| 146 | uint32& c, |
| 147 | uint32& d, |
| 148 | uint32* x |
| 149 | ) |
| 150 | { |
| 151 | const uint32 S11 = 7; |
| 152 | const uint32 S12 = 12; |
| 153 | const uint32 S13 = 17; |
| 154 | const uint32 S14 = 22; |
| 155 | const uint32 S21 = 5; |
| 156 | const uint32 S22 = 9; |
| 157 | const uint32 S23 = 14; |
| 158 | const uint32 S24 = 20; |
| 159 | const uint32 S31 = 4; |
| 160 | const uint32 S32 = 11; |
| 161 | const uint32 S33 = 16; |
| 162 | const uint32 S34 = 23; |
| 163 | const uint32 S41 = 6; |
| 164 | const uint32 S42 = 10; |
| 165 | const uint32 S43 = 15; |
| 166 | const uint32 S44 = 21; |
| 167 | |
| 168 | |
| 169 | // round 1 |
| 170 | FF (a, b, c, d, x[ 0], S11, 0xd76aa478); // 1 |
| 171 | FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); // 2 |
| 172 | FF (c, d, a, b, x[ 2], S13, 0x242070db); // 3 |
| 173 | FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); // 4 |
| 174 | FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); // 5 |
| 175 | FF (d, a, b, c, x[ 5], S12, 0x4787c62a); // 6 |
| 176 | FF (c, d, a, b, x[ 6], S13, 0xa8304613); // 7 |
| 177 | FF (b, c, d, a, x[ 7], S14, 0xfd469501); // 8 |
| 178 | FF (a, b, c, d, x[ 8], S11, 0x698098d8); // 9 |
| 179 | FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); // 10 |
| 180 | FF (c, d, a, b, x[10], S13, 0xffff5bb1); // 11 |
| 181 | FF (b, c, d, a, x[11], S14, 0x895cd7be); // 12 |
| 182 | FF (a, b, c, d, x[12], S11, 0x6b901122); // 13 |
| 183 | FF (d, a, b, c, x[13], S12, 0xfd987193); // 14 |
| 184 | FF (c, d, a, b, x[14], S13, 0xa679438e); // 15 |
| 185 | FF (b, c, d, a, x[15], S14, 0x49b40821); // 16 |
| 186 | |
| 187 | // Round 2 |
| 188 | GG (a, b, c, d, x[ 1], S21, 0xf61e2562); // 17 |
| 189 | GG (d, a, b, c, x[ 6], S22, 0xc040b340); // 18 |
| 190 | GG (c, d, a, b, x[11], S23, 0x265e5a51); // 19 |
| 191 | GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); // 20 |
| 192 | GG (a, b, c, d, x[ 5], S21, 0xd62f105d); // 21 |
| 193 | GG (d, a, b, c, x[10], S22, 0x2441453); // 22 |
| 194 | GG (c, d, a, b, x[15], S23, 0xd8a1e681); // 23 |
| 195 | GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); // 24 |
| 196 | GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); // 25 |
| 197 | GG (d, a, b, c, x[14], S22, 0xc33707d6); // 26 |
| 198 | GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); // 27 |
| 199 | GG (b, c, d, a, x[ 8], S24, 0x455a14ed); // 28 |
| 200 | GG (a, b, c, d, x[13], S21, 0xa9e3e905); // 29 |