18inline void FF4(uint32_t& A, uint32_t& B, uint32_t& C, uint32_t& D, uint32_t M0, uint32_t M1, uint32_t M2, uint32_t M3)
34inline void GG4(uint32_t& A, uint32_t& B, uint32_t& C, uint32_t& D, uint32_t M0, uint32_t M1, uint32_t M2, uint32_t M3)
56inline void HH4(uint32_t& A, uint32_t& B, uint32_t& C, uint32_t& D, uint32_t M0, uint32_t M1, uint32_t M2, uint32_t M3)
78 uint32_t A = digest[0], B = digest[1], C = digest[2], D = digest[3];
82 std::array<uint32_t, 16> M;
84 for(
size_t i = 0; i != blocks; ++i) {
89 FF4(A, B, C, D, M[ 0], M[ 1], M[ 2], M[ 3]);
90 FF4(A, B, C, D, M[ 4], M[ 5], M[ 6], M[ 7]);
91 FF4(A, B, C, D, M[ 8], M[ 9], M[10], M[11]);
92 FF4(A, B, C, D, M[12], M[13], M[14], M[15]);
94 GG4(A, B, C, D, M[ 0], M[ 4], M[ 8], M[12]);
95 GG4(A, B, C, D, M[ 1], M[ 5], M[ 9], M[13]);
96 GG4(A, B, C, D, M[ 2], M[ 6], M[10], M[14]);
97 GG4(A, B, C, D, M[ 3], M[ 7], M[11], M[15]);
99 HH4(A, B, C, D, M[ 0], M[ 8], M[ 4], M[12]);
100 HH4(A, B, C, D, M[ 2], M[10], M[ 6], M[14]);
101 HH4(A, B, C, D, M[ 1], M[ 9], M[ 5], M[13]);
102 HH4(A, B, C, D, M[ 3], M[11], M[ 7], M[15]);
106 A = (digest[0] += A);
107 B = (digest[1] += B);
108 C = (digest[2] += C);
109 D = (digest[3] += D);