19inline 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)
35inline 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)
57inline 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)
79 uint32_t A = digest[0];
80 uint32_t B = digest[1];
81 uint32_t C = digest[2];
82 uint32_t D = digest[3];
86 std::array<uint32_t, 16> M{};
88 for(
size_t i = 0; i != blocks; ++i) {
93 FF4(A, B, C, D, M[ 0], M[ 1], M[ 2], M[ 3]);
94 FF4(A, B, C, D, M[ 4], M[ 5], M[ 6], M[ 7]);
95 FF4(A, B, C, D, M[ 8], M[ 9], M[10], M[11]);
96 FF4(A, B, C, D, M[12], M[13], M[14], M[15]);
98 GG4(A, B, C, D, M[ 0], M[ 4], M[ 8], M[12]);
99 GG4(A, B, C, D, M[ 1], M[ 5], M[ 9], M[13]);
100 GG4(A, B, C, D, M[ 2], M[ 6], M[10], M[14]);
101 GG4(A, B, C, D, M[ 3], M[ 7], M[11], M[15]);
103 HH4(A, B, C, D, M[ 0], M[ 8], M[ 4], M[12]);
104 HH4(A, B, C, D, M[ 2], M[10], M[ 6], M[14]);
105 HH4(A, B, C, D, M[ 1], M[ 9], M[ 5], M[13]);
106 HH4(A, B, C, D, M[ 3], M[11], M[ 7], M[15]);
110 A = (digest[0] += A);
111 B = (digest[1] += B);
112 C = (digest[2] += C);
113 D = (digest[3] += D);