75 std::span<const uint8_t> input_span,
77 const uint8_t* input = input_span.data();
84 const auto ABCD_SAVE = ABCD;
85 const auto E0_SAVE = E0;
92 sha1_x86_first8<0>(ABCD, E0, W0, W1);
93 sha1_x86_rnds8<0>(ABCD, E0, W2, W3);
95 W0 = sha1_x86_msg1(W0, W1);
96 W1 = sha1_x86_msg1(W1, W2);
99 sha1_x86_next_msg(W3, W0, W1, W2);
100 sha1_x86_next_msg(W0, W1, W2, W3);
101 sha1_x86_rnds8<0, 1>(ABCD, E0, W0, W1);
103 sha1_x86_next_msg(W1, W2, W3, W0);
104 sha1_x86_next_msg(W2, W3, W0, W1);
105 sha1_x86_rnds8<1>(ABCD, E0, W2, W3);
107 sha1_x86_next_msg(W3, W0, W1, W2);
108 sha1_x86_next_msg(W0, W1, W2, W3);
109 sha1_x86_rnds8<1>(ABCD, E0, W0, W1);
111 sha1_x86_next_msg(W1, W2, W3, W0);
112 sha1_x86_next_msg(W2, W3, W0, W1);
113 sha1_x86_rnds8<2>(ABCD, E0, W2, W3);
115 sha1_x86_next_msg(W3, W0, W1, W2);
116 sha1_x86_next_msg(W0, W1, W2, W3);
117 sha1_x86_rnds8<2>(ABCD, E0, W0, W1);
119 sha1_x86_next_msg(W1, W2, W3, W0);
120 sha1_x86_next_msg(W2, W3, W0, W1);
121 sha1_x86_rnds8<2, 3>(ABCD, E0, W2, W3);
123 sha1_x86_next_msg(W3, W0, W1, W2);
124 sha1_x86_next_msg(W0, W1, W2, W3);
125 sha1_x86_rnds8<3>(ABCD, E0, W0, W1);
127 sha1_x86_next_msg(W1, W2, W3, W0);
128 sha1_x86_next_msg(W2, W3, W0, W1);
129 sha1_x86_rnds8<3>(ABCD, E0, W2, W3);
132 E0 = sha1_x86_nexte(E0, E0_SAVE);
138 rev_words(ABCD).store_le(&digest[0]);
139 digest[4] = _mm_extract_epi32(E0.
raw(), 3);