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];
79 uint32_t B = digest[1];
80 uint32_t C = digest[2];
81 uint32_t D = digest[3];
85 std::array<uint32_t, 16> M{};
87 for(
size_t i = 0; i != blocks; ++i) {
92 FF4(A, B, C, D, M[ 0], M[ 1], M[ 2], M[ 3]);
93 FF4(A, B, C, D, M[ 4], M[ 5], M[ 6], M[ 7]);
94 FF4(A, B, C, D, M[ 8], M[ 9], M[10], M[11]);
95 FF4(A, B, C, D, M[12], M[13], M[14], M[15]);
97 GG4(A, B, C, D, M[ 0], M[ 4], M[ 8], M[12]);
98 GG4(A, B, C, D, M[ 1], M[ 5], M[ 9], M[13]);
99 GG4(A, B, C, D, M[ 2], M[ 6], M[10], M[14]);
100 GG4(A, B, C, D, M[ 3], M[ 7], M[11], M[15]);
102 HH4(A, B, C, D, M[ 0], M[ 8], M[ 4], M[12]);
103 HH4(A, B, C, D, M[ 2], M[10], M[ 6], M[14]);
104 HH4(A, B, C, D, M[ 1], M[ 9], M[ 5], M[13]);
105 HH4(A, B, C, D, M[ 3], M[11], M[ 7], M[15]);
109 A = (digest[0] += A);
110 B = (digest[1] += B);
111 C = (digest[2] += C);
112 D = (digest[3] += D);